首页 新闻 会员 周边

.net mvc,感觉现在做项目弱化了Model。怎么办?求大神支招。

0
悬赏园豆:50 [已解决问题] 解决于 2016-12-26 18:17

      没有用MVC做过大型的项目,都是中小型项目。都是在Model中封装一些属性,最多写点过滤控制什么。最近看了些资料和听别人说,这样不是标准的MVC,把Model给弱化了,请问标准的Model会实现哪些功能?

     还有,现在一般都是MVC配合JS使用的,感觉在Model中也做不了什么啊!

     请大神指教指教,万分感谢!

txworld的主页 txworld | 初学一级 | 园豆:49
提问于:2016-12-26 10:30
< >
分享
最佳答案
0

首先,你对mvc的理解就不是很透彻,对于mvc中m,v,c这三个字母所代表的意义,可能还仅仅存留在刚开始接触的阶段,也就是说只是从语言描述和理论理解上知道他们的作用划分,而实际项目中没有真正实践和按照他们的功能划分去实现代码。

对于使用mvc模式开发不是很长时间的人来说,就像当初我一样,乃至到现在,思想意识里只是单纯的觉得asp.net mvc这种开发模式比以前webform好用,不用拖那么多控件。view里些单纯的html原始代码,尽管有htmlhelper这种控件,但那都是对原始html的封装,你在网页上可到的就是一片纯洁的代码,这一点是好多.netweb开发人员所向往的。controller里,尽管我们都知道它是处理model与view的一个桥梁,接收输入,控制输出,但是我们都喜欢将那一大堆业务逻辑也一起写在了controller里,最后也就造成了使用的不再像是mvc而是vc模式了,一旦这种行为出现,就会发现所谓mvc,model到底有什么用,似乎没用了,可有可无。

后来,随着学习的深入,我们接触到了code first这种数据库操作方式。感觉model的作用也就是lz所说的封装一些属性,应该叫字段,再设置些过滤什么的,甚至还结合js使用。想到这里又觉得model的功能被弱化了,因为百度百科里对 model的解释是:是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。所以就产生疑问了。所以你对model被弱化这种疑问也是情理之中。

如果我们按照标准的mvc模式去实现代码,把应有的业务逻辑放到对应的model类中去,比如一些涉及到复杂业务逻辑的操纵,而controller中我们只是接受model返回的数据,并将之反馈给view。那你想想,model的功能还会被弱化吗,看来就算被弱化也是被说这句话的人弱化的吧。

至于lz所疑问的model只不过封装一下属性,写些过滤,那只不过是model中的一小部分,也就是按照数据库的表结果写了个一模一样的类,至于表中的字段长度,是否可空,正则验证,就lz所说的写些过滤。其实这只不过是EF中数据库的一种生成方式code first,这样理解的话那么他就不是完整的model了,只不过是一个实体类。如果你用的是database first,那么你可能又会疑问,似乎连model都不要了,直接连ado.net。

所谓弱化和不弱化,只要你理解了mvc这种开发模式的真实用意就行,然后能够真正按照这种标准去执行代码编写。当然,我至今也很少这样做。

还有,lz说一般mvc都是配合js使用,你指的是model配合js使用吧,那是在code first模式下,在要生成的表的类(也就是实体)里有所用处。实体类里

        [Required(ErrorMessage = "时间不能为空")]//验证输入的值不能为空
        [StringLength(50, ErrorMessage = "最大长度不能超过50个字符")]//最大长度50
        [RegularExpression(@"^[1-9]\d*$", ErrorMessage = "请输入正整数")]//正则表达式匹配正整数
        public int TypeId { get; set; }

以上代码中三个有注释的地方技术用到了和js相关的东西,严格的说通过js会在页面特定情况下程呈现这些内容。

前提是你的view里面要有正对jquery验证的的js文件,以及标签。

收获园豆:28
龙行天涯 | 小虾三级 |园豆:1794 | 2016-12-26 13:59

    嗯,谢谢。你所说的差不多都是我现阶段所疑惑的,确实我对mvc了解只是表面的。

    还有,我说mvc配合js,指的是view里用ajax方式装载数据和用js对表单数据进行验证。

    因为现在经常这么用,然后Model就剩下仅仅对属性的封装了,更显得被弱化,如你所说的,很多情况下连model不要都是可以的。和百科里对 model的解释,完全不是一回事了。

    所以感到非常疑惑,想知道大家mvc怎样使用的,我目前这样用是不是很有问题?

    还有,我想问下你。你用mvc时,会不会经常配合ajax装载数据呢?

txworld | 园豆:49 (初学一级) | 2016-12-26 14:53

@txworld: 按理来说,如果你所在公司没有一个对mvc有开发经验的技术牛人,或者你就是你们公司最厉害的人,那么按照你这样使用是没有问题的,也是可以写项目的,只是它不符合mvc规范而已,你想在model里写业务逻辑还得慢慢来,并且model里的业务逻辑都是很复杂的那种或者多处用到的那种才将他封装到model中去。如果你当前只是简单增删改查,放到model里显然还显得繁琐,不方便。

等你以后有了一定积累,在慢慢探讨这个问题。如果你公司有大牛,那这种事情就让他来做最终决定了。没有的话就按你高兴咯:)

我用mvc的时候,从来不用它自带的ajax装载数据,都是用表单。那东西没必要去了解。你只需要会取数据就行了。

龙行天涯 | 园豆:1794 (小虾三级) | 2016-12-26 17:59

