【自然框架】——页面基类与设计模式(一)桥接模式(11.14补充了一段对桥接模式的理解)

 

【自然框架】 页面里的父类—— (补充)

【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。

 

===================

 

  以前发过两篇关于页面基类的文章,由于当时对于聚合、组合、桥接模式等不清楚,所以说的也是比较乱,这些日子又学习了一下程杰的《大话设计模式》,又有不少收获。现在我们再来重新分析一下。

 

先说需求:
1、 对于MIS来说,大多数页面都需要验证一下访问者是否已经登录,是否有权限访问页面,是否有权限操作指定的记录。

2、 对于自然框架来说,大多数页面都需要FunctionID、DataID等,这些值主要是通过URL传递过来的,也有通过其他方式设置的。那么就要求如果是URL传递过来的,那么就要验证是否正确,以免注入攻击。同时还可以兼容其他的设置方式。

3、 列表页面、表单页面等对于参数的验证方式不尽相同。列表页面、表单页面都有各自的处理过程。

4、 大多数页面都需要和数据库打交道。需要一个统一的操作数据库的方式,要支持事务。

5、 还有一些各个页面都要处理的事情,也应该“提炼”出来。

 

 

需求分析:

  URL的处理是和页面关系最近的,而且不同的页面类型还需要不同的处理方式,那么这个就交给页面基类,通过多态的特性来处理不同的情况。

  验证是否登录、是否有权限,这个和当前登录人关系密切,那么就写一个类来单独处理,这个类就是“登录人信息管理”,交给他来负责。

  和数据库打交道那就交给“数据访问函数库”好了,可以把这个实例传递给处理业务逻辑的函数,也可以传递给表单控件,这样事务就可以全部联系起来了。

 

  用Visio画了一个UML图,恩,很晕。好像应该没有画错。

 

     

 

 

  这回比较清晰了吧。页面基类负责FunctionID等参数的获取和验证,验证函数定义为virtual的,以方便子类根据情况来修改。页面基类有派生出了三个子类,分别是列表页面、表单页面、删除页面。在基类里定义的FunctionID,并且通过了验证,那么在子类里面就可以放心使用了。同时子类还可以通过override来直接设置FunctionID。

 

  页面基类里定义了两个实例,一个是数据访问函数库的实例,一个是当前登录人信息的实例。前者负责和数据库打交道,后者负责验证是否登录,是否有权限访问。职责分离出去,各做各的互不干扰,页面里调用就可以了,不需要关心具体的实现。

 

  这个可以叫做桥接模式吧?

  还有一个没弄明白的就是,页面基类和数据访问的关系,是聚合还是组合,不过想想还是算了,头痛。

 

 

  还是写一下下载地址:http://www.cnblogs.com/jyk/archive/2009/10/28/1591680.html 

Demo的下载地址:http://www.cnblogs.com/jyk/archive/2009/11/02/1594866.html

 

  

=======================补充===================

 

什么是交接模式?引用《大话设计模式》里的定义:

桥接模式(Bridge):将抽象部分和他的实现部分分离,使他们都可以独立的变化。(P229)

 

  不知道大家有没有看懂这个定义,至少我是没弄懂,呵呵。再引用一段《大话设计模式》的一段解释:(P232)

 

  小菜:“我觉得交接模式所说的‘将抽象部分和他的实现部分分离’,还是不好理解,我的理解就是实现系统有多个角度分类,每一种分类都有可能有变化,那么就把这种多角度分离出来让他们独立变化,减少他们之间的耦合。”

 

  这个就是作者(程杰)的理解吧,这个解释够白话的了,不过我还想说一下我的更加白话的理解,呵呵。大家看看对不对。

 

  我的理解就是:有两套或者多套独立的“多态系统”,他们可以各自独立的变化(继承),互不干扰。然后选择一套系统作为容器,在这个容器里定义其他系统的实例或者借口,通过这种关系(组合/聚合)把两套或者多套系统结合起来,配合工作。组合/聚合就好像一座桥梁一样把这些系统结合在一起,所以就叫做桥接模式了。

 

  就好比我的这个例子里面,页面基类就是一套“多态系统”,他可以派生出列表页面基类、表单页面基类等,把页面基类作为容器,在其内部定义数据访问函数库的实例,定义当前登录人信息的实例。而数据访问函数库还可以自行派生出SqlClient的访问类、OleDb的访问类,他们是独立的“多态系统”互不干扰。页面基类如何变化不需要考虑数据访问的问题,数据访问函数库如何变化也不用考虑有多少种页面。这就是所谓的减少耦合吧。

 

 

 

 

时间: 2024-07-29 08:41:45

【自然框架】——页面基类与设计模式(一)桥接模式(11.14补充了一段对桥接模式的理解)的相关文章

