Tôi đang phát triển CMS chủ yếu dựa trên các thành phần của khung công tác Zend. Một số các bảng cơ sở dữ liệu cho CMS này là như sau:Granularization của mô hình?
site
| id | name |
-------------
locale
| languageCode | regionCode |
-----------------------------
site_locale // link sites with locales
| siteId | languageCode | regionCode | isActive | isDefault |
-------------------------------------------------------------
Tôi có một mô hình tên Site
trong đó bao gồm, trong số những người khác, các phương pháp sau:
getId()
getName()
listLocales() // list all locales for this site
tôi là loại trên hàng rào trên cách tôi đã định hình chi tiết các mô hình:
Một tùy chọn sẽ là trả về SiteLocale
đối tượng/mô hình (nói cách khác là biểu diễn bảng DB) từ phương pháp listLocales()
, trong đó các đối tượng này SiteLocale
ntain các phương pháp sau:
getSite() // returns the Site model
getLocale() // returns a Zend_Locale
isActive() // is this locale active for the site this model represents?
isDefault() // is this the default locale for the site this model represents()
Các tùy chọn khác sẽ được chỉ đơn giản là tạo ra các phương pháp sau đây trong mô hình Site
, và được thực hiện với nó:
getDefaultLocale() // simply return the default site locale as Zend_Locale
listActiveLocales() // simply return all active site locales as Zend_Locales
listAllLocales() // simply return all site locales as Zend_Locales
Bạn cảm thấy gì là đúng cách để đi? Và tại sao?
Ngoài ra, tùy chọn đầu tiên (hoặc thậm chí cả hai tùy chọn) vi phạm Law of Demeter?
EDIT (ngày 22 tháng 1)
Mặc dù tôi thích Jeff's câu trả lời, Im vẫn mở cho mới/khác quan điểm.
Xin chào Jeff, cảm ơn bạn đã trả lời.Về sự trùng lặp, tôi đang sử dụng ràng buộc toàn vẹn tham chiếu (InnoDB) để mã ngôn ngữ và mã vùng là các khóa ngoại với các ràng buộc. Tôi thích kiểu này vì nó giúp bạn dễ dàng tìm nạp các hàng nhiều-nhiều mà không cần phải tham gia bảng ngôn ngữ. Nhưng tôi muốn có thể thêm các ngôn ngữ được tách riêng khỏi các trang web. Hy vọng điều này có ý nghĩa. Dù sao, tôi thấy những gì bạn đang nói. Tôi nghĩ rằng bạn đã thuyết phục tôi sử dụng cả hai tùy chọn, vì tôi sẽ sử dụng cả hai kịch bản mà bạn đã đề cập (đầu tiên trong giao diện người dùng, thứ hai trong phần phụ trợ quản trị). Cảm ơn vì đầu vào của bạn. –
Cảm ơn Jeff lần nữa. Tôi sẽ có bánh của tôi và ăn nó. :) –