我有一門課需要通過幾種不同的方式進行排序,其中許多課程打破equals()
合同,所以我需要一組不同的Comparator
類。我擁有的問題是這些課程應該在哪裏生活?比較器在域驅動的MVC世界中的位置在哪裏?
所以,有一些具體的作爲例子的命名空間結構,使用和限制封裝結構,而不是文件結構的問題,讓我們假設下面的命名空間:
app
domain
exception
hibernatemapping
mvc
propertyeditor
tags
persistence
hibernate
域類生活在domain
命名空間以及分別在exception
和hibernatemapping
中的相關異常和休眠映射文件。 persistence
擁有DAO接口,在hibernate
中使用基於休眠的實現。所有的MVC控制器都生活在mvc
中,其中有propertyeditor
的專用屬性編輯器(這是Spring MVC)以及返回tags
中的自定義標籤的類。
我的直覺說Comparators
應該在domain
命名空間下生存,也許在domain.comparator
,但我不確定。
你會把它們放在哪裏,爲什麼?
更新:許多人建議使用一般的Util
包。當走這條路線,你會分開UI助手與域助手的Util
類嗎?例如,如果域需要根據業務邏輯原因對事物進行排序,但UI需要域不關心的其他排序?基本上,你會傾向於每層都有一個幫手包嗎?
+1按包裝進行分類。對於某些項目來說,這更有意義的是香草域/道路/服務/控制器公式。 – Kevin
那麼,在一個包通過特徵的世界裏,'Comparator'將在同一個包去的東西是比較?例如。 'foo'比較器會放在'app.foo'包中? – cdeszaq
在包通過特徵的世界裏,你將有app.myfeature,將有模型,DAO,服務以及其他類構成該功能。據推測,控制器仍然存在於其他一些軟件包中,只能與服務層通話。 – Kevin