我试图将DAL与业务层分开,因此,我决定避免使用任何ActiveRecord方法,而采用DataMapper方法。
换句话说,我的领域对象不会照顾自己。在这样做时,我似乎正在蚕食“贫血领域模型”的反模式。例如,我程序中的实体之一是组织。
组织的表示形式如下:
class Organization {
private $orgId;
private $orgName;
// getters and setters
}
因此,基本上,这个组织只不过是充当某些数据的“包”(正如马丁·福勒所说)。在PHP世界中,它不过是一个荣耀的数组。与此相关的行为为零。
关于程序的行为,我一直坚持“服务级别”类,例如OrganizationService,它主要充当这些对象与DAL之间的中介。
除了PHP潜在的扩展问题(我确实有其他原因坚持坚持将这些数据“包装”在这些对象中)之外,这种方法是否完全无效?
在这种情况下,您如何处理域模型?
也许组织最初不是我所在领域的一部分?
最佳答案
好吧,一开始似乎是这样,但是当您更多地重构代码时,您将对组织类产生一些行为……
我现在想到的一个例子是,如果您有人(员工),则可能需要将他们与组织联系起来。因此,您可能拥有一种AssociateEmployee(User employee)
方法,该方法可能会在您的组织类中找到它的位置。
或者,您可以更改公司的位置,而不是分三步设置地址,城市,州等参数,而可以添加ChangeLocation(Street, City, State)
方法。
只要一步一步走,当您在BL/服务层中遇到一些似乎应该属于该域的代码时,请将其移至该域。如果您阅读了Fowler,则在代码中看到它后就会很快得到它。
关于php - 处理贫血领域模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1019118/