現在、アプリケーションには次のレイヤーがあります。
- API
- AppServiceレイヤー
- ドメインモデル
- リポジトリ
下位(2)層(ドメインとリポジトリ)は、ビジネスニーズ全体でほぼ完全に再利用できるため、少なくともドメインモデルをサービス(場合によってはWCFサービス)として公開することを考えました。基本的に、ドメインエンティティのデータ、動作、および永続性は再利用可能であり、これを一元的に公開する方法が必要です。
私は以下( WCFサービスとのドメインモデルの共有)と、WCFを介してドメインエンティティを直接公開しない理由を示す類似のものを読みました。ほとんどの例は、ドメインデータを公開するためのデータコントラクトを作成し、ドメインとDTO(データコントラクト)データの間でマッピングするためのマッピングメカニズムを備えていることを示しています。ここまでは順調ですね。
以下のようなメソッドがドメインレイヤーにある場合、新しいWCFサービスを介してそれを公開するにはどうすればよいですか?DTOのみを公開すると思ったので、プロセス間で再利用したい共有/共通ドメインの動作も公開するにはどうすればよいですか?
public int ProcessSomeRule(string param1, string param2)
答えが、プロキシとして機能するメソッドをWCFサービス上に作成することであり、それでもProcessSomeRule
メソッドを直接公開しない場合、私はそれでかっこいいですが、それは別の質問を引き起こします。この抽象化と、たとえばProcessSomeRuleWCF(string,string)
内部で向きを変えてドメインメソッドを呼び出すという名前のWCFサービスでメソッドを作成する目的は、まだ結合されており、純粋な抽象化を提供していないようです。それでも署名の変更に敏感です。
メソッドを直接公開しないことで、コントラクトインターフェイスを変更せずに内部で変更を加えることができることを読みました。OK、これは定義上素晴らしいように聞こえますが、私の内部メソッドに追加のパラメーターが必要で、署名が `ProcessSomeRule(string、string、string)である場合、何を推測しますか?3番目のパラメーターが欠落しているため、コントラクトインターフェイスメソッドが機能しなくなります。そのため、インターフェイスを変更する必要があります。これを行う方法がわからなくても、抽象化を価値のあるものにしますか?
同じように私のリポジトリは汎用的であり、プロセス間で使用できます。このレイヤーも再利用したいと思います。現在、私のリポジトリ(UoW)インターフェイスはAppServiceレイヤーに挿入されているため、リポジトリレイヤーがWCFサービスである場合にこれがどのように機能するかわかりません。
質問:ドメインレイヤーとリポジトリレイヤーの共有動作を公開するにはどうすればよいですか?また、これらの新しいレイヤーの名前は何と呼ばれますか?新しいレイヤーは「ドメインサービス」という名前のドメインを公開し、「AppService」と「DomainModel」の間に位置していますか?
最後に、私がこれのいずれかで間違った道を進んでいる場合は、遠慮なく私を戻してください。ありがとう!