3

私は2つのオブジェクトを持っています。Meeting オブジェクトと Action オブジェクト (会議で提起されたアクション)。アクションは、ミーティングから独立して存在することもできます。提起されたアクションをミーティングにリンクするには、次の 2 つの方法があります。

  1. "addToMeeting(Action action)" などの Action オブジェクトを渡す Meeting のメソッドがあります。ミーティングの内部で、アクションをミーティングにリンクします。ただし、このアプローチでは、Meeting オブジェクトが Action オブジェクトのメソッドを認識して使用する必要があるため、結合されます。
  2. 「addToMeeting(int actionID)」など、リンクするアクション番号を渡すだけの会議のメソッドがあります。これで、Meeting オブジェクトは Action について何も知る必要はありませんが...アクションをミーティングに追加するコードは、アクション ID を取得する方法を知る必要があるため、この「meeting.addToMeeting(action)」から変更されました。この「meeting.addToMeeting(action.getID())」に。

適切な OO 設計のためには、どのアプローチを使用する必要がありますか? それとも第三の方法がありますか...

4

4 に答える 4

5

インスタンスへのリンクを計画しているのがアクションだけである場合は、その逆ではなく、を認識するのMeetingが最も適切であるように思われます。MeetingAction

Actionsクラスにブレークのカプセル化の内部を操作さMeetingせると、通常、そのようなコードを維持することが難しくなります。したがって、この場合はメソッドaddAction(Action a)を公開します。Meeting

ただし、会議に関連付けることができる他のものがある場合は、「会議アイテム」の概念を抽象化することを検討することをお勧めします。

Meeting、またはその逆について知るのではなく、そのような項目にリンクするために必要な情報を公開するActionなどのインターフェイスを定義できます。を実装すると、次のようなことが可能になります。IMeetingItemMeetingActionIMeetingItem

meeting.addItem( action );  // action treated as an IMeetingItem in this context

どちらのアプローチでも、Meeting追加されるアイテムに会議の内部表現を操作させるのではなく、アイテムをそれ自体に追加する機能を仲介するのはクラスであることに注意してください。

于 2010-12-27T16:24:44.880 に答える
1

Action によって実装されるメソッド getID() を使用して、「Identifiable」インターフェイスを作成することをお勧めします。

次に、次のことができます。

addToMeeting(Identifiable action);

そしてメソッド内で

this.actionId = action.getID();
于 2010-12-27T16:22:40.210 に答える
0

ミーティングが何らかの形でアクションに関連付けられている限り、ある程度の結合ができます。ただし、アクション オブジェクトを生成する「アクション ファクトリ」を構築するという 3 番目のアプローチを検討することもできます。ID は、アクション オブジェクトが作成されると (場合によっては保存されると)、そのプロパティになります。その会議で行うことは、アクションを生成し、アクションの ID プロパティにアクセスできるようにファクトリに指示することだけです。

于 2010-12-27T16:21:32.807 に答える
0

オプション#1を使用します-オブジェクト間に明確な関係があるため、結合はあなたの場合は悪いことではありません。オプション#1を使用します。これにより、会議にプロパティMeetingActions[]または類似のものを持つオプションが与えられます。

于 2010-12-27T16:22:22.883 に答える