自己最初设计的框架--struts,spring

来源:互联网 发布:js用图片显示当前时间 编辑:程序博客网 时间:2024/05/16 00:58
1           框架方案: 

1.1.        综述:考虑到性能,安全性,灵活性以及编程的方便等原因,系统采用目前网络编程流行的模式MVC。架设架构的主体技术采用SpringStruts 作为核心,同时织入iBATISLog4jJNDIJMSAcegi 等组件,完善框架。

1.1.1.       SpringStruts是成熟的框架,其轻量级的设计,以及其简化J2EE系统开发的目标正好符合我们的设计需求。它们两个核心特征分别是反向控制(IoC)和面向切面编程(AOP)IoC实现了系统对象间的松耦合关联,使得代码更加清晰,更加容易管理,更容易测试,为以后的维护提供方便。AOP使得很容易的织入其他组件,并且使得各个组件的合作简便,也同样简化编程,方便维护。

1.2.        反向控制:

1.2.1.       IoC:全名Inversion of Control

1.2.2.       问题的引入:在程序设计时,总会有这样的情况:由于应用程序需要某个功能需求时,直接执行了下一层的方法。情况如下图:

1.2.2.1.       这导致了高层应用程序依赖于低层模块的API,假设今天将应用程序移植至另一个平台上,而该平台使用USB磁盘存储,则这个应用程序无法直接重用,必须加以修改才行,在这个例子中,由于低层模块的存储介质变更,造成了高层模块也必须跟着变更,这不是一个好的设计方式,在设计上希望模块都依赖于模块的抽象,这样才可以重用于高层的应用程序设计。

1.2.3.       IoC这个概念的引入,解决了这样的困境。IoCControl是控制的意思,其实其背后的意义也是一种依赖关系的反转。依赖关系的反转即是控制关系的反转,将控制权由实现的一方移至抽象的一方,让抽象方拥有控制权,可以获得组件的可重用性。IoC要求的是容器不应该(或尽量不要)侵入应用程序,也就是不应该出现于容器相依的API,应用程序本身可以依赖于抽象的接口,容器可以透过这些抽象接口将所需的资源注入至应用程序中,应用程序不向容器主动要求资源,故而不会依赖于容器的特定API。这样的设计,可以随时将应用程序从容器中脱离,转移至其他容器或框架而不用做任何的修改。

1.2.4.       IoC模式基本上是一个高层的模式概念,Martin Fowler谈到,实现IoC有两种方式:Dependency InjectionService LocatorSpring所采用的是Dependency Injection来实现IoC,中文翻译为依赖注入。

1.2.4.1.       未实现反向控制的示例如下:

spring1

数据的获得是通过主动取得的,使其耦合紧密,侵入性强,不易于维护,管理等。

1.2.4.2.       采用了反向控制,数据取得方式如下:

sping2

此时,控制反向了。巧妙的利用面向对象的设值注入,使得注入信息方式灵活。在StrutsSpring做核心的架构里,可以配合xml配置文件,协调java语言的设置注入。而实际上,Spring最重要的核心概念就是IoCInversion of Control),反向控制。

 

1.3.        面向切面编程:

1.3.1.       AOP:全名Aspectoriented programming

1.3.2.       问题的引入:在应用程序的各个业务模块中,通常会调用到与业务无关的系统服务,而这些系统服务逻辑并不是业务逻辑的主要组成部分。对系统服务的调用经常分散在各个业务逻辑里,业务逻辑与系统逻辑的交互使得关系复杂化。一方面编写代码时,有一些非对象本身的职责的相关动作也混如了对象之中(例如权限检测,日志记录等等),会使得对象的负担进一步加重,甚至混淆了对象本身该负有的职责,对象本身的职责所占的程序代码,或许还小于这些与对象职责无关的动作或服务的程序代码;另一方面,若有朝一日不需要某些服务,那么我们就需要修改所有留下记录的程序代码,编程代码量剧增,应用程序也变得难以维护。

1.3.2.1.        未引入AOP概念的情况下,业务服务与系统服务的交互如下图。

spring3

1.3.2.2.       引入AOP概念的情况下,业务服务与系统服务关系如下图。

spring4spring4

系统服务覆盖了它影响到的组件。框架的设计在于,将散落于各个业务对象之中的系统服务处理动作(Cross-cutting concerns)收集起来,设计各个独立可重用的未实例化的对象(Aspect),然后,把这些类的具体实现(Advice)根据某个定义(Pointcut)的指定时机(Joinpoint)应用到目标对象(Target)上。该过程就是织入的过程(Weave)。这样的编程模式,编写业务服务的代码,不会感觉到系统服务的存在,不必受到系统服务实现的干扰,而实际上系统服务已经被织入业务服务中。如图,AOP的名词用图片来表示如下:

2           命名规则:

2.1          源包路径及类命名规则:

2.1.1     根目录:    com.scnu.xsboa..

2.1.2     模块: 前台模块:mod,后台模块:modb

2.1.3     formbeansformbeans.mod.xxxFormbean

2.1.4     actionsactions.mod.xxxAction

2.1.5     servicesservices.mod.xxxService

2.1.6     daosdaos.mod..

2.1.6.1    ..xxxDao

2.1.6.2    ..xxxDaoImpl

2.1.7     sqlbeanssqlbeans.mod...

2.1.7.1    ..xxxSqlbean

2.1.7.2    ..xxxSqlEx

2.2          页面目录命名规则:

2.2.1     根目录:/

2.2.2     模块:

2.2.2.1    前台模块:

2.2.2.1.1   /mod/..

2.2.2.1.2   /mod/forward/..

2.2.2.2    后台模块:

2.2.2.2.1   /modb/..

2.2.2.2.2   /modb/forwards/..

2.2.3     模板头尾:/public/HeaderAndFooter/..

2.2.4     导航菜单:/public/menu/..

2.2.5     各模块导航栏:/public/mod/..

2.2.6     图片:

2.2.6.1    /images/public/..

2.2.6.2    /images/mod/..

2.2.7     javascript/js/..

2.2.8     css/css/..

2.3          页面文件相关命名规则:

2.3.1     jsp页面:mod + 动词 + 宾语

2.3.2     actionpath:相关action的名字,形如:com.scnu.oa.action.mod.xxxAction.shtml


  参考资料:《Spring技术手册》
原创粉丝点击