搜了一些文章介绍这个。但有几个疑问。
model是数据库的映射,如果我使用了entity framework 当我映射完之后。那这些MODEL不就自动生成了? 再建一遍这个MODEL不是多此一举?可能你会说MODEL 带有一些表单的属性? 
这是我问的第二个问题。 我昨天见一个网上的文章。他就用entity framework 生成的实体当作MODEL。而把自己手动写的MODEL 带有字段属性的类全放ViewModel里。这样合理吗?

解决方案 »

  1.   

    一般 ViewModel 里会有多个Model,
    或者说ViewModel == DomainModel(真正的业务领域数据)
      

  2.   

    根据自己的 需求 而定,一般就直接使用DomainModel,
    DomainModel 还不够就自定义ViewModel。
    如果要 适合测试,可以在DomainModel上面声明抽象、接口。
      

  3.   



    KKL
      

  4.   


    第一个问题:首先,你的MODEL不需要再建一遍,比如你有个model 叫Person 里面有Name和Id
    在ViewModel你只会有一个对Model的引用例如 Person,而不会再建一遍Name和Id一般Model多指领域模型,为了包含更多的信息(领域无关,View相关,例如表单啊,设置),因此有了ViewModel第二个问题问得很模糊,正常情况Model是不会有表单属性的
    这些和View相关的信息只会在ViewModel里(所以才叫ViewModel :) )你看的文章说得很对,楼主需要深层次理解下,思考下,这些模式的起名都是很有道理的网上的文章说得很对
      

  5.   

    1.model是数据库的映射,如果我使用了entity framework 当我映射完之后。那这些MODEL不就自动生成了? 再建一遍这个MODEL不是多此一举?这句话是错滴2.可能你会说MODEL 带有一些表单的属性我昨天见一个网上的文章。他就用entity framework 生成的实体当作MODEL。而把自己手动写的MODEL 带有字段属性的类全放ViewModel里。
    这句话也是错滴所以呢,如果你立论的基础全是在错误的土壤上,自然结出啥错误的果实,那一点都不奇怪model原本就不是数据库,业务模型和数据库库模型本来就是两件事情,所以根本没啥多不多此一举的说法,本来在业务模型和数据库模型之间有需要转换,你想省掉的这个转换,那就别去博客园看那些专门误导新人的文章把非要偷换个概念把数据库模型当业务模型讲,已表示自己就OO了,自己就分层了,自己就高级了另外viewmodel看明白这个词,view什么叫视图,你觉着老外当年为啥要这么起名字?小学的时候你学过3视图是把,左视图,右视图---也就是视角变换,对象组合的意思
    这么说白, 数据库里的东西其实是一些按规律放置的基本材料,model则是大一些的有功能含义和组织结构的模型,viewmodel则是一些因为不同视角而根据模型重新映射的出的投影理解上面这句化就够了,至于新人的喜欢强追的手段,那些都是屁,今天博客园的人放个叫企业库的屁,香一阵子,明天又有一个博客园的人放个叫linq2sql的屁再香那么一阵子,后天再在来一位放一个叫EF 还code first的屁在香上那么一阵子,其实呢一阵屁香过去之后啥也木有,过去了就过去了啥也木留下
      

  6.   

    说上面的那些的话的意思,其实是别总去追博客园那些不靠谱的所谓分享和总结。现在的博客园早就没有当年那种严谨的态度,发文的时候还考虑一下影响性现在的博客园喜欢那一些自己都不甚了了滴玩意,搞几个似是而非的名词解析去体系自己都OO了,都高级了。我们的意思其实很简单,如果不适配怎么办。你能怎么办,想办法变个适配的出来呗。这么简单的一句话,到那些人口里咋就变的不像人话了?什么实体,Ef,model,vmodel,乱七八糟搞一统,一句话人话没说他们的意思就是,如果 数据库模型碰巧和你的业务模型匹配,那么你就直接用数据库模型,如果他们匹配,那么请做个转换,转换成业务模型。如果前期设计的业务模型和后期需要的UI接口匹配,那么直接使用业务模型,如果他们不匹配,那么请自己转换组合提供一个viewmodel去匹配前端UI接口
      

  7.   

    嗯,10楼还是说的蛮好的,但为什么要统一名词,是为了方便沟通~
    我还是举一个我开发中的例子吧
    用户注册,用户表 你也知道的  肯定没有验证码这个字段的
    但我现在又想在界面连验证码也一起放进去组成一个实体类
    本来按微软的MVC MusicStore是新建一个ViewModels的文件然后自己重新定义一个类的
    但我后来发现我的实体是用EF生成 在其他类库中的所以Models这个文件夹是空的
    所以我就把我自定义的类放在Models这个文件夹中了
    另外我还发现很多类要加验证属性 基本上都是自己重新写过实体类~
    但又懒得Codefirst,还是习惯从数据库生成实体~如果不适配怎么办。你能怎么办,想办法变个适配的出来呗
    +不断地总结吧~经验都是别人吃亏得到的~ 你想一步就去到完美~ 其实我也想~