企业应用开发架构谈(一)
即便是在有了企业级软件平台的今天,我也常常发觉开发企业级应
用程序是个难题。无论是.net还是J2EE仅仅使用他们所提供的高级
抽象API来开发企业级应用是远远不够的。在我看来一个构建在这些
高级API上的良好的体系结构是开发成功的企业级应用所不可或缺的。
本文要谈论的就是如何构建一个良好的、可维护的、可扩展、高稳
定性的且能够快速开发应用的开发架构。
在我接触.NET 或J2EE 开发过程中,走了大量的弯路,使得开发的程
序不是性能不好,就是无法满足目标和要求,相信同样的错误今天仍
然在不断的重复出现,这就要求我们吸取教训,减少创造无用的程序。
尽管有了高级的抽象API,但构架系统不光是使用API那么简单,从更高层
的抽象来说,通过使用构件策略和模式来创建构架体系,是解决开发中遇
到的一系列问题的关键。
如:
会话如何跟踪?
谁来负责数据检验?
层键的数据如何传送?
视图、模型、控制?
如何分发视图?
等等。。。。。。。。。。。。
在这篇文章中我不采用实例的方式来讲解。因为我发现,尽管通过实
例有很多的优点,但往往读者无法坚持完成整个例子,同时限于本文
的篇幅,采用实例法也是不可取得。
我将在文章中讨论在开发企业架构中我所遇到的一系列问题:
视图--模型--实体
资源定位
资源的可配置
持久化
出版---订阅
数据校验
主键生成
数据更新
数据传送
动态赋值
控制-分发
对象界面
代理
在谈到我将要讨论的问题前,我希望你先要了解什么是模式,我不打算在
有限的篇幅中讨论模式,这是一个很广的问题。但必须首先声明的得是,
你阅读本文对模式的了解是基本要求,企业开发中模式将被大量使用,我
相信一个优雅,成功的系统模式的使用是不可少的。
关于模式的更多信息你可以参考 GOF 96 、SUN J2EE DESIGN PATTERNS
CORE、J2EE DESIGN PATTERNS 等文章。
第一部分 资源定位
一个有序的世界总是好的。
小时候玩玻璃球和三角,开始的时候总是将嬴来玻璃球放到一个盒子中,渐渐
的越来越多,于是我将他们分类,有瑕疵的放到一起,普通的放到一起,高级
的(可以一个换两到三个)放到一起,同样的三角也是如此存放,这样一来我
能够很容易的决定每次带什么样的出去玩。
开发架构的时候我碰到同样的问题,譬如大量的值对象、命令bean、视图helper
散落在各处,有序的管理他们势必成为优先要解决的问题。试想如果有一种目录
结构来管理这些类该有多好。
我是一个工厂的狂热爱好者,我总是通过工厂来管理这些无序的资源,以便于通
过目录的方式定位资源,不可避免的造成了系统中出现越来越多的工厂,我把管
理这些工厂称为工厂定位器模式。
为了清晰的描述我的想法,我喜欢通过代码来说明,这用的问题简单明了。
代码如下:
/*工厂定位器*/
public interface FactoryFinder{
public final static int ACTION_MAPPING_FACTORY=1;
public final static int MESSAGE_RESOURCES_FACTORY=2;
public final static int VALUE_OBJECT_FACTORY=3;
public final static int FORWARD_MAPPING_FACTORY=4;
public final static int LIFE_CYCLE_FACTORY=5;
public static Factory getFactory(int finderName);
}
/*工厂标志接口*/
public interface Factory {
}
/*生命周期管理器*/
public interface LifecycleFactory{
public final static int DEFAULT_LIFE_CYCLE=1;
public Lifecycle getLifecycle(String Key);
}
/*消息注册工厂*/
public interface MessageResourcesFactory extends Factory{
public addMsgResource(String Key ,String resourceName);
}
/*
/*监听器注册工厂*/
public interface ActionMappingFactory extends Factory{
public addActionMapping(String Key,String resourceName);
}
/*值对象注册工厂*/
public interface BeanMappingFactory extends Factory{
public addBeanMapping(String Key,String resourceName);
}
/*分发视图注册工厂*/
public interface FowardMappingFactory extends Factory{
public addForwardMapping(String Key,String resourceName);
}
/*监听器工厂*/
public interface ListenerFactory extends Factory{
public final static int ACTION_LISTENER=1;
public final static int VALUE_CHANGED_LISTENER=2;
public final static int HERPLINK_LISTENER=3;
public Listener createListener(String listenerName,int type);
}
/*bean 工厂*/
public interface BeanFactory extends Factory{
public Object createBean(String beanName);
}
/*Lifecycle 工厂*/
public interface Lifecycle extends Factory{
public void register();
}
如你所看到那样工厂定位器模式其实就是一个工厂模式,但我重新将它命名
为工厂定位器模式,这是因为,它不简简单单作为一个设计模式而存在,在
这里它被赋予新的含义“有效管理架构中资源的一种策略“。通过它的有效组
织资源,你可以方便的定位架构中任何可用资源。
同样的定位方式,我们可以用来组织服务定位,譬如:查找ejb,数据连接等。
服务定位器模式就是定位的另一个应用:
代码如下:
/*
实现主键获取、数据连接获取、home接口获取
*/
public interface ServiceLocator{
public static ServiceLocator getInstance();
public EJBHome getEJBHome(String serverID,String homeName);
public Connection getConnection();
public BigDecimal getNextID(String systemCode);
}
通过服务定位 ,可以有效的减少服务成本,提高系统的性能。
正如上面所说的,在一个体系中定位资源是重要,这是组织整个架构的基础,
无论什么样的事件都是由个体组成,而有序的安排个体总是有序世界的第一
步。
在这一部分里,简要的谈了资源定位问题,下一部分将讨论资源的可配置问题。
本文地址:http://com.8s8s.com/it/it17861.htm