鉴于课程Company
,Employee
和Car
,检索与公司或员工相关联的汽车的方法的首选做法是什么?
Employee.GetCars(params...)
Company.GetCars(params...)
或者:
Cars.GetByEmployee(params...)
Cars.GetByCompany(params...)
第一种方法是我一直使用的方法,对我来说似乎总是最直观的。但在看到使用第二种方法的大型代码库后,我不得不承认它正在增长。我真正喜欢第二种方法的两件事是:
Car
相关代码组合在一起,使代码更加模块化,更易于维护。Car
(在这种情况下更像是List<Car>
),并归入Car
类。是否有涵盖此的最佳做法?
答案 0 :(得分:6)
我会在实体类中使用第一种方法。这些方法应该没有参数,因为它们只返回所有关联。 涉及一些简单业务逻辑的第二种方法应放在辅助类中,或者如果你有的话可以放在CarDAO中。
答案 1 :(得分:2)
我认为没有一个解决方案。这取决于你如何争论。如果由汽车负责人知道他们是谁,我会使用第二种方法。但如果员工有责任知道他有哪些车,那么我会采用第一种方法。
但是我个人更喜欢第一种方法,因为它似乎更容易实现。
答案 2 :(得分:2)
员工有一辆汽车(或者一些汽车,因此),所以每个员工自然知道他使用了哪些汽车。但汽车是否知道或关心谁“拥有”它?我会说不。它可能知道谁在驾驶它,但这是一个不同的问题。
汽车确实知道哪个员工拥有它(哪个感觉不对,这是一个奇怪的关系),或者它必须搜索所有员工发现自己,这更糟糕(不合逻辑,狗慢,一切都松散耦合)。
答案 3 :(得分:2)
这两种方法对我来说都有点不对劲。为什么Employee类应该知道Car类?为什么汽车课应该了解员工?两个类都不需要另一个函数来运行,因此不需要耦合它们。我只会存储一个字典,将员工映射到一组汽车,另一个将公司映射到一系列汽车。
答案 4 :(得分:1)
没有最好的办法。这取决于您的应用程序需要做什么。使用相同数据的两个应用程序可以具有完全不同的对象模型,具体取决于它们的用例。
答案 5 :(得分:1)
通过Demeter逻辑处理法运行此问题。非常有帮助,对!和合
问题以一种始终在Employee和Car类之间进行耦合的方式呈现。如果您可以将car.GetByEmployee(...)
更改为car.GetByDriversLicenseNumber(...)
(或类似的内容),那么您可以将这两个类分开。
最好的方法是减少耦合到的对象的数量。所以,这一切都取决于链中的下一级对象如何成为Car。
我不认为这个问题有一个正确的问题,这一切都是关于当前的情况。
答案 6 :(得分:0)
都不是。
有一个名为ICarOwner
的界面由Employee
和Company
(或其派生词)实施,然后使用属性CarOwnership
创建类Car
(类型Car
或ICar
)和Owner
(ICarOwner
类型)。
当您需要查找汽车所有权时,您无需关心所有者是员工还是公司。您只需要执行CarOwnerships.GetByOwner(ICarOwner)
。
我希望这会有所帮助。
答案 7 :(得分:-1)
这完全取决于关系。一个员工可以拥有一辆车吗? (1:N)永远不要从N侧引用1侧,这就是我老师所说的。其他事情也一样。如果你有1:1,你可以做到这两点。 Employee.getCar和Car.getOwner; - )