我有两个对象.会议对象和Action对象(在会议中引发的操作).行动也可以独立于会议而存在.我有两种方法将提出的行动与会议联系起来:
对于良好的OO设计,应该使用哪种方法?还是有第三种方式......
如果只考虑你曾经计划链接到Meeting实例是行动,那么看起来最合适的Meeting是Action,而不是相反.
让Actions类操作Meeting中断封装的内部并且通常使得维护这样的代码变得更加困难.所以,我会暴露的方法addAction(Action a)对Meeting在这种情况下.
但是,如果还有其他可以链接到会议的内容,您可能需要考虑抽象"会议项目"的概念.
您可以定义一个接口,而不是Meeting了解Action或反过来,这样IMeetingItem可以公开Meeting链接到这些项目所需的必要信息.Action然后将实现IMeetingItem,使得可以做类似的事情:
meeting.addItem( action ); // action treated as an IMeetingItem in this context
Run Code Online (Sandbox Code Playgroud)
请注意,在这两种方法中,Meeting类是调解向其自身添加项的功能,而不是让添加的项操纵会议的内部表示.