php - 处理贫血领域模型

标签 php domain-driven-design domain-model

我试图将我的 DAL 与我的业务层分开,在这样做的过程中,我决定避开任何 ActiveRecord 方法并转而采用 DataMapper 方法。 换句话说,我的域对象不会自行处理。这样做,我似乎在侵犯“贫血领域模型”反模式。例如,我的程序中的实体之一是组织。

一个组织是这样表示的:

class Organization {
    private $orgId;
    private $orgName;

    // getters and setters
}

所以基本上这个组织除了充当一些数据的“包”(如 Martin Fowler 所说)之外什么都不做。在 PHP 世界中,它只不过是一个美化的数组。与之相关的行为为零。

以及程序中的行为,我一直坚持“服务级别”类,例如 OrganizationService,它主要充当这些对象和 DAL 之间的中介。

除了 PHP 的潜在缩放问题(我确实有其他原因为什么我坚持将我的数据“装袋”在这些对象中),这种方法是否完全无效?

在这些情况下,您如何处理领域模型? 也许某个组织一开始就不属于我的领域?

最佳答案

好吧,一开始看起来是这样,但是当你重构你的代码更多时,你会得到你的组织类的一些行为......

我现在可能想到的一个例子是,如果您有人员(员工),您可能希望将他们与组织联系起来。因此,您可能有一个方法 AssociateEmployee(User employee) 可能会在您的组织类中找到它的位置。

或者您可能会更改公司的位置,而不是分三步设置地址、城市、州等参数,您可以添加 ChangeLocation(Street, City, State) 方法..

一步一步来,当你在你的 BL/service 层遇到一些看起来应该属于域的代码时,将它移到域中。如果您阅读 Fowler,当您在代码中看到它时,您很快就会明白。

关于php - 处理贫血领域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1019118/

相关文章:

java - Spring data rest领域驱动设计-发布非聚合根实体

c# - 如何在域驱动模型中为基础设施层(类库)项目创建/使用配置文件

PHP/MySQL 更新复选框选择到数据库

php - 销售税计算(城市限制与非城市限制)

php - 如何定位具体的XSS漏洞?

javascript - 在 joomla 模块中使用 var 和 php 的 js 对象

linq-to-sql - 与 DDD、存储库模式和相关领域模型作斗争

c# - 使用 ViewModel 的 Winforms 数据绑定(bind)

oop - 领域驱动设计子实体更改跟踪

c# - 基于公司而非用户的复杂领域模型