【问题标题】:What classes should I put in domain package? [closed]我应该在域包中放入哪些类? [关闭]
【发布时间】:2013-11-14 01:26:11
【问题描述】:

当我们开始开发应用程序时,我们使用包来逻辑组织我们的类,并且几乎总是有一个名为 domain 的包(如com.raysis.reportgen.domain)。我的问题是我们应该在这个包裹中放什么,不应该放什么?有标准定义还是只是程序员的口味?

早些时候我在这里读到了一些关于它的东西:What is Java domain model?

【问题讨论】:

    标签: java oop package project-organization


    【解决方案1】:

    敏捷大师 Robert C. Martin 在他的开创性著作敏捷软件开发:原则、模式和实践中定义了几个 software package metrics。人们争论过传入和传出耦合等指标在实践中的有用程度,指标应该在哪里以及如何应用等。无论你站在辩论的哪个位置,这些指标确实提供了一种很好的客观、可量化的方式来衡量耦合。然后,您可以对这些信息做任何您想做的事情。

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

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

    【讨论】:

    • 期待拿到那本书。
    • 必读。说真的。
    • 你知道,我想每个人都有这个乍一看似乎并不重要的小问题,但深入研究这些概念会成为一些专家
    • 确实如此。此外,如果此答案对您有所帮助,我们将不胜感激。
    • 我已经投票了。
    【解决方案2】:

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

    这些特定领域的实体类将在持久层中用于映射域实体和数据库表,并且这些实体将用于在数据库表中持久化实体实例。

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

    【讨论】:

      【解决方案3】:

      您应该放置构成您的领域模型的类。要找出什么属于域模型,什么不属于域模型,让我们从定义开始。维基百科says

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

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

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

      【讨论】:

      • 有一种说法,任何需要持久化的pojo也是域对象。
      【解决方案4】:

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

      显然,您应该在项目中遵循一些最佳实践和Java convention,以维护您的课程并定义他们的“关注点”。

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

      【讨论】:

        猜你喜欢
        • 2015-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        相关资源
        最近更新 更多