2011-01-23 13 views
1

まず最初に、私がしたいことを説明しましょう。私はクライアントの要求を聞くサーバをdevolopしたい。私のサーバーはモジュラーアーキテクチャを採用しています。リモートメソッド、リモート管理の集中管理

たとえば、Offerモジュールがあります。オファーモジュールには、アクション、メッセージ、エンティティ、クエリの4つのプロジェクトがあります。 Queryプロジェクトには、通常、リモートメソッドを含むクラスが含まれています。

最初の質問:すべてのトランザクション、クエリを一元的に管理するようにサーバーを開発するにはどうすればよいですか。つまり、すべてのリクエストは、この中央管理クラスから要求されたモジュールとそのリモートメソッドにルーティングされるべきです。私はあなたのアイデアが必要です。

2番目:オファーモジュールでは、クエリプロジェクトのProductQueryクラスに10個のメソッドがあり、そのうち5個がリモートであるとします。 CustomerQueryクラスには15のメソッドがあり、そのうち3つはリモートメソッドです。 1つのクエリプロジェクト(たとえば、OfferModuleのクエリプロジェクト、またはアカウンティングモジュールのクエリプロジェクト)内のすべてのリモートメソッドを、リモート用の1つのアセンブリに取得したいとします。たとえば、1つのOfferQueryアセンブリで。

私はあなたの助けが必要です。ありがとうございました!

+0

あなたの最初の質問に関して、あなたは合理的な回答を得るにはあまりにも非特異的です。サーバーコンポーネントにどのようなフレームワークを使用しているのか、典型的で具体的なクエリはどのようなものかを知る必要があります。詳細をご記入ください。 – stakx

答えて

0

私はあなたの最初の質問に答えることはできません。なぜなら、現状では合理的に答えられないからです。


あなたの2番目の質問の私の理解:

まず、私はあなたのサーバーアーキテクチャの基本的なレイアウトを理解してみましょう:

+--------+ 1  1..n +--------+ 1 1..n +---------+ 
    | Server |<>------------| Module |<>-----------| Project | 
    +--------+    +--------+    +---------+ 

「持っているかで構成されて1台のサーバが、あります1つ以上のモジュールがあり、それぞれが複数のプロジェクトを持つ、または複数のプロジェクツから構成されています。私はあなたの質問からこれをまっすぐに取った。私がここで理解していない最初のことは、ランタイムコンポーネントやソースコードソリューションのレイアウトについてですか?

Server 
| 
+---- Accounting (module) 
|  ¦ 
|  ? (projects) 
| 
+---- Offer (module) 
¦  | 
?  +---- Action (project) 
     | 
     +---- Message (project) 
     | 
     +---- Entity (project) 
     | 
     +---- Query (project) 
      | 
      +---- ProductQuery (class) 
      | 
      +---- CustomerQuery (class) 
      ¦ 
      ? 

そして私が正しくあなたを理解していれば、あなたは今、例えばからのすべての「リモート」クエリメソッドを収集したい:

は具体的に、あなたは、モジュール、プロジェクト、およびクラスのこの階層を持っているように見えますProductQueryCustomerQueryは共通のOfferQueryクラス内にあります...これは正しいですか?あなたの2番目の質問のためのソリューションに向けた


案方向:

さて、あなたはあなたが使用した技術やフレームワークについて多くの詳細を提供していないことを考えると、私はまた、やや漠然と滞在されます:

あなたがしようとしていることは良いアプローチではないと思います。どうして?なぜなら、それらがすべて「クエリ」メソッドであるという考えに基づいて、完全に無関係なものを1つのクラスに入れるからです。しかし、彼らは非常に異なるものを照会します。 Offers,Products,Customers。それは良いオブジェクト指向設計ではありません。なぜなら、それは「ドメイン指向」ではないからです。それはクエリ指向です。

クリーンなオブジェクト(ドメイン)モデルを開発することはうまくいくと思います。システム内の論理エンティティ(例えば、既に説明したオファー、製品、アカウント、顧客など)に関するクラスを設計します。対応するクラスにはクエリメソッドが完全に含まれないようにしてください。

ここで、クエリはどこに行きますか?この作業のために、オブジェクト・リレーショナル・モデル・マッパー(OR/M)を見ることができます。 Hibernate(または.NET、NHibernate)またはMicrosoftのEntity Framework for .NETは良いオプションです。彼らはあなたのドメインモデルをリレーショナルデータベースにマップし、DBの作成、クエリ、更新、削除をすべて行います。

+0

あなたは簡単に私のプロジェクトのアーキテクチャを記述します。しかし、私は実際にクリーンオブジェクトモデルを定義しています。オファーに関する質問はモジュールのオペレーションクラスにあります。あなたは時々オファーモジュールで顧客クエリを使用しますが、私の制限された英語の中で私は詳細を説明することはできません。一つのモジュールの私の操作クラスは、指定されたメッセージを取得し、それをDBに、またはその逆に実行します。私はあなたが私に提供するものを理解します。プロジェクト私はこの種のアーキテクチャを使用しています。あなたのケアのためにたくさんありがとうございます – Trusik

+0

@Trusik、エンティティフレームワークのようなものを使用できない場合や使用したくない場合は、関連性のないクエリクラスを単一のクエリークラスに変換します。ドメインエンティティごとに1つのクエリクラスを保持します(今のように)。代わりに、クエリクラスからクエリ関連ではないすべてのメソッドをremoevして、別の場所に配置してみてください。 – stakx

+0

@ stakx.私はまだ完全にアーキテクチャを設計していません。私はあなたのオファーには開放されています。私はあなたの言うことを理解し、あなたが言うようにもっとクリーンなドメインモデルを試します。ビルド? – Trusik

関連する問題