当我们开始开发一个应用程序时,我们使用包来协调我们的类,几乎总是有一个名为domain的包(比如com.raysis.reportgen.domain),我的问题是我们应该做什么,不应该放在这个包?有没有标准的定义,还是只是程序员的口味?早些时候我读一些有关它enter link description here我应该将哪些类放入域包中?
回答
敏捷大师罗伯特C.马丁在他的重要著作敏捷软件开发定义了几个software package metrics:原则,模式与实践。人们已经讨论了传入和传出耦合在实践中的有用指标,指标应该应用于何处以及如何应用等等。无论您站在辩论的哪个位置,指标确实提供了一个很好的目标,即量化耦合的方法。然后你可以用你想要的信息做你想做的事。
一般来说,您应该更多地关注包级别,而不是在课堂级别。如果一个软件包变化很大,限制其成员依赖于这个软件包的软件包数量。相反,如果包裹稳定,鼓励其他包裹依靠它。另一个经验法则是,如果在包中更改API中的一个类时意味着必须更改包中所有其他类的API,那么您知道包具有良好的内聚性。
您也可以将这些原则看作一些OO类原则的包级版本,Martin的支持就像Single Responsibility Principle。
我会鼓励在域包中只放置域名模型相关类,如Customer
,Order
等。
而这些特定于域的实体类将用于持久层映射域实体和数据库表以及这些实体将用于在数据库表中持久化实体实例。
在基于模块化的应用程序开发中,这个domain package
你永远不会暴露在外面的世界。
你应该把类构成你的领域模型。要找出属于域模型的内容,以及从定义开始的内容。 Wikipedia says
Domain model describes the various entities, their attributes, roles,
and relationships, plus the constraints that govern the problem domain
所以你应该在那里放置代表上述概念的类。 你的代码中还有其他类不属于域模型。他们中的一些:
- 类便于数据库访问 - 属于DAO层负责数据呈现给用户
- 类 - 属于演示
有一种说法,任何需要坚持的pojo也是一个领域对象。 – MoienGK
包装组织基本上总是开发商的选择。 AFAIK没有关于如何安排包装结构的严格标准。
显然有一些最佳实践和Java convention,你应该在你的项目中保持你的类和定义他们的“担忧”。
通常domain
子包用于将域对象(或模型对象)主要放在围绕MVC模式实现的项目中,但不仅限于此。模型对象可以映射数据库中的表(如果您使用的是ORM),或者它们只是表示应用程序逻辑中涉及的实体的类。
- 1. DDD:我应该将哪些行为放在域实体上?
- 2. 我应该将哪些命令放入Autocad VB.NET项目中?
- 3. Grails:哪些类应该是域类?
- 4. 哪些代码我应该放入轨道中的部分
- 5. 我应该将哪个Python引入器放入.py标头中?
- 6. 我应该在模型类中定义哪些输入规则?
- 7. 我应该用NHibernate映射哪些类?
- 8. 我应该在哪里将函数放入管道文件中?
- 9. 我应该在哪里将MPI_INIT放入Fortran模块中?
- 10. CanExecute中应该包含哪些内容?
- 11. 我应该在这些域类上使用依赖注入吗?
- 12. 哪些值应该放在引号中,哪些不放在jQuery动画中
- 13. 在java EE中,应该将哪些jar放在库dir中?
- 14. 哪些文件应该包含这些类的文件?
- 15. 我应该在Ruby on Rails中放置哪些静态数据?
- 16. 我应该在哪里将游戏数据放入iOS
- 17. 我应该在哪些部分放置我的SqlDataReader代码?
- 18. PHP - 我们应该在会话中包含哪些数据?
- 19. 我应该在srcset属性中包含哪些解决方案?
- 20. Throwable的哪个子类应该被捕获,哪些不应该?
- 21. 应该在哪里“包含”放在C++
- 22. 我应该在哪里将Comparers放入使用WCF的应用程序中?
- 23. 我应该在哪里将外部JAR文件放入我的Eclipse项目中?
- 24. 该放哪些代码?
- 25. 在哪个类中我应该把操作放在UML中
- 26. 如何定义哪些方面应该编入我的项目,哪些不应该在AspectJ中?
- 27. 放入参数。我应该把他们放在哪里?
- 28. 我应该在我的应用程序中包含哪些功能?
- 29. 我应该在MySQL中使用哪些类型的数据?
- 30. 我应该在3层项目中创建哪些数据类?
期待着拿到那本书。 – MoienGK
这是一个必读。认真。 – Vidya
你知道吗,我猜每个人都有这个小问题,乍一看似乎并不重要,但深入研究这些概念让一些专家 – MoienGK