@程序人生,永无止境: 明白,谢谢。不知你说自带的ajax装载数据 是什么意思。我说的是js+ajax+json方法装载数据。

txworld | 园豆:49 (初学一级) | 2016-12-26 18:13

@txworld: 那可能是我理解成另一种方式了。你说的js+ajax+json我用mvc的时候也常用的,只不过不用在大量数据的装载上,你说这种方式有点于easyui中那种数据加载装载方式,不知你所用的是不是easyui。

龙行天涯 | 园豆:1794 (小虾三级) | 2016-12-26 18:30
其他回答(7)
0

model是啥你知道不?

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-26 10:40
0

你说的应该不是我们现在开发的流程了,应该叫,领域驱动了吧,Domain。是说在Model里面封装方法。

Model需要做什么呢?不就是显示让大家看一下么?具体干什么,交给方法调用不就好了。

不太懂,你想干什么。

 

收获园豆:7
Supper_litt | 园豆:827 (小虾三级) | 2016-12-26 10:41

你好。我的意思是,目前我的Model只是封装一些属性和写一些过滤控制。想知道标准的Model或大家一般是怎么使用Model的。我觉得我描述得很清楚了啊。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 10:51

@txworld: 就字段和属性

支持(0) 反对(0) Supper_litt | 园豆:827 (小虾三级) | 2016-12-26 10:52

@Supper_litt: 我目前是这样用的,只是最近了解/听人说,Model不仅是对属性的封装,还会对数据做操作什么的,可以实现一些其它的功能。所以就想问一下。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 11:02

@txworld: 最多就是添加一些额外属性或者对属性进行额外设置而已。

例如:

/// <summary>
        /// 0-
        /// </summary>
        private int status = 0;

        /// <summary>
        /// 0-
        /// </summary>
        public int Status
        {
            get { return this.status; }
            set { this.status = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public string StatusStr
        {
            get
            {
                switch (status)
                {
                    case 0:
                        return "不执行";
                    case 1:
                        return "执行";
                    default:
                        return "不执行";
                }
            }
        }

其它说新的就没有了,尽管底层是一个表,显示的时候也是可以根据不同页面,设置不同的ViewModel所以是不会添加方法啥的,不然太臃肿了。

支持(0) 反对(0) Supper_litt | 园豆:827 (小虾三级) | 2016-12-26 11:18

@Supper_litt: 好的,谢谢。学习了。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 14:57
0

首先要搞懂自己想干吗,否则的话不好帮你。

收获园豆:7
趣味的人生 | 园豆:214 (菜鸟二级) | 2016-12-26 10:48

你好。我的意思是,目前我的Model只是封装一些属性和写一些过滤控制。想知道标准的Model或大家一般是怎么使用Model的。我觉得我描述得很清楚了啊。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 10:51

一般的是就这么用的  没错

支持(0) 反对(0) 趣味的人生 | 园豆:214 (菜鸟二级) | 2016-12-26 10:58

@趣味的人生: 我目前也是这样用的,只是最近了解/听人说,Model不仅是对属性的封装,还会对数据做操作什么的,可以实现一些其它的功能。所以就想问一下。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 11:02

对于较大的web应用来说设计良好的model层绝对是必须的,他可以简化很多代码和数据库操作,而且使用面向借口编程可以自己定制特定的功能。至于你的理解差不多正确,struts2采用valuestack来实现前后台的数据共享传输,他会把值封装到model中,所以action实现implements ModelDriven<T>里的getModel()就可以获取的封装好的参数了。

给你一个自己写的BaseAction:你的action继承他就行了

支持(0) 反对(0) 趣味的人生 | 园豆:214 (菜鸟二级) | 2016-12-26 11:10

@趣味的人生: 好的,谢谢。学习了。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 14:57
0

Model的作用是抽象出开发过程中的对象概念。也就是说面向对象(OOP)编程。

MVC是典型的三层架构。其中model是在view层和持久层应用的对象单元。也就是说,连接数据库后使用的model属性通常和DB内表的column对应。在view层通常作为一个对象来进行set/get属性获取。

Model更像是对象这个概念的实现。(虽然这种表述有点不准确,但方便理解。)

收获园豆:2
CaiYongji | 园豆:1267 (小虾三级) | 2016-12-26 10:50

谢谢。我目前也是这么使用的。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 14:54
0

有时Model里也会写方法的,比如:

 1 public class UserManager
 2 {
 3     public List<User> UserList { get; set; }
 4    
 5     public User GetUser(srting userId)
 6    {
 7          User user=UsetList.FirstOrDefault(x=>x.UserID=userId);
 8          
 9          return user;
10    }
11 }

 

收获园豆:2
~扎克伯格 | 园豆:1923 (小虾三级) | 2016-12-26 14:26

谢谢。有这样用过,不过很少。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 14:56
0

 不用照搬别人的理论。贫血实体有他的好处,好处之一就是可以根据数据库或者设计文档生成就可以了,不然你还得考虑这个实体有哪些方法。

收获园豆:2
小彬 | 园豆:947 (小虾三级) | 2016-12-26 16:09

嗯,谢谢。因为不懂,所以想看看大家是怎么做的,学习学习。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 16:41
0

你这是因为纠结而纠结,Model主要是存放实体,当然在MVC中,你可以把数据操作也放在Model里。这都没有问题。不要纠结于Model里还应该有什么操作,这并没有明确的规定。

收获园豆:2
程序新青年 | 园豆:841 (小虾三级) | 2016-12-26 16:35

嗯,谢谢。因为不懂,所以想看看大家是怎么做的,学习学习。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2016-12-26 16:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册