日期:2014-05-17  浏览次数:20499 次

请问在MVC中读写数据库的代码应该放在Model里还是Control里?
本帖最后由 yeagen 于 2012-09-25 17:25:47 编辑
刚学mvc,在用.net mvc3.0 + entity framework做项目,边学边做
学习时参考的例子是:MusicStore
在MusicStore例子中,把操作EF代码以及业务逻辑都写在了Control层里,Model层里仅有数据库对应的类,以及类的一些校验标准。
最近在网上浏览MVC相关知识的时候发现,mvc定义中的control层应该只用于控制页面显示和参数获取,Model层则是用来操作数据库以及业务逻辑等。正好和MusicStore例子中的相反。


我想问mvc中对于数据库的操作和业务逻辑操作,应该属于哪一层?
我应该参考mvc的定义呢?还是MusicStore中的写法呢?
又或者说,微软的.net mvc对于开发人员的建议(重control轻model)和mvc的基本定义(轻control重model)是冲突的?

------解决方案--------------------
Control处理页面请求,并调用Model中的业务逻辑,Control是发送指令控制流程,而不应该吧业务逻辑放在Control,轻Model,可以是在页面提交表单时通常会以最小的表单Model来发送请求,个人理解.
------解决方案--------------------
Model层负责业务处理  应该是放到Model层里面更好
给你一个现在用得着的网址:http://www.cnblogs.com/wlflovenet/tag/Entity%20Framework/
------解决方案--------------------
MusicStore只是教学,是ABC。IT有架构师这种职业,为什么有架构师,是因为架构是根据需要来的,不是一层不变的,你现在做的项目不多,特别是大型的项目,所以视野和认知还有待提升。底层到框架,从设计到架构,是一个积累的过程,加油。

PS:大项目中的数据库读写多半都是SOA面向服务的,服务又多是多层架构隔离到底层的。MVC是一种思想,要灵活多变。
------解决方案--------------------
应该使用Repository模式,同时区分ViewModel和Model。
------解决方案--------------------
引用:
mvc定义中的control层应该只用于控制页面显示和参数获取,Model层则是用来操作数据库以及业务逻辑等

确实如此,
MVC的职责划分是为了高度的重复利用设计成果,
MVC的每个层都是项目无关的,而不是特定的只能用于某个程序,
并且,M层更是UI平台无关的,