首页 新闻 会员 周边

关于mvc的框架还是一点不懂。。

0
[已解决问题] 解决于 2015-01-06 16:33

比如说,model里面有一个Admin类,里面有AdminName、Pwd等属性;

然后我在这个Admin类里面处理从数据库取来的数据,再绑定成一个List<Admin>再给Controller?

还是说model的Admin类里只从数据库里取了数据,直接把DataTable给Controller,Controller再弄成一个List<Admin>给视图?

mvc
AaronLi的主页 AaronLi | 初学一级 | 园豆:41
提问于:2015-01-05 21:56
< >
分享
最佳答案
0

Model是存储数据的模型类,不操作数据,即怎么从数据库读取数据,又怎么讲读取的数据赋予给Model,这个活动不是在Model中进行的。是数据访问层要做的事。

奖励园豆:5
北在北方 | 初学一级 |园豆:180 | 2015-01-05 23:30

我可以理解成:在model里面建一个类来写这些代码吗?

AaronLi | 园豆:41 (初学一级) | 2015-01-06 15:31

@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中,不过也可以不遵守此约定。

北在北方 | 园豆:180 (初学一级) | 2015-01-06 16:04

@xiao黎: 你说的返回List<Admin>的问题,我认为是这样,Admin类是数据库表中记录(某表的一行数据)的保存容器,从面向对象来说,Admin的某实体就是信息的最小单元,而需要数据List<Admin>的话就是对Admin这个数据单元的组合,这算是一种极小的逻辑操作,是不需要访问数据库的逻辑,

如果你用EntityFramework来访问数据库的话,返回的就是这种数据实体(Admin的实例),查询返回多个数据库记录的话,EntityFramework返回的是数据实体的集合(IQueryable<Admin>),直接调用IQueryable<Admin>的toList()就得到得到你要的List<Admin>了。

北在北方 | 园豆:180 (初学一级) | 2015-01-06 16:11

@北在北方: 用MVC的Web作为一个项目,Model就是那些只有属性没有方法的放在一个类库,DAL,BLL各自一个类库。

Web引用Model和BLL,

BLL 引用Model和DAL,

DAL 引用Model

北在北方 | 园豆:180 (初学一级) | 2015-01-06 16:15

@北在北方: 谢谢你很详细的解析,那像我的项目这样做合不合理:建立一个BLL文件夹存放访问数据库的类,取完数据后return DataTable给Controller,Controller再用中介Model将数据封装成List<>比视图显示。

AaronLi | 园豆:41 (初学一级) | 2015-01-06 16:18

@北在北方: 我没有用EntityFramework来访问数据库,我写存储过程 写SQLHelper之类的访问数据库取数据噢。

AaronLi | 园豆:41 (初学一级) | 2015-01-06 16:21

@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中较合适。

北在北方 | 园豆:180 (初学一级) | 2015-01-06 16:28

@北在北方: 明白了,超级超级感谢你。

AaronLi | 园豆:41 (初学一级) | 2015-01-06 16:31

@北在北方: 或者将原始数据封装为Model或LIst<Model>的操作放在DAL中,Web调用BLL,BLL调用DAL,一路return想要的单个Model或List<Model>就是。这个Model的分装操作放在BLL或DAL中看编写者怎么组织代码了,没有什么约定,就是程序员的习惯。

北在北方 | 园豆:180 (初学一级) | 2015-01-06 16:32
其他回答(3)
0

model中只是一个类型,不能做任何操作,要取数据需要自己写语句,如EF中的linq,

你看一下Controller中的代码一下明了

Lucien! | 园豆:371 (菜鸟二级) | 2015-01-05 23:08

俺愚钝..书本说例如三层架构的BBL、DAL就相当如MVC的Model,所以不知道取数据的语句是写在Model的Admin里呢,还是在Model里新建一个类写?

支持(0) 反对(0) AaronLi | 园豆:41 (初学一级) | 2015-01-06 15:34

@xiao黎:   三层架构。。UI (表现层) BLL(业务逻辑层) DAL(数据访问层)   取数据的操作当然写在DAL中,Model只是一个类型 ,或者说可以作为每一个层数据传递的对象。与每个层无关

支持(0) 反对(0) Lucien! | 园豆:371 (菜鸟二级) | 2015-01-06 15:38

@段隆贤: 哦那就是Model只写属性存放数据,那不好意思弱弱的问,从数据库取数据的语句、和把数据封装成List<Admin>的语句该写在哪个文件夹里面,就这点有些模糊..

支持(0) 反对(0) AaronLi | 园豆:41 (初学一级) | 2015-01-06 15:43

@xiao黎: DAL,或 BLL

支持(0) 反对(0) Lucien! | 园豆:371 (菜鸟二级) | 2015-01-06 15:53

@段隆贤: 就是新建一个文件夹去存放BLL和DAL的代码?

支持(0) 反对(0) AaronLi | 园豆:41 (初学一级) | 2015-01-06 16:02
0

初学者提问题最好不要这样抽象,这样别人可能听不懂你说啥,万一解释了,你也听不懂别人说啥。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-01-06 09:29

><、可是我弄不清楚,不知道该把写在哪里...

支持(0) 反对(0) AaronLi | 园豆:41 (初学一级) | 2015-01-06 15:30
0

应该在Controller从Model中取数据,Model中应该有个方法直接返回List<Admin>类型的数据,然后再把List<Admin>给视图。

隔壁老王来了 | 园豆:99 (初学一级) | 2015-01-06 09:45

Model中应该有个方法直接返回List<Admin>类型的数据,然后Controller再把List<Admin>给视图。

=》那就是Model的Admin里除了属性还写这个方法,还是新建一个类去写这个方法的?

支持(0) 反对(0) AaronLi | 园豆:41 (初学一级) | 2015-01-06 15:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册