为了账号安全,请及时绑定邮箱和手机立即绑定

Asp.net mvc, 在controller中进行数据读取操作是正确的做法么?

Asp.net mvc, 在controller中进行数据读取操作是正确的做法么?

HUX布斯 2018-10-24 05:06:47
例如某个Action如下 public ActionResult Details(int id){    var user = UserRepository.GetItem(id);    return View(new MemberViewModel() { User = user });} 在这个action中调用了repository进行了数据读取,可是我查看一些资料说mvc模式是应该在model中进行数据读取的,似乎在controller中只进行view的选择.请问是这样么?如果是的话,可否告知model层具体怎样做?难道是再封装一次数据读取?
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

“可是我查看一些资料说mvc模式是应该在model中进行数据读取的”,这里的Model并不是指MVC里的Model。MVC是表现层的架构,这里的Model实际上是ViewModel,即供View进行展示的数据。ViewModel不包含业务逻辑,也不包含数据读取(就如同LZ的MemberViewModel)。

而在N层架构中,一般还会有一个Model层,用来与数据库的表相对应(如LZ的User),也就是所谓ORM中的O。这个Model可能是POCO,也可能是包含一些验证逻辑的实体类,一般也不包含数据读取。进行数据读取的是数据访问层,也就是LZ的UserRepository。而作为UI层的MVC一般不直接操作数据访问层,中间会有一个业务逻辑层封装业务逻辑、调用数据访问层。UI层(Controller)通过业务逻辑层来得到数据(Model),并进行封装(ViewModel),然后选择相应的View。

以上说的只是简单的N层架构,如果是分布式系统,可能还会有服务层、DTO层等等,就不赘述了。

不过,也没有必要严格遵循N层架构的模式。对于十分简单的系统,如果业务逻辑十分简单,只是到数据访问层相应方法的映射,那么完全可以剔除业务逻辑层,而像LZ那样直接通过Controller调用数据访问层。但对于相对较大的系统,业务逻辑复杂,不管将其置于Controller中还是数据访问层中,都会导致其臃肿,职责不单一。这时还是需要提供一个业务逻辑层的。

因此,LZ的做法适合小型简单的系统。对于稍复杂的系统,最好提供业务逻辑层,它不仅仅是“封装一次”数据读取,还封装业务逻辑。


查看完整回答
反对 回复 2018-10-25
  • 2 回答
  • 0 关注
  • 751 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信