在OO设计中耦合

pou*_*enc 3 oop coupling

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

  1. 有一个方法在Meeting上传递Action对象,例如"addToMeeting(Action action)".在会议I的内部,然后将行动链接到会议.对于这种方法,虽然Meeting对象需要知道并使用Action对象上的方法,因此变得耦合.
  2. 在Meeting上有一个方法我只传递要链接的动作号,例如"addToMeeting(int actionID)".好现在会议对象不需要知道关于Action的任何内容,但......现在将代码添加到会议中的代码需要知道如何获取动作ID,因此已经从此"meeting.addToMeeting(action)"转向到这个"meeting.addToMeeting(action.getID())".

对于良好的OO设计,应该使用哪种方法?还是有第三种方式......

LBu*_*kin 5

如果只考虑你曾经计划链接到Meeting实例是行动,那么看起来最合适的MeetingAction,而不是相反.

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类是调解向其自身添加项的功能,而不是让添加的项操纵会议的内部表示.