.net 在展示ViewModel之前调用多个WCF来构建ViewModel是奇怪还是奇怪?

.net 在展示ViewModel之前调用多个WCF来构建ViewModel是奇怪还是奇怪?,.net,asp.net-mvc,wcf,linq-to-sql,.net,Asp.net Mvc,Wcf,Linq To Sql,如果我在控制器中需要这样的代码,我是否做错了什么?我应该做些不同的事情吗 public ActionResult Details(int id) { var svc = new ServiceClient(); var model = new MyViewModel(); model.ObjectA = svc.GetObjectA(id); model.ObjectB = svc.GetObjectB(id); model.ObjectC = svc.G

如果我在控制器中需要这样的代码,我是否做错了什么?我应该做些不同的事情吗

public ActionResult Details(int id)
{
    var svc = new ServiceClient();
    var model = new MyViewModel();
    model.ObjectA = svc.GetObjectA(id);
    model.ObjectB = svc.GetObjectB(id);
    model.ObjectC = svc.GetObjectC(id);
    return View(model);
}

我问这个问题的原因是,我在后端有Linq到Sql,还有一个WCF服务,它通过一组DTO公开功能,这些DTO不是Linq到Sql生成的类,因此没有父/子属性;但是在详细视图中,我想看到一些父/子数据。

< P>您可以考虑用单个工厂方法替换多个方法,该方法将生成预填充对象并返回它。WCF调用有很大的开销,如果可能的话,应该尽量减少开销

如果我需要的话,我是不是做错了什么 在控制器中编写这样的代码?应该 我会做些不同的事情吗

public ActionResult Details(int id)
{
    var svc = new ServiceClient();
    var model = new MyViewModel();
    model.ObjectA = svc.GetObjectA(id);
    model.ObjectB = svc.GetObjectB(id);
    model.ObjectC = svc.GetObjectC(id);
    return View(model);
}
你的方法看起来不错。祝贺你

但在细节视图中,我希望 查看一些父/子数据


您可以在WCF服务中公开一个专门的方法,以在ObjectB集合中为您带来一组ObjectA(反之亦然)

问题是服务不知道类
MyViewModel
此工厂方法将存在于何处?它是WCF服务接口上的方法吗?WCF服务不可能定义一些更常见的ViewModel,并且能够返回这些ViewModel,这是一种更好的设计吗?假设MyViewModel是一个纯粹的客户端对象,那么您将面临设计纯粹性和效率之间的某种折衷。在大多数系统中,我倾向于在服务器端定义通用视图模型以减少服务调用,但这可能不适合您的特定应用程序。DTO与ViewModel,同一类,不同名称。