在处理基于Symfony 2
的WebApp项目时,我想出了一个普遍的OOP问题:
基于Symfony
框架的WebApp项目被分配到不同的Bundles
。这基本上只是其他框架中Library
,Assembly
等的别名:属于某种方式的代码/类在同一Bundle
内组织。
要重复使用,不同的Bundles
应该(或多或少)彼此独立。
我的WebApp项目包含(除此之外)以下两个包:
代表登录用户实体的User
类存储在AppBundle
中。
现在我需要一种新方法,它告诉我,用户是否已经购买了。
大问题是:我应该在哪里实施此方法?
解决方案1:将hasPurchases()
添加到User
类
这听起来很合理,因为“用户XY是否有购买”这个问题当然是用户XY的问题。但是:如果User
类实现了此方法,则该类必须知道/使用ShopBundle
,因此将依赖于此捆绑包。这将是一个缺点,我想避免捆绑之间的耦合。
解决方案2:在某些外部课程中实施hasPurchases($user)
为了避免User
类与ShopBundle
的任何依赖关系,我可以将方法移动到某个外部类。该方法将接收user
对象作为参数,然后检查该用户是否有任何购买。
优点是,User
对象仍然不需要了解ShopBundle
的任何信息。但是我只是将耦合问题移到另一个类:现在实现hasPurchases($user)
的类XY需要知道User
类和ShopBundle
。
那么,这里的correct
解决方案是什么?