asp.net MVC与三层架构的区别

写在前面:最近写程序的时候,经常用到三层架构,并且项目需求分析之后需要使用到asp.net MVC,在两者的结合使用时,经常把两者混为一谈,结果在项目编程中发现,如果将两者混为一谈,那么三层架构中的数据访问层(DAL)与业务逻辑层(BLL)那么应该放MVC中的什么地方呢?如果将这两层都合并到MVC中间,那么底层的后台代码岂不是都放入表现层(UI)中了?这与三层架构的核心优点,将代码分层,降低代码耦合度又相冲突。后来经过查阅得出以下总结:

  • 三层架构与MVC不是同一概念,绝不能混为一谈。
    三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。

    MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。

    架构设计是用于指导软件,系统各个方面的设计。架构设计的目的请自行百度,这里就不过多赘述。

    设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结,使用设计模式的目的是为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;

    所以三层架构与MVC是不属于同一层次的事物。

  • MVC与三层架构的目的不一样:

    MVC的目的则是实现Web系统的职能分工,即职责划分。

    三层架构的目的着重点是:高内聚,低耦合”,即解耦。

    其实职责划分也是解耦,但是三层架构侧重的是整体的一个解耦,而MVC侧重的是web系统的解耦。

  • MVC与三层架构的联系

    MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。
    我们通常所见到的MVC一般也都是在应用三层架构的基础上,即将Model层再进行分层,也就是ViewModel,用来提供给View进行展示的Model,与我们真正在后台进行增删改查的model不同。而如果Model不再进行划分的话,那么使用MVC的意义也就不大了。

  • 为什么要使用MVC

    以下借鉴于:http://www.cnblogs.com/rainbow70626/p/4967478.html
    大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化(自PHP5.0版本后已全面支持面向对象模型)语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。

    首先,最重要的一点是多个视图能共享一个模型,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论你的用户想要Flash界面或是 WAP 界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用你的代码了。

    由于模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。例如,很多数据可能用HTML来表示,但是它们也有可能要用Adobe Flash和WAP来表示。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。

    因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到Oracle,或者改变你的基于RDBMS数据源到LDAP,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松耦合的构件。

    对我来说,控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。

    拿一个简单的登陆模块说,需求是你输入一个用户名、密码,如果输入的跟预先定义好的一样,那么就进入到正确页面,如果不一样,就提示个错误信息“你Y别在这儿蒙我,输入的不对!”。

    V 这个小小的模块中,起始的输入用户名密码的页面跟经过校验后显示的页面就相当于View

    C 而这里还需要一个Controller页面,就是用于接收输入进来的用户名密码,还有经过校验后返回的一个flg(此flg就是用于判断你输入的是否正确,而跳转到相应的页面的)

    M 最后还缺一个Model,那么就是你那个用于校验的类了,他就是处理你输入的是否跟预先订好的一样不 这样就完全实现了逻辑跟页面的分离,我页面不管你咋整,反正我就一个显示,而Controller呢也不管你Model咋判断对不对,反正我给你了用户名跟密码,你就得给我整回来一个flg来,而Medol呢,则是反正你敢给我个用户名跟密码,我就给你整过去个flg

    M 提供数据、数据之间的关系、转化等,并可以通知视图和控制器自己哪些地方发生了变化。

    V 提供显示,能根据M的改变来更新自己。

    提供显示,能根据M的改变来更新自己。

    C 比如视图做了点击一个按钮,会先发给这个视图的控制器,然后这个控制器

    MVC是一个复合模式

    MV,MC都是观察者模式

    M内部的组件组合模式

    VC之间是策略模式(可以随时更换不同的控制器)来合模式

    VC之间是策略模式(可以随时更换不同的控制器)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值