比如说,model里面有一个Admin类,里面有AdminName、Pwd等属性;
然后我在这个Admin类里面处理从数据库取来的数据,再绑定成一个List<Admin>再给Controller?
还是说model的Admin类里只从数据库里取了数据,直接把DataTable给Controller,Controller再弄成一个List<Admin>给视图?
Model是存储数据的模型类,不操作数据,即怎么从数据库读取数据,又怎么讲读取的数据赋予给Model,这个活动不是在Model中进行的。是数据访问层要做的事。
我可以理解成:在model里面建一个类来写这些代码吗?
@xiao黎: 对于MVC不同的人有不同的理解,所以解释也不一样,通常所说的三层架构跟MVC不是一回事,但可以一起使用。
三层架构是:表现层(UI),数据访问层(DAL),业务逻辑层(BLL),
MVC是:模型(Model),视图(View),控制器(Controller)
这里的业务逻辑指的是需要访问DAL相关的业务逻辑,而还有一些逻辑是不访问DAL的,我认为微软的MVC是对三层架构的表现层(UI)的再次划分(Model除外,这个东西可以在DAL,BLL也可用),也就是说,页面是MVC的View,MVC的Controller决定对于客户端的请求进行必要的逻辑,不需要(直接)访问数据层的的逻辑写在Controller中,需要访问数据层的逻辑通过调用BLL来进行,而MVC的Model则作为中介,用于封装和传输从数据层=》逻辑层=》表现层(View,Controller)的数据传输(当然也可以反向)。
从MVC和三层的概念上讲,访问数据库的类应该在DAL中,不放在Model或Controller中,不过也可以不遵守此约定。
@xiao黎: 你说的返回List<Admin>的问题,我认为是这样,Admin类是数据库表中记录(某表的一行数据)的保存容器,从面向对象来说,Admin的某实体就是信息的最小单元,而需要数据List<Admin>的话就是对Admin这个数据单元的组合,这算是一种极小的逻辑操作,是不需要访问数据库的逻辑,
如果你用EntityFramework来访问数据库的话,返回的就是这种数据实体(Admin的实例),查询返回多个数据库记录的话,EntityFramework返回的是数据实体的集合(IQueryable<Admin>),直接调用IQueryable<Admin>的toList()就得到得到你要的List<Admin>了。
@北在北方: 用MVC的Web作为一个项目,Model就是那些只有属性没有方法的放在一个类库,DAL,BLL各自一个类库。
Web引用Model和BLL,
BLL 引用Model和DAL,
DAL 引用Model
@北在北方: 谢谢你很详细的解析,那像我的项目这样做合不合理:建立一个BLL文件夹存放访问数据库的类,取完数据后return DataTable给Controller,Controller再用中介Model将数据封装成List<>比视图显示。
@北在北方: 我没有用EntityFramework来访问数据库,我写存储过程 写SQLHelper之类的访问数据库取数据噢。
@xiao黎: 对于三层(UI,BLL,DAL)不成文的约定上讲,DAL文件夹存放访问数据库的类,Controller通过调用BLL(BLL调用DAL)获取数据,你可以在Controller调用的这个BLL中将每条数据封装到Model类(Admin),再将封装的多个Model(Admin)组成List<>,然后返回(return),这样,Controller在调用BLL的方法时,这个方法直接返回List<>。Controller直接使用分装好的List<Admin>。但你在Controller中将多个Admin组成List<Admin>也可以,只是个人认为从代码感官上看,组合成List的事放在BLL中较合适。
@北在北方: 明白了,超级超级感谢你。
@北在北方: 或者将原始数据封装为Model或LIst<Model>的操作放在DAL中,Web调用BLL,BLL调用DAL,一路return想要的单个Model或List<Model>就是。这个Model的分装操作放在BLL或DAL中看编写者怎么组织代码了,没有什么约定,就是程序员的习惯。
model中只是一个类型,不能做任何操作,要取数据需要自己写语句,如EF中的linq,
你看一下Controller中的代码一下明了
俺愚钝..书本说例如三层架构的BBL、DAL就相当如MVC的Model,所以不知道取数据的语句是写在Model的Admin里呢,还是在Model里新建一个类写?
@xiao黎: 三层架构。。UI (表现层) BLL(业务逻辑层) DAL(数据访问层) 取数据的操作当然写在DAL中,Model只是一个类型 ,或者说可以作为每一个层数据传递的对象。与每个层无关
@段隆贤: 哦那就是Model只写属性存放数据,那不好意思弱弱的问,从数据库取数据的语句、和把数据封装成List<Admin>的语句该写在哪个文件夹里面,就这点有些模糊..
@xiao黎: DAL,或 BLL
@段隆贤: 就是新建一个文件夹去存放BLL和DAL的代码?
初学者提问题最好不要这样抽象,这样别人可能听不懂你说啥,万一解释了,你也听不懂别人说啥。
><、可是我弄不清楚,不知道该把写在哪里...
应该在Controller从Model中取数据,Model中应该有个方法直接返回List<Admin>类型的数据,然后再把List<Admin>给视图。
Model中应该有个方法直接返回List<Admin>类型的数据,然后Controller再把List<Admin>给视图。
=》那就是Model的Admin里除了属性还写这个方法,还是新建一个类去写这个方法的?