2013-11-03 36 views
1

当我们开始开发一个应用程序时,我们使用包来协调我们的类,几乎总是有一个名为domain的包(比如com.raysis.reportgen.domain),我的问题是我们应该做什么,不应该放在这个包?有没有标准的定义,还是只是程序员的口味?早些时候我读一些有关它enter link description here我应该将哪些类放入域包中?

回答

3

敏捷大师罗伯特C.马丁在他的重要著作敏捷软件开发定义了几个software package metrics:原则,模式与实践。人们已经讨论了传入和传出耦合在实践中的有用指标,指标应该应用于何处以及如何应用等等。无论您站在辩论的哪个位置,指标确实提供了一个很好的目标,即量化耦合的方法。然后你可以用你想要的信息做你想做的事。

一般来说,您应该更多地关注包级别,而不是在课堂级别。如果一个软件包变化很大,限制其成员依赖于这个软件包的软件包数量。相反,如果包裹稳定,鼓励其他包裹依靠它。另一个经验法则是,如果在包中更改API中的一个类时意味着必须更改包中所有其他类的API,那么您知道包具有良好的内聚性。

您也可以将这些原则看作一些OO类原则的包级版本,Martin的支持就像Single Responsibility Principle

+0

期待着拿到那本书。 – MoienGK

+0

这是一个必读。认真。 – Vidya

+0

你知道吗,我猜每个人都有这个小问题,乍一看似乎并不重要,但深入研究这些概念让一些专家 – MoienGK

2

我会鼓励在域包中只放置域名模型相关类,如Customer,Order等。

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

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

0

你应该把类构成你的领域模型。要找出属于域模型的内容,以及从定义开始的内容。 Wikipedia says

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

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

  1. 类便于数据库访问 - 属于DAO层负责数据呈现给用户
  2. 类 - 属于演示
+0

有一种说法,任何需要坚持的pojo也是一个领域对象。 – MoienGK

0

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

显然有一些最佳实践和Java convention,你应该在你的项目中保持你的类和定义他们的“担忧”。

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

相关问题