我的域对象可以在需要时使用工厂方法或工厂层吗?
我一直在尝试让客户端代码在任何存在的地方创建和注入依赖项,但似乎这并不总是正确的做法。在这里的这个问题中,例如,在哪里检查域对象中的强制属性?,一个用户可以拥有多个宠物;没有用户,宠物就无法存在。
我一直在尝试创建一个宠物,然后将其添加到用户的集合中,但问题是为了创建宠物,我需要提供用户(这违背了拥有User::addPet(ConcretePet)
方法的目的)。
我宁愿做的是有一个User::addPet()
接受参数数组的方法,然后使用工厂或工厂方法创建 Pet。这合理吗?
编辑:另一个场景
这是另一种情况,我希望我的域模型访问工厂。如果我的用户需要他们拥有的每个 Pet 的 License 对象,那么在 User::addPet(ConcretePet) 方法中创建它是否有意义?当然我可以在服务层创建许可证,但这又意味着将业务逻辑从域中移除!