【发布时间】:2013-07-08 15:34:33
【问题描述】:
我有一个 ASP.NET MVC 3 应用程序。
我有一个Model、ViewModel、View、Controller。
我使用Ninject 作为 IoC。
我的Controller 使用ViewModel 将数据传递给View。
我已经开始使用Services(具体和接口类型)从ViewModel 中获取信息,并针对数据库查询它以进行操作。
我可以使用相同的Service 来设置ViewModel 吗?还是这违背了设计模式的本质?
即我可以在Service 层抽象设置ViewModel 吗?
场景
场景是;我的Model 有很多对其他Models 的引用,所以当我在控制器中设置ViewModel 时它很冗长,我觉得Controller 做得太多了。所以我希望能够做类似的事情:
var vm = _serviceProvider.SetupViewModel(Guid model1Id, Guid model2Id, /*etc..*/)
ServiceProvider 中的 SetupViewModel 函数如下所示:
public MyModelViewModel SetupViewModel(Guid model1Id, Guid model2Id, /*etc...*/)
{
var vm = new MyModelViewModel();
var model1 = _repository.Model1s.FirstOrDefault(x => x.Id.Equals(model1Id));
var model2 = _repository.Model2s.FirstOrDefault(x => x.Id.Equals(model2Id));
// etc....
vm.Model1 = model1;
vm.Model2 = model2;
return vm;
}
通过这样做,我还可以添加一些null 条件,而不必担心让我的Controller 真的非常非常大!!
我将 1 ViewModel 用于创建/编辑操作。我不会在其他地方重复使用 ViewModel。
【问题讨论】:
-
提供更多关于您的特定架构的信息怎么样?也许是一个简短的代码示例来解释您要做什么?
-
我已经稍微编辑了我的问题,但我没有在里面放代码
-
听起来你在重用 ViewModel,这很糟糕。
-
@Phil 我在问题中添加了一些信息
-
没有“正确”之类的东西。只有最能满足您客户要求的产品。 :) 对一个项目可能至关重要的东西对另一个项目可能完全没有必要。
标签: c# asp.net-mvc asp.net-mvc-3