首页 新闻 会员 周边

MVC里面Model怎样合理建立?涉及到Factory工厂类字段判断问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-05-12 10:12


讨论一个问题,MVC里面Model类建立问题。

比如一个User类。有ID、Name、Password、Mail、LastLoginData这几个字段,但是不同的地方可能只需要一部分属性,我现在的写法是都是一个Factory类的函数来控制,在不同的属性前面加上判断。如

if(dr.Table.Columns.Contains("Password"))

       t.Password=dr["Password"].toString().

这种写法虽然可以不用管从数据库里面取过来的字段有哪些、数据库里面取出来的字段是否存在的问题。但是这个也影响了性能。

我现在想到另外一个想法,方法2:

对不同的User建立不同的Model,比如UserAll【这个是取全部字段的】,UserLogin【登陆只需要取账号和密码和登陆时间】,然后不同的UserModel对应一个Factory。

这样而来就不需要在Factory里面判断从数据库取出来的数据表到底有什么字段了。  最后,大家怎么看?或许大家还有什么好的方法?

听雨读诗的主页 听雨读诗 | 初学一级 | 园豆:47
提问于:2014-02-19 09:17
< >
分享
最佳答案
0

建议使用微型orm 例如 dapper 既能满足灵活性 又能使用他的从数据映射到实体的功能

收获园豆:10
向晚 | 初学一级 |园豆:79 | 2014-02-19 13:43
其他回答(4)
0

为什么 要 判断 “数据库里面取出来的字段是否存在的问题”

Yu | 园豆:12980 (专家六级) | 2014-02-19 09:26

我这边的结构是这样的:

Sql数据库----》SQL存储过程---被操作--》DAL层里面的数据库Factory(复制根据从存储过程获取的数据来创建对应的Model)----提交给-》DAL层里面的数据库repostroy仓库-----提交给---》BLL里面的Service

我这边是不用ORM的,而且我从数据库里面取的东西不是表的全部字段,大多只是一部分字段而已。我要根据这些字段来在Factory类里面判断那些Model的属性是否要赋值上去,因为空值的话会报错的。

支持(0) 反对(0) 听雨读诗 | 园豆:47 (初学一级) | 2014-02-19 09:31

@听雨读诗: 相对来说方法2会好点 ,你也可了解一下 AutoMapper

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2014-02-19 09:42
0

MVC里的Model是Viewmodel,是跟页面相关的,

在控制器里将从数据库里取出来的Model绑定到ViewModel上.

你这样在数据库访问层直接返回Viewmodel会造成所有层的耦合`

也就是你这样做了.分层也就没意义了```

吴瑞祥 | 园豆:29449 (高人七级) | 2014-02-19 10:10
0

数据库 查都查出来了,还怕多一个字段赋值吗?

给所有的字段赋值,这个实例在各层传输,有啥问题?建很多实体烦,如果是 数据库查出来都是动态列  直接使用dataTable或者是 字典键值对  在各层传输

Qlin | 园豆:2403 (老鸟四级) | 2014-02-19 10:12

采用上面的方法1的话,方法1从数据库取出来的字段大部分情况下只是Model的一部分而已,就是所谓的贫血模型,如果要直接把这个贫血模型和原模型配对的话就必须进行判断,也即使判断从数据库取出来的表中有没有对应的字段,比如说有本次查询没有Password这个字段,那如果没有这句话“if(dr.Table.Columns.Contains("Password"))”来判断的话就直接“ t.Password=dr["Password"].toString().”会报错的。

支持(0) 反对(0) 听雨读诗 | 园豆:47 (初学一级) | 2014-02-19 10:16

@听雨读诗: 

数据库 查出来的字段是动态的,会 不一样,那应该要判断,没必要多建一个实体吧。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2014-02-19 10:20

@Qlin: 如果要判断的话应该挺耗时间的,毕竟数据表的每一行都要进行扫描。但如果是一个继承基类的Model,只需要直接赋值而不需要判断了。

支持(0) 反对(0) 听雨读诗 | 园豆:47 (初学一级) | 2014-02-19 10:23
0

觉得您想多想复杂了。如果非要如此做,可以考虑继承。建立父类。

Light Xun | 园豆:198 (初学一级) | 2014-02-19 11:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册