我有一个ASP.NET MVC 3应用程序。
我有一个Model
,ViewModel
,View
和Controller
。
我使用Ninject
作为IoC。
我的Controller
使用ViewModel
将数据传递给View
。
我已经开始使用Service
(具体和接口类型)从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
中没有任何操作发生... 它只保留View
需要呈现 ListBox 等的信息... - Callum Linington