具体问题
我有一个操纵一些公司(实体)的对象 A(一个实体),公司可以链接在一起(例如,如果他们有一些共同的股东)。我希望 A 能够知道公司 C1 是否与公司 C2 相关联。
情怀
在我的知识和习惯状态下,我认为公司实体中应该有一种方法来判断它是否与另一个实体相关(第 1 点)。当然,我可以通过获取所有公司联系来做到这一点,并查看我的公司 C2 是否在那里(第 2 点)。但这很脏,这意味着出于什么原因获得所有依赖项?获得一个可以从数据库中轻松检索的布尔值,我可以考虑在与公司链接的存储库中创建一个函数(第 3 点)。但是不,因为实体(A 或 C1 和 C2)中没有可用的东西,所以轻量级对象会记住。
论据
- 第 1 点基于单一职责原则。随意批评这一点。由于实体应该嵌入模型逻辑,我认为 isConnectedWith 函数应该在 CompanyEntity 的定义中是正确的。请记住这里 A 也是一个实体(所以这里也是存储库)
- 第 2 点是一个解决方案,它在某种意义上是好的:这是正确的做法,如果,那是一个很大的如果,Doctrine 只是模拟的是真的;如果只是调用
$object->connexions
访问了内存中某处已经存在的某些对象集合。但事实很糟糕:它不存在,它存在于我们 webapp 的常见瓶颈:数据库。 - 第 3 点我厌倦了 Data Mapper & Dependency Injection 组合告诉你的实体(和一些存储库)应该只靠它们自己存在,因为它们是模型逻辑。也许我的理解非常错误,但是由于每个人都说这是一件坏事,所以我完全放弃了在实体中注入帮助器或配置的想法。
问题
您将如何解决保持完整性和性能并避免肮脏的解决方法的问题?我的论点有哪些不好的地方?