0

MVC と WCF (やや) を初めて使用するので、設計に関する質問をしたいと思います。シンプルな画面の MVC アプリケーションがあります。応答オブジェクト タイプを返す WCF サービスを呼び出す必要があります。MVC アプリから WCF 呼び出しを分離するために、dll を作成しました。この dll は、IP アドレスを渡すServiceProxyというメソッドを公開します。RegisterWithService

つまり、MVC アプリ、呼び出し

ServiceProxy.RegisterWithService(xxx.xxx.xxx.xxx);

次に、メソッドはRegistrationRequestオブジェクトを作成し、それを WCF サービスに送信します。返信 (RegisterResponceオブジェクト) はオブジェクトで返信します。

私の質問は、そのオブジェクトを処理するために MVC コントローラーに戻してもよいですか、それとも何らかの形式の DTO を作成する必要があるかということServiceProxyですRegistrationDTO。 WCF 応答オブジェクトを作成し、それを MVC アプリに戻しますか?これにより、MVC は WCF オブジェクトに依存しなくなります...そのため、サービス コントラクトの変更は、作成したプロキシ クラスの変更のみを引き起こします - MVC アプリを分離したままにします。

良いデザインに見えますか?

4

1 に答える 1

0

2 レベルのオブジェクトで十分だと思います。

  1. ドメイン モデル (WCF サービスから取得)
  2. ビュー モデル (MVC アプリケーションに固有)

したがって、WCF サービス定義をリポジトリ レイヤーとしてインポートしたときに生成されたサービス プロキシ インターフェイスを使用できます。このインターフェイスは、ドメイン モデルを表すデータ コントラクトを返します。コントローラーは、このインターフェイスでさまざまなメソッドを呼び出し、ドメイン モデルをビューに渡されるビュー モデルにマッピングする役割を果たします。

例えば:

public class HomeController: Controller
{
    private readonly IServiceProxy service;
    public HomeController(IServiceProxy service)
    {
        this.service = service;
    }

    public ActionResult Index(int id)
    {
        SomeDataContract domainModel = this.service.Get(id);
        MyViewModel model = Mapper.Map<SomeDataContract, MyViewModel>(domainModel);
        return View(model);
    }
}

もちろん、アプリケーションがより複雑になる場合は、追加の抽象化レイヤーと DTO を導入できます。

于 2013-03-30T10:13:42.677 に答える