1

複数のWCFサービス(LINQ-TO-EFで動作)に接続するWPFアプリケーションを開発しています。

WPF は MVVM 方式で設計されています。

WCF サービスごとに、次のものがあります。

  • サービス層 DLL - これには、サービス インターフェイス、サービス実装が含まれます。サービスの実装は BL オブジェクトを作成し、それらのメソッドを呼び出すだけです
  • Service BL Layer DLL - これにはマネージャー ファクトリが含まれます (ファクトリはUserManagerTaskManagerなどを作成します)。各マネージャーには、インターフェースと実装があります (単体テストと DI 用)。たとえば、TaskManagerには「GetTasks」、「CheckTaskIsValid」などがあります。さらに、BL レイヤーにはData-EntityからDTOに変換する「Trasnlator」クラスがあります。BL マネージャー メソッドは、DTO をサービス層に返します。

上記に加えて、すべてのサービス BL は、以下を含むデータ アクセス レイヤー DLLを参照します。

  • MS SQL Server のテーブルを含む EDMX ファイル
  • 自動生成された DbContext + POCO エンティティ
  • クエリ プロバイダー (BL マネージャー クラスで使用)。各クエリ プロバイダーには、単体テストと DI を目的としたインターフェイスと実装があります。
  • DbContext ファクトリ - 単体テストと DI を目的としたインターフェイス + 実装。

サービスは CQS 設計 (コマンド-クエリ-分離、CQRS と混同しない) であり、クエリのみを担当する 1 つのサービスと、コマンドの送信を担当する 1 つのサービスがあることを意味します。

すべてのサービスをホストするWCF ホスト プロジェクトを通じて DI (AutoFac を使用) を使用しています (サービスに依存関係を注入できるように、IInstanceProvider を実装しました)。

DbContextは既にUoW およびリポジトリであるため、独自のリポジトリまたは作業単位は実装しませんでした。

この設計は欠陥がありますか?

私は DDD に関する多くの投稿を読みましたが、私の設計が DDD ではないことを知っています。

私の質問は - 私のデザインは十分ですか?すべてのコードを DDD にリファクタリングする必要がありますか? (集約やルート集約などを使用)。

設計についてできる限り詳細を提供するように努めたので、「あなたの質問は一般的すぎる」や「いくつかの例が必要」などの回答が得られないことを願っています... 役立つ情報があれば大歓迎です!

4

1 に答える 1

2

はい、DDD 設計ではありませんが、DDD でないからといって設計が悪いわけではありません。システムがテスト可能で、さらなる開発に柔軟に対応できる場合、ニーズに合った優れたシステム設計があるよりも、ニーズに合わせて拡張できると思います。

以下を除いて、他のすべては良さそうです。

DbContext は既に UoW およびリポジトリであるため、独自のリポジトリまたは作業単位は実装しませんでした。

UoW とリポジトリを実装しないということは、Entity Framework と密接に結合していることを意味し、テスト容易性に問題が生じる可能性があります。しかし、統合テストでカバーすることができます。データベース ロジックの単体テストでは、それ自体がテストされることがあります。

DDDは必要ですか?おそらく、システムが進化的よりも複雑になると、DDD と CQRS に行き着くでしょう。しかし、それで十分で、保守が容易で、さらなる開発、テスト可能、スケーリングが可能で、システムが脆弱でない場合は、私が考えるよりも、ビジネスニーズに集中する方がよいでしょう

于 2012-06-19T11:56:58.567 に答える