第一种模式,可处理组合命令,具有撤销(Undo)和重做(Redo)功能,支持多种数据库类型

 
 
1.Action采用组合模式,既可以代表一个简单的动作,也可以代表一组动作组合。
List<Action> Cmd代表要执行的任务,可拆解成一个或一组动作(Action)。
以数据库操作为例:
1.1 执行一个简单的插入命令,只需要创建一个插入Action即可;
1.2 若要实现一个复杂的事务(一组增删改操作),则可将这些增删改的Action创建成一个复合Action;
1.3 若要实现简单的搜索,只需创建一个查询Action即可;
1.4 若要实现级联查询,则需要创建一个复合查询Action,即父查询Action添加与之级联的子搜索Action,组合成一个复合查询Action。
PS:若业务逻辑很简单,Control可直接调用Dao;

2.List<Action> Undo和Redo,用于实现Undo(撤销)和Redo(重做);具体实现需要Action配合。

3.Action执行任务采用命令模式,真正的执行在IDao对象执行(命令与实现分离,易于扩展),IDao对象采用抽象工厂模式创建。

4.ConcreteDao实现IDao接口,侧重增删改查的逻辑实现,具体实现由DBHelper执行。

 
优点:
1.Action可以表示的动作很多,可扩展性强;
2.使用抽象工厂模式,容易转换数据库操作;
3.Control类可以实现Redo和Undo操作,并且支持事务(一组Action 或 复合Action)
 
缺点:
1.有多个接口,实现相对复杂;
 
B.侧重数据库操作的版本(未显示view)
1.定义IBaseDao接口,可将单一dao对象组合成复杂dao(多个dao共享数据库连接);
2.灵活的搜索条件(SearchCond),可设置单一和组合的搜索条件,应用于级联搜索;
3.支持不同的数据库操作实现。
 
1.IBaseDao定义了基本的Dao操作接口,并且可实现组合方式,父Dao添加子Dao后,只需父Dao打开和关闭数据库连接即可,实现共享父Dao的数据库连接等资源。

2.SearchCond定义了搜索条件,可灵活地增加和删除搜索条件,并支持组合方式。
使用SearchCond即可满足搜索单表查询要求;
当级联搜索时,子表的搜索条件可添加到父表的搜索条件中,作为一个符合的搜索条件ConcreteCond。

3.ADOBaseDao和OCIBaseDao实现IBaseDao的接口,为其子类提供基础服务。(类和接口继承)

4.使用IDao,可以面向接口编程,可以灵活地切换Dao的具体实现方式。

 

基于MVC设计模式的两种软件架构简介的更多相关文章

  1. 基于MVC设计模式的Web应用框架:struts2的简单搭建(一)

    Struts2的初步介绍 Struts2是apache项目下的一个web 框架,普遍应用于阿里巴巴.京东等互联网.政府.企业门户网站.虽然之前存在了很大的安全漏洞,在2013年让苹果.中国移动.中国联 ...

  2. iOS 基于MVC设计模式的基类设计

    iOS 基于MVC设计模式的基类设计 https://www.jianshu.com/p/3b580ffdae00

  3. Struts2是一个基于MVC设计模式的Web应用框架

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. Struts ...

  4. C#将Word转换成PDF方法总结(基于Office和WPS两种方案)

    有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...

  5. JavaWeb:基于MVC设计模式的一个小案例(一)

    (未经允许,请勿转载,谢谢.) 本案例的处理过程: 客户端发送一个请求给服务器,服务器把这个请求给Servlet,Servlet 获取请求信息,根据请求信息的情况去调用 model (在这里是一个普通 ...

  6. 基于python的selenium两种文件上传操作

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法. 方法二.非input标签上传 这种上传方 ...

  7. iOS开发--Swift 基于MVC设计模式的简单的tableViewDemo

    如果说MVC是最好的设计模式, 可能很多人并不赞同, 但是如果说MVC是最主流, 应用面最广的设计模式, 我想这是毫无争议的. 不说废话, 直接演示在Swift中如何使用MVC新建工程(我并没有新建文 ...

  8. Spring基于注解注入的两种方式

    1.@Autowried 1)默认基于类型查找容器的的Bean进行注入(注入的Bean的实现类是唯一的). 2)当实现类的Bean大于一个的时候,需结合@Qualifier,根据Bean的名称来指定需 ...

  9. MVC CRUD 的两种方法

    //Index.cshtml @model IQueryable<MvcExam2.Models.Product>@{    Layout = null;}<!DOCTYPE htm ...

随机推荐

  1. scala环境搭建

    第一步:Java 设置 确保你本地以及安装了 JDK 1.5 以上版本,并且设置了 JAVA_HOME 环境变量及 JDK 的bin目录. 在 Mac 上安装 Java 下载 jre-8u65-mac ...

  2. substr

    substr(string,start,length) string - 指定的要截取的字符串 start - 必需,规定在字符串的何处开始 正数 - 在字符串的指定位置开始 负数 - 在从字符串结尾 ...

  3. 织梦CMS站点favicon.ico图标的放置

    1.在线制作一个ico图标,推荐制作网站:http://ico.55.la/.制作好后,将favicon.ico图标放在站点模板默认目录下的images文件夹里. 2.在index.htm的<h ...

  4. dede数据库类使用方法$dsql【转】

    http://www.cnblogs.com/xcxc/p/3601909.html dedecms的数据库操作类,非常实用,在二次开发中尤其重要,这个数据库操作类说明算是奉献给大家的小礼物了. 引入 ...

  5. printf("%*s\n", 1, ""); 使用"printf();" 的格式化输出动态制定等宽度输出。

    #include <stdio.h> #include <string.h> int main() { const char the_text[] = "this i ...

  6. java程序内存使用

    一.内存使用示意图 二.java运行时数据区域 1.程序计数器: 当前线程所执行字节码的行号提示器. 2.java虚拟机栈: 线程私有,与线程生命周期相同,保存基本数据类型,如果线程所请求的栈深度大于 ...

  7. [ActionScript 3.0] AS3 用于拖动对象时一次一页的缓动

    package com.fylibs.components.effects{ import com.tweener.transitions.Tweener; import flash.display. ...

  8. java异常分类(运行时异常,可检查异常)

    NullPointerException:是运行时异常(RuntimeException),也叫非检查异常 所以我们抛出该类异常实例时,方法声明处无需添加throws来列举该类异常的抛出,编译器在编译 ...

  9. mysql 非安装版的一个自动安装脚本及工具(更新版)

    http://blog.csdn.net/iihero/article/details/5596401

  10. ElasticSearch 常用的查询过滤语句

    query 和  filter 的区别请看: http://www.cnblogs.com/ghj1976/p/5292740.html Filter DSL term 过滤 term主要用于精确匹配 ...