2011-10-21 11 views
0

私はGUIから来るオブジェクトguiObjectを持っています。そのデータフィールドに基づいて、適切なクラスのdomainObjectをインスタンス化する必要があります。 DomainClassAまたはDomainClassBのいずれかになります。OOP:この状況では、どのようなクラス設計が適切なはずですか?

DomainClassAは、1つの整数コンストラクタパラメータintParamAguiObject.fieldAから)を持ちます。

DomainClassBには、1つの整数コンストラクタパラメータintParamBguiObject.fieldBから)があります。 guiObjectから必要なフィールドをとり、私はAbstractFactoryを作った。この問題を解決するために

GuiClassから適切なフィールドを持つDomainClassAFactoryまたはDomainClassBFactoryのいずれかをインスタンス化し、それをretuns。次に、これらのファクトリのいずれかcreate()は、domainObjectを正しくインスタンス化します。

しかし、今、guiObject.fieldCに応じて、私はdomainObjectをインスタンス化する前にintParamAintParamB(1により、すなわち減少)を変更する必要があります。これを達成するためには、それぞれの異なるタイプの "パラメータ変更"のための別々のファクトリをそれぞれDomainClassに対して作成し、その後、正しいファクトリを生成する別々の抽象ファクトリを作成する必要がありました。それは醜いと思われ、それは醜いように見えます。

正しいデザインは何ですか?

+2

私はこの説明は非常に混乱を見つけます。 – mre

答えて

4

がすべてである必要がない限り、guiObjectを呼び出すファクトリを持ち、正しいタイプを返します。

多くのアプリが必要としない過度の分析は、あまりにも多くのものにつながります。厳密に必要な場合にのみ抽象レイヤーを追加します。彼らは通常はありません。

+0

+1アメン​​、兄弟。 – StriplingWarrior

+0

+1間接指定が多すぎるという問題に対しては、別のレベルの間接指定例外によって、すべての設計上の問題を解決できます。 –

1

私は個人的にはむしろあまりそれを広めるためにしようとするよりも、元の工場出荷時にすべてこのロジックを置くところ:

public DomainObj getDomainObj(GuiObject guiObject) { 
    int param = guiObject.someField ? guiObject.intParamA : guiObject.intParamB; 
    param = guiObject.fieldC ? param : param - 1; 
    return guiObject.someField ? new DomainClassA(param) : new DomainClassB(param); 
} 
関連する問題