我有两个对象。会议对象和动作对象(在会议中提出的动作)。动作也可以独立于会议而存在。我有两种方式将提出的行动与会议联系起来:


在会议上有一种方法
传递Action对象,例如
“ addToMeeting(动作)”。
在会议的内部
然后,我将动作链接到
会议。对于这种方法,尽管
会议对象需要了解的
并在操作上使用方法
对象因此变得耦合。
在我刚刚通过的会议上有一种方法
要链接的动作编号,例如
作为“ addToMeeting(int actionID)”。
现在很好,会议对象没有
需要了解有关动作的任何信息
但是......现在代码添加了
会议的行动需要知道
如何获得动作ID
从此转身
“ meeting.addToMeeting(动作)”到
这个
“ meeting.addToMeeting(action.getID())”。


为了获得良好的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




请注意,在这两种方法中,都是Meeting类调节向其自身添加项目的功能,而不是让被添加的项目操纵会议的内部表示。

09-11 19:47