在OOP中抽象友谊用户关系的最佳方法是什么?

时间:2014-07-01 23:30:06

标签: oop

我正在为具有类的解决方案建模用户显然代表系统中的用户,我需要知道在两者之间操作友谊关系操作(添加,删除,检查,阻止)的最佳方式是什么我的系统上的用户:创建一个表示这些关系的类(例如:类友谊),或使用User类来操作这些操作(例如:User-> add_as_friend(User $ user))。

我不知道我是否那么清楚但是......

另外,我不需要数据库方面的解决方案,因为我已经有了。我只需要知道如何在OOP视角中正确表示它。

1 个答案:

答案 0 :(得分:1)

我认为你已经走上了正确的轨道,并且抽象出各种关系和行为。

了解"策略"和#34;装饰师"设计模式,您可以在其中封装不同的抽象类和协议的代码。这允许动态组合对象以采用它们在运行时需要具有的行为/特征。

如果你做出所有行为&属性部分"用户"类,快速添加新功能变得笨拙和管理的痛苦。

例如,让我们假设您决定使用不同的子类"用户" (管理员,孩子,成人)。 如果它们都继承自"用户"基类,然后基函数将是相同的。

但是" askToPlay()"或者" slumberParty()"对于孩子们和成年人来说,完全会有不同的实现......孩子们可能不应该继承“浪漫的朋友”#34;财产或" goBarHopping()"方法。

您可以将这些内容保留为单独子类的一部分,但很难动态添加/删除/更改它们。此外,跟上多个子类的不同实现会重复代码/工作,并造成维护难题。

相反,请考虑创建协议或抽象类以包含这些行为。这将提供更大的灵活性,并使您更容易添加您尚未想到的新功能。

至于谁实际处理"添加,删除,阻止"等等,单个用户实例仍然可以这样做,但这是因为它们实现了作为外部接口一部分的addFriend removeFriend或blockUser方法,而不是它们类的内部。