我们今天正在讨论我们的代码库中反复出现的情况: 假设我们的软件(例如客户)中有特定的域对象。此外,我们有一组客户与我们系统中的特定用例相关。我们的业务逻辑适用于特定客户(例如getRevenue())以及适用于整个客户群的其他部分(例如getAverageRevenue(),getNumberOfActiveCustomers(),...)。 组功能还包括更改组中某些客户的方法,或搜索组中某些子组等的方法。(例如getCustomersWithoutOrdersSince())。
你会如何处理这种情况:
您如何实施这种情况或您认为哪些优点/缺点。
在"有效C ++"的第23项中; ("首选非会员非朋友功能到会员功能")Scott Meyers主张在非会员功能中移出课程。在我看来,这类似于设计3。我发现这个建议很奇怪而且违反直觉。 @jrahhali评论说,这可能是坚持单一责任原则。欢迎任何想法/帖子/网址(不幸的是我没有找到关于第23项的任何好的讨论)。
提前感谢您的意见。
答案 0 :(得分:1)
我最喜欢这个。具有作用于Customer类中的客户的方法是直观的,并且其直观地具有对CustomerGroup类中的客户上的组进行操作的方法。您还可以将CustomerGroup封装为一组客户的表示,并为将来与组相关的所有操作提供一个很好的位置。它不是静态的,所以你可以选择线程安全,如果这很重要的话。 CustomerGroup还提供了比矢量或List更多的含义。
这也不错。您仍然提供了一个分组相关行为的位置,但这次是在Customer类的静态方法中。我个人认为静态方法比OO更像程序,因此,仍然更喜欢#1。但是,在一天结束时,#1和#2非常相似,因为它们都实现了DRY方法。
这比#2更具程序性,但仍能获得相同的结果。
我想答案取决于你想要编码的OO和/或程序。