学习了三年编程了,到如今这个阶段,開始接触架构,開始认识架构,怎样设计一个程序的结构,学名称"架构模式"(architectural pattern)。个人经历告诉我这在编程中是一门“量到质变”的学问。没有一定的编程经验,是谈不到架构的。

不说那么多。我也是刚刚接触,谈谈我认识的两种架构模式。

以下是我对MVC。UBD模式的一些个人理解,不一定正确,主要用来整理思路。

一、MVC&UBD的通用思想——高内聚,低耦合

无论是UBD 还是MVC ,程序不论简单或复杂,假设从解耦的角度来看三层架构和MVC事实上他们是一致的。

三层:UI 界面层 BLL 业务逻辑层,DAL数据訪问层,Model 实体层

 MVC

  M 即Model(模型层),主要负责出来业务逻辑以及数据库的交互

  V 即View(视图层)。主要用于显示数据和提交数据

  C 即Controller(控制器),主要是用作捕获请求并控制请求转发

 

 依照设计的原则:依赖倒转的思想。保证这三层是紧密联系在一起的。但又是互相独立的,每一层内部的变化不影响其它层。每一层都对外提供接口(Interface)。供上面一层调用。这样一来,软件就能够实现模块化。改动外观或者变更数据都不用改动其它层。大慷慨便了维护和升级。

 

 

   

二、MVC简单理解

MVC是BS 项目中提出的一种模式。是三层的一种。近期一直在做DRP项目,对于MVC的理解也是基于JSP。Servelet ,DAL来理解的。

          首先V 就是view。视图,是直接面向终于用户的"视图层"(View)。

它是提供给用户的操作界面,是程序的外壳。

不用过多解释。

 

        其次是Controller。是控制器的意思。所谓控制器,就是将用户请求转发给模型层,经过处理后把结果返回到界面展现的一个中间层。那么Controler究竟管什么工作呢?

 先来看看在Java Web中。这三个层一般的定义,一般在Java Web里,JSP充当V。Servlet充当C,JavaBean充当M,这里的Servlet管什么工作呢?接受输入。转到Model层去处理,处理结果保存后转发到JSP,然后展现数据。所以它的功能就是控制器的基本功能。它就管转发,在V和M之间转来转去。

再来说说M,即Model,在Java Web里说的是JavaBean,JavaBean不仅是实体。还包括了业务逻辑和数据库操作的类,这和实体类全然是两回事。

包括了业务逻辑和数据訪问。

二、UBD模式和MVC模式的比較

1、划分:

  三层是基于业务逻辑来分的。而mvc是基于页面来分的。这是通过在DRP中感受到的,servlet是跟JSP紧密相联的。

2、作用范围

 

  三层感觉更像是一种宏观的架构模式三层是一种思想,在此基础上,我们或者能够扩展有四层五层。都是依据业务来进行的变更。

MVC 则是处理BS项目中一个应用模式。由于MVC在Model里包括了业务逻辑层,数据操作层。这里的划分事实上也是一种三层的缩影体现。

  

 3、头重脚轻

 

 MVC给我的感觉就是这样,这就是须要关注一下Model.“三层”中典型的Model层是由实体类构成的,而MVC里,则是由三层中的BLL。DAL,Model组成的。不一样的概念,尽管名字一样。

 MVC中model的含金量是极高的。

临时就这些感悟。对于MVC的学习还在继续。



此三层非彼三层——MVC&UBD的更多相关文章

  1. 机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)

    刚刚开始接触三层的时候,我只做了两个登录小窗体的例子.画了简单的包图,可以说,为后面机房重构留下了大量的工作(因为三层理解没有深度,也没有理解出自己的东西).不过,欠下的总要还的.在做机房重构的时候, ...

  2. 三层架构介绍和MVC设计模型介绍

    springmvc是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层 进行职责解耦,基于请 ...

  3. java三层模型与三层架构

    http://zhidao.baidu.com/question/316273675.html?qbl=relate_question_4 持久层用来固化数据,如常说的DAO层,操作数据库将数据入库业 ...

  4. Spring-boot非Mock测试MVC,调试启动tomcat容器

    平常我们在使用spring-boot去debug一个web应用时,通常会使用MockMvc. 如下配置: @RunWith(value = SpringRunner.class) @SpringBoo ...

  5. mvc与三层结构

    http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑 ...

  6. mvc与三层结构终极区别

    http://blog.csdn.net/csh624366188/article/details/7183872 http://www.cnblogs.com/zhhh/archive/2011/0 ...

  7. 三层架构与MVC的区别

    我们平时总是将混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设 ...

  8. 三层架构和MVC

    注:本文章内所有内容都来自互联网,本人主要是起了一个收集的作用 http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三 ...

  9. Web项目的三层架构和MVC架构异同

    http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑 ...

随机推荐

  1. asp.net core 使用 Redis 和 Protobuf

    asp.net core 使用 Redis 和 Protobuf 前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介 ...

  2. VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools(超详细),以及动态调整虚拟机硬盘大小

    先上一张效果图兴奋一下,博主穷屌丝一个,只能通过虚拟黑苹果体验下高富帅的生活,感觉超爽的,废话不多说的,直接上图了! 目录: 1.安装所需软件下载: 2.Mac OS X10.10 安装基本步骤: 3 ...

  3. Android学习笔记:进度条ProgressBar的使用以及与AsyncTask的配合使用

    ProgressBar时android用于显示进度的组件.当执行一个比较耗时的操作(如io操作.网络操作等),为了避免界面没有变化让用户体验降低,提供一个进度条可以让用户知道程序还在运行. 一.Pro ...

  4. 一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能

    在上一课中,我们实现了简单的根据 URI 执行某个类的某个方法.但是这种映射没有扩展性,对于一个成熟易用的框架肯定是行不通的.那么,我们可以让 框架的用户 通过自定义这种转换来控制,用 CI 的术语就 ...

  5. UML看书笔记1:主体思想

    对象设计需要解决的三大问题:      1.把“现实世界”映射到“对象世界”      2.从“对象世界”描述“现实世界”      3.验证“对象世界”是否反映了“现实世界” 现实世界与我们的对象世 ...

  6. excel通过转成xml格式模板,下载成excel文件

    源代码: report ztest_down_excel. data: begin of i_file occurs , val() type c, end of i_file. data begin ...

  7. 每周日与周四《红酒屋》探戈舞会"Wine Bar" Milonga_原生态拉丁_新浪博客

    每周日与周四<红酒屋>探戈舞会"Wine Bar" Milonga_原生态拉丁_新浪博客     每周日与周四<红酒屋>探戈舞会"Wine Bar ...

  8. Android Gradle Plugin指南(六)——高级构建定制

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Advanced-Build-Customization ...

  9. 高性能MySql进化论(四):Summary,Cache,Counter表的使用

    在实际的应用中,往往会定期的对一个周期内的系统数据进行统计分析.例如某购物网站定期的统计商品在一个月/年期内的销售情况,如果采用扫描所有相关表的方式在某个时间点进行统计分析, 由于数据量很大,以及表结 ...

  10. C# - 数据库存取图片

    1.创建数据表 CREATE TABLE Tb_pic ( ID int primary key identity(1, 1) not null, PictureBox varchar(max) ) ...