【自然框架】——页面基类与设计模式(二) 模板模式

  前篇:[自然框架]--页面基类与设计模式(一)桥接模式   桥接模式的补充:(下面的一段是桥接模式里后补充的一段,桥接模式的一个小结)   什么是交接模式?引用<大话设计模式>里的定义: 桥接模式(Bridge):将抽象部分和他的实现部分分离,使他们都可以独立的变化.(P229)   不知道大家有没有看懂这个定义,至少我是没弄懂,呵呵.再引用一段<大话设计模式>的一段解释:(P232)   小菜:"我觉得交接模式所说的'将抽象部分和他的实现部分分离',还是不好理解,我

秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4:  秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5:  秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍

asp.net实现非常实用的自定义页面基类(附源码)_实用技巧

本文实例讲述了asp.net实现非常实用的自定义页面基类.分享给大家供大家参考,具体如下: 看到前面几篇文章(如:<asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法>)想到的.下面总结发布一个笔者在开发中常用的一个自定义BasePage类,废话不多说了,直接贴代码. 一.BasePage类 1.代码 using System; using System.Data; using System.Configuration; using System.Web; using

【自然框架】重新整理后的自然框架源码!

  整理后的自然框架源码,有九个项目,可以看下面的脑图,带"对号"的表示是一个独立的项目.后面的是主要内容.   欢迎下载http://www.naturefw.com/Down/kind38/List1.aspx ,但是请保留源码里的版权信息,以及dll里的版权信息. 自然框架源码采用 LGPL 2.1版本(GNU Lesser General Public License) 开源协议,http://www.naturefw.com/nature/license.aspx 可以先看看

自然框架,拆分后的项目关系

  拆分了一下自然框架,似乎又绕回去了.以前是多个项目分开放的,有人说太分散了,还得一个个下载,麻烦.于是就做了一个解决方案,把项目都放在了一起.   现在呢,QuickPager分页控件比较完善了,有人只想看分页控件的代码,其他的不想看,东西太多了乱.想一想也是,那么就拆分一下吧.原来自定义控件都是放在一个项目里的,编译后生成一个dll,版本号也只有一个.这样版本号就很难管理了,有任何一个控件升级,整个版本号都要升级,因为就是一个版本号.这样版本号就不大够用了.所以以前的源码下载,我只写上传日

【自然框架 NatureFramework】 项目结构、命名空间和命名规范

  请注意,这里说的是自然框架内部代码的项目结构,并不是说给客户做开发的时候,也需要这些项目.在给客户开发的时候,只需要引用编译后的dll 即可. 一.项目结构   自然框架的基本的思路还是共用函数,数据访问函数库.元数据管理.基础控件扩展.元数据控件(依据元数据动态创建的控件),用户登录.在线.权限管理,分页控件,页面基类构成. 这个并没有按照三层(分层)的要求去做,只是感觉这么分可以更清晰一些.把功能相当比较独立的部分做成一个项目.有一点MVC(不是asp.net MVC)的味道.我不想依据

【自然框架.重新开始】总体设计

  好久都没写博客了,出去体验了一下人生,呵呵. 最近加入了一个团队,打算把自然框架重新设计一下,以适应更广阔的需求. 首先是UI.UI一直是弱项,这个不解释了,那么怎么办呢?当然是拿来主义,easyUI.extJs等都很成熟了,拿来用就好.他们都是依据json,所以自然框架打算引入json以便于适应.   另一个就是权限的易于操作方面.以前对于部门方面的权限需求比较模糊,因为做过的项目没有太过涉及部门权限.这一次团队所在的公司,对于权限要求非常的,恩,你知道的,呵呵.所以如果能够完全应对的话,

【自然框架】内部类库、控件的引用关系(最新整理,基本稳定)

  和以前相比,减少了一个项目,把Control_Interface合并到CommonFunction里面.这样引用关系就简单多了.   基本上分为三个层次:类库.自定义控件.页面基类.其中的 MetaData 负责元数据的定义和加载.  

【自然框架】——思路、结构、特点的介绍(初稿,欢迎大家多提意见)

  开场白 面向过程:面向过程是"写代码",根据客户提出来的需求来写代码,包括函数.一步一步的写,都写完了,功能也就实现了. 面向对象:面向对象是"做设计",先不考虑细节,而是先做总体设计.都设计好了,再去实现细节. 举例来说,面向对象是设计一部汽车,而面向过程是设计一个流水线生产汽车.设计一部汽车是要考虑客户的需求,考虑众多因素,然后画图纸.并不考虑到底如何把汽车生产出来(至少不是重点).流水线的目的呢,就是要把汽车生产出来,至于汽车是如何设计的并不关心. 以前&