0

次のもの(リファクタリングが必要)で構成されるアプリケーションを設計する正しい方法に興味があります。

Excel Addin COM-Excelに公開されたWinFormsとメソッド(計算呼び出しとフォームアクティベーションメソッド)を含む可視クライアントライブラリこれは、クライアントライブラリの機能を使用してWCFサービスに接続します。WCFサービスには現在、計算ロジック、検証ロジック、ORMツールを介したデータベースアクセスが含まれています。

つまり、アドイン->クライアントDLLでのWinform/直接呼び出し->WCF->DBまたは計算

現在、これは2つのプロジェクトにのみ存在します。私の最初は、次のように再設計することです。

クライアントサイドプロジェクト

  • Excelの「表示」(Project.Client.Excel)。これにより、COMの可視性のレベルが1つのプロジェクトに制限されます。
  • WinFormの「ビュー」(Project.Client.UI)
  • 両方の「ビュー」セットのプレゼンテーション(Project.Client.Presenter)

サーバーサイドプロジェクト

  • データ転送オブジェクトを含むWCF「ビュー」?(Project.Server.WCFまたはサービス)
  • サーバー側のプレゼンター(Project.Server.Presenter)?
  • ビジネスロジック(Project.Business)
  • データアクセス層(Project.DAL)

私の質問は次のとおりです。

  1. DTOは、WCFプロジェクトのどこに配置する必要がありますか、それとも独自のライブラリ/プロジェクトとして配置する必要がありますか?
  2. エンティティ変換ルーチンはどこに属しますか(データエンティティ<>ビジネスエンティティ<> DTO)?すべてがビジネスロジック層にあるのか、それとも一部がサーバープレゼンターにあるのか。
  3. このタイプのスキームの正しいアーキテクチャは何でしょうか?
  4. 私がおそらく逃した他のたくさん?

リファクタリングのアイデアの一部は、アーキテクチャを修正し、関心の分離などを行い、単体テストを設計に含めることができるようにすることです。

4

2 に答える 2

0

DTOは、WCFプロジェクトのどこに配置する必要がありますか、それとも独自のライブラリ/プロジェクトとして配置する必要がありますか?

クライアントがそのサーバー側プロジェクトを参照する必要があることを意味するため、WCFプロジェクトでそれらを使用しないでください。DTO、WCFサービスコントラクト(インターフェイス)などを、サーバープロジェクトとクライアントプロジェクトの両方が参照できる別個の「共通」プロジェクトに保持することをお勧めします。

エンティティ変換ルーチンはどこに属しますか?

データエンティティ<->データアクセス層のビジネスエンティティ。ビジネスロジックのビジネスエンティティ<->DTO。もちろん、すべてのレイヤーでデータエンティティを使用することも完全に許容され、更新を維持する必要があるこれらすべての異なるエンティティとマッピングコードの必要性を回避します。システムの複雑さにもよると思いますが、EF4POCOを見てください。

他の質問については、要件や設計について詳しく知ることなく、プロジェクトのリストを正しく理解しているように見えます。

于 2012-06-14T12:40:10.617 に答える
0

これが私がそれを構成する方法ですが、この質問に対する100%正しい答えはありません。多くのバリエーションは、作業が快適になるまで意味があります。

  • Excelの「表示」(Project.Client.Excel)。これにより、COMの可視性のレベルが1つのプロジェクトに制限されます。
  • WinFormの「ビュー」(Project.Client.UI)
  • 両方の「ビュー」セットのプレゼンテーション(Project.Presenter)
  • WCFホスト(Project.Service)-IISでホストする場合は、*。svcファイルを含むWebサイト(ここでは契約はありません)。ここではビジネスコードはあまりなく、BLLで実装されたメソッドをホストするためだけのものです。
  • ビジネスロジック(Project.Business)
  • データアクセス層(Project.DAL)
  • 契約(Project.Contract)-運用およびデータ契約。これは、WCFクライアント、サーバー、およびBLLの両方で使用されるライブラリです。
  • Shared(Project.Shared)-依存関係をより適切に構造化するための一般的なヘルパー。

DTOは、WCFプロジェクトのどこに配置する必要がありますか、それとも独自のライブラリ/プロジェクトとして配置する必要がありますか?

契約

エンティティ変換ルーチンはどこに属しますか(データエンティティ<>ビジネスエンティティ<> DTO)?すべてがビジネスロジック層にあるのか、それとも一部がサーバープレゼンターにあるのか。

中小規模プロジェクトの事業。

このタイプのスキームの正しいアーキテクチャは何でしょうか?

あなたは元気そうです。

サーバー側のプレゼンター(Project.Server.Presenter)-これを使用するGUIがないため、これは私には意味がありません

于 2012-06-14T16:29:16.047 に答える