基于Struts1.02的MVC系统架构
杨恒贤(yanghx@70345.com)
1. 系统构架的重要性
一个项目的开始之初的系统构架决定了一个项目的成败。“好的系统构架就等于成功的一半。”好的系统设计既利于维护,有利于开发过程中的事务处理。要做好系统构架不是一朝一夕的事情,要经过项目的考验。必须做到以下几方面。
l 熟练掌握设计模式,并能灵活运用。
l 架构设计是骨架,设计模式就是肉。
l 设计模式是支撑架构的重要组件。
l 时刻牢记架构设计的目标。
2. 系统构架的评定
系统构架的评定我概括为以下3个原则:
l 主要模块的最大重用度
一般说来跟系统相关的主要模块利用的场合比较多,一般采用单根模式设计,在设计模式里面叫做Facade模式。一般来说比较多的利用接口,也可以利用abstract类。
但是在本构架中我直接继承了Action类,后面实用的类多继承我的这个类,这样可以为本系统中提供统一的Error与Log处理。
l 跟系统稳定性相关的模块能进行透明的封装。
本系统最主要的就是与database打交道,在JDBC中或者数据库连接池中数据连接是比较占用系统资源的,所以这一块由我们系统统一管理。JDBC中提供的ResultSet不Close()的话也会使系统不稳定的。所以本框架中这2块多由我底层处理了。在以后设计过程中不再需要为这2块担心,这样系统就能很好的与数据库交互。
在本框架中为了支持这2块,利用了设计模式中的Factory Method与Builder。
设计了2个接口3个了实现类,为了保证效率设计了一个数据库连接池,本来还要为这个系统中的一个Business设计一个cache来进一步提升系统性能,可是这一模块没有进行回归测试,所以没有集成进来。
l 跟系统相关的类库或函数足够简单
一切简单就好。一个系统就是为了简单才进行系统构架的,如果你构架的系统必原来系统还要麻烦,那么这种东西就可以扔掉。
现在这个系统中提供的JBaseAction,JBaseBusiness,JBaseDataBean3者耦合性很高,但是这是放在基类里面的,不需要你了解。这样表现出来的就没有什么复杂的东东。
这里有一个不好的设计,就是开始设计JBaseBusiness时没有考虑到灵活程度,设计欠佳,如果现在改正的话,可以大幅度提高开发效率。
3. 每一环节必须进行严格测试
在我这个小框架里面每一单元必须通过回归测试,我利用的是JUnit。一个系统中没有经过测试就集成的代码就是一种破坏系统稳定性的表现。我们宁愿不要这个单元。集成后也一定必须经过测试。
下面我们讲一下这个基于Struts1.02的框架,想要完全理解这个小型框架,你必须对
Bridge模式有所理解。
能适应不同种类数据库操作数据库封装。
特点:1、适应不同种类数据库操作
2、完全支持基于JNDI的数据库连接池
设计思想如下:
完全按照Windows系统中COM的设计模式。
UML图如下:
下面讲一下这个封装的扩展性,我们以MYSQL4为例,扩展如下:
public class MYSQLDatabase extends CommonDB {
private static String ODBC_DRIVER = "XXXXXXX";
public MYSQLDatabase() throws Exception {
}
void init() throws Exception {
Class.forName(ODBC_DRIVER);
m_Conn = DriverManager.getConnection("jdbc:mysql://localhost/DB","User","Pass");
}
}
这样这个数据库封装就可以直接利用到以MYSQL作为DB的开发上了。
这里有一个缺点,没有使用Log4j记录运行信息。
下面介绍一下这个系统中怎么封装使Connect的Close()与ResultSet的Close()
完全透明化的。
《未完待续》