1

優れたソフトウェアシステムの優れたアーキテクチャを作成する方法を学び、高レベルのコンポーネントをレイヤーに分離する方法を学んでいます。この場合、各レイヤーをブラックボックスとしてモデル化するために、ティアを使用しようとしています。

私のアーキテクチャには、プレゼンテーション、アプリケーションサービス、ビジネスロジック、ドメイン/永続性の4つの層があります。私の質問の目的のために、私たちは本当にプレゼンテーションとアプリケーションサービスに焦点を合わせる必要があるだけです。

アプリケーションサービスレイヤーには、特定のイベントの追跡を可能にするサービスが含まれます。プレゼンテーションには、イベントの追跡モデルが変更されると動的に更新されるいくつかのビューがあります。本質的に、私は一方向の変更伝播メカニズムが必要なようです。

これらのレイヤーをティアとしてモデル化しようとしているので、各ティアのファサードオブジェクト間の通信を制限し、必要に応じて、インターフェイスでのみ認識されているものの、ティアが1つ下のティアからオブジェクトを集約できるようにします。

私はこのアプリケーションをJavaでプログラミングしているので、使用するのはObservable/Observerです。ただし、Observerインターフェイスのupdateメソッドでオブジェクト引数をキャストする必要があるのは気に入らないです。このメカニズム用に独自のインターフェイスとクラスを定義することで、これを回避したいと思います。したがって、問題は、アプリケーションロジックがプレゼンテーション層のインターフェイスに依存することです。このアーキテクチャでは、特定のノーノーです。これは、MVCを最前線でモデリングし、モデルをレイヤー化する必要があるという兆候ですか?または、アプリケーションサービスレイヤーで知られているインターフェイスを使用して各ビューをモデル化することをお勧めします。それを置くのは悪い場所のようで、私は立ち往生しています。また、複数のビューを処理するためにビューハンドラーデザインパターンを使用しています。

4

2 に答える 2

0

特に、Observableから派生する必要があるJavaでは、Observer / Observableが最善のアプローチではないことが多く、単一の継承が無駄になります。また、あなたが議論するように、それが層を横切るとき、それは悪い結合を引き起こします。

私は純粋なイベントモデルを調査する傾向があります。サービスはEventListenersを登録し、変更が発生したときにPropertyChangeEventを起動する方法を提供します。

その場合、サービス層は他のサービスに通知するか、プレゼンテーション層に通知する可能性があります。プレゼンテーション層は認識せず、気にせず、プレゼンテーションのみがリスナーとして登録することによってサービスに結合されます。

于 2010-07-07T19:59:18.000 に答える
0

あなたの質問は、レイヤーを通信させる方法よりも、パブリッシュ/サブスクライブに関するものではないように思われます。

短い答え:

MVC/MVPを使用します。それらに関するブログ投稿を検索し、ソースコードをダウンロードして、覚えておいてください。ハンマーだけを持っている場合、すべてが釘のように見えます。つまり、パターンがあるからといって適用するのではなく、必要だからという理由で適用してください。

長い答え:

Javaで作業している場合は、パターンの考え方を理解できるようにするHead FirstDesignPatternsをお勧めします。今までの道のりだと思うデザインパターンに頭を悩ませたら、エンタープライズアプリケーションアーキテクチャのパターンを見ることができます。Head Firstはスキップして構いませんが、建築に興味がある場合は、この本を強くお勧めします。

Fowlerの本を読み終えたら、または少なくともN層エンタープライズアーキテクチャの基本を理解したら、順調に進んでいるはずです。

于 2010-07-07T20:38:05.220 に答える