我应该在域包中添加哪些类?

时间:2013-11-03 06:55:39

标签: java oop package project-organization

当我们开始开发一个应用程序时,我们使用包来指定我们的类,几乎总是有一个名为domain的包(比如com.raysis.reportgen.domain)我的问题是我们应该和不应该放入什么这个包裹?是有一个标准的定义还是只是程序员的味道?早些时候我在enter link description here

中读到了一些相关内容

4 个答案:

答案 0 :(得分:3)

敏捷大师罗伯特·C·马丁在他的开创性着作敏捷软件开发:原则,模式和实践中定义了几个software package metrics。人们一直在讨论传入和传出耦合在实践中的有用指标,指标在何处以及如何应用等等。无论你在辩论中的哪个方面,指标确实提供了一个很好的客观,可量化的方法来衡量耦合。然后,您可以使用这些信息做您想做的事。

通常,您应该更多地关注包级别,而不是在类级别。如果程序包正在进行大量更改,请限制其成员依赖此程序包的程序包数。相反,如果包装稳定,鼓励其他包装依赖它。另一个经验法则是,在更改包中一个类的API时,您知道包具有良好的内聚力,这意味着必须更改包中所有其他类的API。

您还可以将这些原则看作是Martin所支持的一些OO类原则的包级版本,例如Single Responsibility Principle

答案 1 :(得分:3)

我鼓励在域名包中只放置与CustomerOrder等域名模型相关的类。

这些特定于域的实体类将在持久层中用于映射域实体和数据库表,以及这些实体将用于在数据库表中持久保存实体实例。

在基于模块的应用程序开发中,这个domain package您永远不会暴露给外界。

答案 2 :(得分:0)

您应该放置构成您域模型的类。要找出属于域模型的内容以及什么不能从定义开始。维基百科says

Domain model describes the various entities, their attributes, roles,
and relationships, plus the constraints that govern the problem domain

所以你应该在代码中放置代表上述概念的类。 您的代码中还有其他类不属于域模型。其中一些:

  1. 促进数据库访问的类 - 属于DAO层
  2. 负责向用户呈现数据的类 - 属于Presentation

答案 3 :(得分:0)

包组织基本上始终是开发人员的选择。 AFAIK没有关于如何安排包装结构的严格标准。

显然,您应该在项目中遵循一些最佳做法和Java convention来维护课程并定义他们的“顾虑”。

通常domain子包用于将域对象(或模型对象)主要放在围绕MVC模式实现的项目中,但不仅仅是。模型对象可以映射数据库中的表(如果您使用的是ORM),或者它们只是表示应用程序逻辑中涉及的实体的类。