2009-04-10 8 views
0

私は基本的に次のように動作するアプリケーション(のデザイン)があります。セインデザイン代替

クラスメインクラスビジネスロジック、クラスのUserInterface

ビジネスロジックとのUserInterfaceは、ライブラリのようになるように設計されている - ではありませんの開発中ですが、クラスMainの開発者が使用しています。

BusinessLogicのコンストラクタもUserInterfaceをインスタンス化します。これは、テキストベースのメニューを表示して端末入力を取得します。その入力に基づいて、それぞれのBusinessLogicオブジェクトの関連するメソッドを呼び出すことによって、関連する機能を実行します。

しかし、これは循環参照であり、UserInterfaceがそれぞれのBusinessLogicオブジェクトを呼び出すための明白な方法はありません(BusinessLogicオブジェクト識別子はハードコードされていませんが、さらに悪いことです)。

これは論理的な設計ですが、プログラミングの面で実装するのは難しいです。

代わりに、単にUIがBusinessLogicのコンストラクタに入力データを返すことを考慮していますが、BusinessLogicが入力分析を処理しないようにしたいと考えています。

アイデア?

+0

「BusinessLogicオブジェクト識別子がハードコードされている」とは、UserInterfaceのフィールドとして「親」BusinessLogicを持つことを意味しますか? –

答えて

2

Model-View-Controller patternをお試しください。あなたの場合、モデルとコントローラは同じになることがあります。インターフェイスを使ってクラスを互いに分離し、それらの外部(例のMainから)を作成すると、すべての人生が簡単になります。

+0

ああ、それを考えるべきだった、私はそれを知っている必要があります:)私はそれを実装する最良の方法を持っていると仮定します:クラスメイン、クラスBusinessLogic、クラスUI(ビュー)、クラスコントローラ(コントローラ) )、データ、UIコンポーネント、入力分析、ビジネスロジックを効果的に分離していますか? :) – wiseguy

+0

さて、データベースは一種のモデルですが、そのデータを実際のモデルとして表現し、アプリケーションで使用できるようにする必要があります。あなたが解決している問題を表すオブジェクト。これはあなたが話す "ビジネスロジック"の部分です。 –

-1

Model-View-Controllerパターンを使用したいと思うかもしれません。

また、パーツ間のインスタンス化の依存関係を減らす場合は、Springのようにdependency-injectionを使用することを検討してください。