首页 新闻 搜索 专区 学院

MVC模式ViewModel和数据访问层耦合的问题

0
[已解决问题] 解决于 2017-08-03 08:42

简单的描述问题吧:

在MVC方案中新建了一个ViewModel对象,该对象属性就是List页面的查询字段。

然后我有一个项目是DAL层,然后需要用到这个VM对象 作为参数传入

这个时候就发现Web项目和DAL层相互耦合了,DAL需要Web里面的VM,Web又需要DAL

的数据接口。

难道要把VM对象定义放到Model项目吗(Model里面定义的是数据库实体对象)

另外我看了一些文章说有的人简单的把VM定义成对象,其实VM应该还可以做一些业务处理,或者返回相关数据,说本来VM该实现的功能都放到control方法里面去实现了。

想有人解释下该如何设计,还是我这种保留三层结构的开发运用到MVC不合适?

 

犇牛牛的主页 犇牛牛 | 初学一级 | 园豆:31
提问于:2017-08-02 11:51
< >
分享
最佳答案
0

你的对象由于比较简单或者设计之初就是以前端需求或者db为主要考虑点,所以导致你的viewobject和dataobject一致,但很多时候这两个玩意是有区别的,不管是在职责和所包含的信息量上

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10374 | 2017-08-02 15:12

是的啊 前台界面和DAL关联比较紧 基本界面增删改查都是和DAL关联

而MVC需要一个ViewModel 所以这个VM如果是查询界面 就是DAL需要的查询条件

如果是增删改界面 这个VM就是需要DAL后台处理的数据 

所以如果中间再多一个VM-》DataOjbect的转换 感觉就弄麻烦了些

我最后的解决方案就是VM就是单纯的属性定义(移到Mode项目了) 如果需要就在Controller里面通过DAL赋值给VM

然后VM和数据库对象都是可以被DAL使用的

犇牛牛 | 园豆:31 (初学一级) | 2017-08-02 15:42

@犇牛牛: 简单的项目这样也就随便了,如果是长期的玩意建议不要这样搞,到时候你会发现这种对象会越来越大,会出现一些稀奇古怪的属性,建个对象又耗不了什么时间,如果感觉中间这种对象翻译过程太麻烦,可以直接用automapper这样的东西先顶上去。

Daniel Cai | 园豆:10374 (专家六级) | 2017-08-02 16:08

@Daniel Cai: 嗯 这方法是可以

犇牛牛 | 园豆:31 (初学一级) | 2017-08-02 17:04
其他回答(3)
0

DAL需要Web里面的VM

这个是扯淡.vm当然只在web里.dal层当然只返回数据库数据.

web去组装成vm.

吴瑞祥 | 园豆:28841 (高人七级) | 2017-08-02 11:55

上面那个查询界面很多查询字段 比如有20个 然后那个VM有这20个属性

然后页面提交后自动到search方法 传入的就是封装好的这个VM

然后我的DAL查询条件就是需要VM这个对象 这个业务就是这样高度关联的

除非在action方法里面VM和DAL的参数进行转换,不是不可以,可是我们这种业务系统很多都是这样 

只想关系简单 不想存在太多对象转换

支持(0) 反对(0) 犇牛牛 | 园豆:31 (初学一级) | 2017-08-02 15:38

@犇牛牛: 你就把dal层方法改成20个参数.不传实体.

支持(0) 反对(0) 吴瑞祥 | 园豆:28841 (高人七级) | 2017-08-02 17:02
0

你高兴的话,ViewMode可以单独一个项目,这样就不会和Model混在一起了。

爱编程的大叔 | 园豆:30698 (高人七级) | 2017-08-02 14:08
0

数据库层DO,传输层DTO,webUi层VO,可以定义3个独立的项目,如果他们之间发生互转,添加项目的引用。

Qlin | 园豆:2403 (老鸟四级) | 2017-08-02 15:37

三层object对象互转? 看来是不用管效率了吧 或者这个转换时间损耗可以忽略?

支持(0) 反对(0) 犇牛牛 | 园豆:31 (初学一级) | 2017-08-02 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册