0

我有四门课:

  • 员工 - 仅包含包含特定员工信息的字段

  • EmployeeGroup - 仅包含描述员工可以从事的工作类型的字段,每个员工都属于 EmployeeGroup 类之一。

  • EmployeeDBase - 包含从数据库中添加或获取员工和员工组的方法。

  • EmployeeForm - 使用 EmployeeDbase 方法获取或添加 Employee 或 EmployeeGroup 字段到数据库。它也有自己的方法来显示信息的形式。

我认为 Employee 和 EmplyeeGroup 之间的关系是聚合以及 EmplyeeForm 和 EmployeeDBase 之间的依赖关系。Employee 和 EmployeeForm、Employee 和 EmplyeeDBase 是否有任何其他关系(因为两者都在使用 Employee 对象)。---

4

2 回答 2

0

一般同意@Benjol。这里有两种不同的关系。Employee <-> EmployeeGroup 是一个“域”关系,即反映问题空间的规则和特征。因此,最适合建模为标准关联 - 如果员工只能是一个组的成员,则为 many:1,否则为 many:many。老实说,我不会对聚合感兴趣。基数更重要。

其他关系是体系结构的,而不是域来源的。我会单独记录——最好参考一个或多个架构模式。查看Martin Fowler 的目录以获取很好的示例。

最后,有两个观察:

  1. 从您的描述看来,该设计将 Employee 和 EmployeeGroup 作为简单的值对象,在 EmployeeForm 和 EmployeeDBase 中具有所有业务逻辑。我通常怀疑将域逻辑移出域类。有时它是合理的 - 通常用于非常简单/快速的黑客系统。如果域逻辑更好地封装在域类中,而不是绑定在 ui 或 db 层中,那么任何具有任何重要域逻辑和/或预期具有重要生命周期的东西通常都更容易维护。(参见 Eric Evans 的“领域驱动设计”)。
  2. “EmployeeGroup”不是信息最丰富的名称。根据您的描述,最好将其命名为“EmployeeRole”或类似名称。看起来这在书中已经定义了,所以不是你可以改变的。
于 2010-09-14T07:46:20.837 回答
0

你的问题听起来有点......理论上。几乎像家庭作业。

对于它的价值,我认为您不应该混淆 Employee 和 EmployeeGroup 类——它们清楚地表示现实世界的实体,而 EmployeeDBase 和 EmployeeForm 是应用程序内部的软件工件。

于 2010-09-13T13:30:56.670 回答