2013-03-30 168 views
0

作为MVC和WCF(有点)的新手,我想问一个设计问题。我有一个简单的屏幕MVC应用程序。我需要调用一个WCF服务,它返回一个回复对象类型。为了从我的MVC应用程序中分离WCF调用,我创建了一个ServiceProxy dll,它公开了一个名为RegisterWithService的方法,并将它传递给一个IP地址。MVC与WCF服务设计

因此,MVC应用程序,调用

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

方法,然后创建一个RegistrationRequest对象,并发送到WCF服务。回复(RegisterResponce对象)回复一个对象。

我的问题是,是不是OK来传递对象返回给MVC控制器来处理,还是应该建立某种形式的DTO的......从而使ServiceProxy创建一个新的对象类型(也许,RegistrationDTO,这与WCF应答对象具有相同的字段,并将其传递回MVC应用程序?我猜,这使得MVC不依赖于WCF对象...因此,服务合同中的更改只会导致更改代理类我创建 - 离开MVC应用程序隔离

这是否看起来是一个不错的设计

回答

0

我认为,2级的对象是不够的:

。?个
  1. 域模型
  2. 查看模型(具体到MVC应用程序)

(从WCF服务来),所以当您导入的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的。

+0

这意味着WCF服务对象会暴露给MVC应用程序。它是否正确? – Craig

+0

是的,他们会被暴露。否则,你甚至认为如何使用这个WCF服务? –

+0

这是一个有效的问题,但我的计划是使用服务代理类,它公开基本方法,并执行所有与服务相关的工作...然后返回...某事...到我的MVC应用程序。您建议我返回WCF服务对象,这意味着,我需要在我的MVC应用程序中引用WCF服务,这是我希望避免的 - 虽然,似乎端点需要位于MVC应用程序中,并传递给代理类...所以....我卡住了。 :) – Craig