我试图将我的 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/