web前端

位置:IT落伍者 >> web前端 >> 浏览文章

使用XML文件作为Web持久层的OO分析过程


发布日期:2018年01月25日
 
使用XML文件作为Web持久层的OO分析过程

在一个Web系统中有这样的需求一个页面需要对一个XML文件进行CRUD等操作如何设计一个系统适合这样的需求呢?

最容易直接想到的是一个类完成节点的CRUD及IO操作但这违反了类的设计原则类应当只有一个中心任务

所以按功能来分我们必须要两个类:

一个类负责节点CRUD操作;// 简称CrudClass

一个类负责节点的IO操作;// 简称IoClass

这样基本可以了再细分下去没有必要

再来看第一个类它是直接与一批业务代码打交道的首先要求速度要快如果把解析出来的Dom放在类里一则CrudClass做了IoClass做的事二再速度上也上不去所以这里我把dom里面的节点对应成了一个链表一个值和一个Map业务代码实际处理的就是这三个东西他们不关心也不必要知道是否存储到了文件里而且速度上得到了充分保证

其次各个业务代码处理的是同一事务这里再把CrudClass做成单例(Singleton)形式的做成全静态也可以但这种做法不太上台面

IoClass是CrudClass的持久化操作他们之间实际是仓库管理员和物流调度间的关系这种关系有以下三种实现方式:

在他们间实现观察者模式由IoClass来观察CrudClass变化后写入文件初看这种方式很好的完成了解偶实际上IoClass还是需要知道CrudClass的细节否则无法更新而且创建IoClass的过程比较麻烦客观世界可没有这样的处理所以说观察者处理当抛弃

将IoClass作为CrudClass的成员这种方式避免了IoClass创建的不必要的复杂过程而且CrudClass知道IoClass的处理接口就行了IoClass无需知道CrudClass的任何部分实现了有效解偶其三符合现实世界IoClass确实应该是CrudClass的下级只接受CrudClass指派的任务而外界无须知道IoClass完全不必知道

将IoClass独立处理出来与CrudClass等做成JMS异步通信方式或WebService通信方式这个想法更OO但是成本比较高复杂度大在大型系统可以考虑实现这种方案

综合上面的意见选择方案是最适合的

至此对一个XML文件进行CRUD操作的系统设计完成再适当剥离一些通用代码形成实用类就差不多了这里不再赘述

还是那句老话道法自然程序实现可以有N种实现方式我们应该选择最符合自然的一种

上一篇:修改webligic线程池

下一篇:Spring中的Object/XML映射详解