2

MySQL を永続化に使用する多層パターンを実装するアプリケーションを開発しています。データへのアクセスを提供し、DTO を提供する WCF サービスがあります。

さらに、次のパターンを実装する予定です: - DTO - MVP (パッシブ ビューまたは監視コントローラーかどうかはまだわかりません) - 適用可能なインターフェイスに対するコード

現在、私は生のまま次のプロジェクト構造を持っています:

+-------------------------------+
|     MySQL DB Server           |
+------+------------------------+
       ^
       | Uses Entity Framework 5.0
       |
       +
+-------------------------------------------------------------------------------+
| Application Server                                                            |
|-------------------------------------------------------------------------------|
|+------------------+ +----------------+ +--------------+ +--------------------+|
|| Data Access Layer| | Contracts      | | Communication| | Business Layer     ||
||------------------| |----------------| |--------------| |--------------------||
|| - EF 5.0 Entities| | - WCF Contracts| | - WCF Service| | - Actual Service   ||
||                  | |                | |   Hosts      | | - Session management|
||                  | |                | |              | | - Security and     ||
|+------------------+ +----------------+ +--------------+ +--------------------+|
+-------------------------------------------------------------------------------+
        ^
        | Communicates via DTOs which are acutally wrappers for Entities
        | eg. GetUserByID() or SaveUser(userDTO)
        |
        |
+-------+-----------------------------------------------------------------------+
| Clients                                                                       |
|-------------------------------------------------------------------------------|
|+-------------------+                                     +-------------------+|
|| Business Layer    |+----------------------------------->| GUI (Winforms)    ||
||-------------------|  BLL receives DTOs and creates      |-------------------||
|| -Provide WCF Servi|  Domain Objects (eg. User) which are| -Implementation of||
||  ce Access        |  Processed by presenters and passed |  View Interfaces  ||
|| -Service Reference|  to views where they are bound to   |                   ||
|| -Implementation of|  controls.                          |                   ||
||  Presenter Interf.|                                     |                   ||
|+-------------------+                                     +-------------------+|
+-------------------------------------------------------------------------------+



+------------------------------------------------------------------------+
| General                                                                |
|------------------------------------------------------------------------|
|+---------------------+ +--------------------+ +-----------------------+|
|| DTOs                | | Interfaces         | | Library               ||
||---------------------| |--------------------| |-----------------------||
|| -DTO Definitions    | | -View Interfaces   | | -General Helper Classe||
||                     | | -Presenter Interf. | |  s eg. Cryptography   ||
||                     | | -Domain Model IF.  | |                       ||
|+---------------------+ +--------------------+ +-----------------------+|
+------------------------------------------------------------------------+

外側のボックスは、Visual Studio のプロジェクト フォルダーです。内側のボックスは C# プロジェクトです

コーディングを続けて実際の実装に時間を費やす前に、自分のプロジェクトの構造やアーキテクチャについてフィードバックをもらいたいと思っています。

私は次の質問に頭を悩ませています:

  1. 上記の構造は「ベストプラクティス」に準拠していますか? 例えば。インターフェイスの場所、DTO
  2. 2 つのビジネス レイヤーを使用したり、ビジネス レイヤーをクライアントとサーバーに分割したりしても問題ありませんか? サーバー BLL はセッション管理やセキュリティなどの一般的な機能を提供し、クライアント BLL はサービス アクセスを提供します。プレゼンターによるビューも制御します。
  3. サーバー側は現在、ドメイン オブジェクトについて認識していません。ここでも使った方が良いでしょうか?これにより、エンティティがドメイン オブジェクトにマッピングされ、次に DTO にマッピングされます。
  4. WCF サービスから DTO を受け取るのは一般的ですか、それともドメイン オブジェクトを使用する必要がありますか (ここでよく議論されていることは知っていますが、私が理解していることから、ドメイン オブジェクトがそれほど複雑ではなく、マッピングとコーディングを節約できる場合に適用できます)ドメイン オブジェクトとデータベースを変更するときの労力) これにより、エンティティ<->ドメイン オブジェクト<->DTO<->ドメイン オブジェクトのような通信チェーンを維持するのが非常に難しくなりませんか?
  5. バリデーションはどこに置く?主な検証はドメインオブジェクトに行われますが、基本的な検証をビューまたはプレゼンター (たとえば、書式設定、null/not null 値など) に入れることを考えました...?
  6. データベースに新しいレコードを作成するとき、たとえば新しいユーザーの場合、クライアントも新しい DTO をサーバーに渡す必要がありますか、それとも string や int などの単純なデータ型を受け入れるサービス メソッドを作成する方がよいでしょうか?

この長い投稿で申し訳ありませんが、私の質問を 1 つの投稿にまとめて、プロジェクトの構造を提供する方がよいと思います。

どんな種類の答えでも前もって感謝します。

よろしく

4

2 に答える 2