`
wolfsquare
  • 浏览: 84030 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

结合WebWork实现高复用度系统的探索(上)

阅读更多

需求: 某机构体系下,机构类型分为子公司,部门,人员等,以后可能在某机构或者其子孙机构下可能会再分出其他子机构类型,希望在增加新类型过程中,尽可能的避免修改已有代码。

情况:子公司,部分,人员等已完成所有编码(界面,商业逻辑,数据逻辑)
变化:需要把这个机构体系组成为一颗树状结构
策略:鉴于除了树结构外的其他部分代码已经完成,那么应该首先保持这些代码不予改动。复用修改的优先级从高到低的顺序如下:
  界面×JSP,Action层
  商业逻辑 Service层
  数据逻辑层
  数据物理层
有经验的人知道,大部分情况下,越是下层的改动,越是影响越广泛(注意不是修改难度),所以我们只有在无计可施的情况下,才进行低层的修改。

分析: 回到我们的需求,从功能上看,维护一个组织机构的需求,已经涵盖了每一个子结构的维护需求,以部门的建立为例,在新建一个部门时,同时也必须建立机构树上的节点,
 这样,如果需要直接使用原有的创建部门的所有代码,需要在其上加上创建组织机构所需要的父节点,以及当前节点名称信息(在这里department的增加界 面JSP是需要修改的,不过实际上我没有修改该文件,而是利用DHTML来动态加入需要新增加的信息),然后提交给原创建部门的URI (departmentSave.action)和组织机构创建URI(orgCreate.action),在这里我们利用ww提供的action chain功能来完成这两个操作。
 这里需要修改department.action的配置,拦截save方法使其执行完后跳过原来的relist结果页面转向组织结构的创建orgCreate.action:
 <action name="unitSave" class="com.wolfsquare.ibase.org.action.UnitAction" method="save">
   <result name="input">/org/unit/input.jsp</result>
   <result name="relist" type="chain">
       <param name="actionName">orgCreate</param>
                <param name="namespace">/org</param>  
            </result>
   <result name="xxx" type="redirect">/org/unit.action?start=${start}</result>
   <interceptor-ref name="validationStack"/>
  </action>
可能有同学看到这里会问:创建组织节点时应该还需要关联前面创建的部门对象啊,这个操作是如何实现的?信息是如何传递的?
在这里,由于整个架构体系并没有支持这种信息传递的功能,所以只好以一种比较”脏“的方式实现:
        在department.action类里增加了一个方法getModel()返回刚刚创建的部门对象,然后在org.action类中增加一个接收的方法setModel(object o)这样在整action chain执行的时候,ww会自动将getModel后的数据填入setModel中,这样做的后果是以后增加新的机构类型的功能时,action必须也照这样的语意设置getModel方法。(如果要解决这个问题,这能需要使用一个特定的Context,然后拦截指定Service的创建方法,把创建结果放入Context,不过这又带来如何清除Context的问题,于是又要求助与ww的interspector,专门写一个拦截器来擦屁股,够麻烦。。。)

        就这样,我们完成了新增,修改组织机构的功能合成,虽然有点拖沓,但是还是达到了复用,少修改原有代码,而且扩展性也很好的目标。这上篇说的是两个简单业务的功能揉合问题,下篇我们来看看稍微复杂点的情况,看看还能不能继续依葫芦画瓢来完成功能合的成
  
(未完待续)  

分享到:
评论

相关推荐

    如何实现webwork+spring+hibernate框架结合

    ### 如何实现WebWork+Spring+Hibernate框架结合 随着企业级应用需求的不断增加和技术的不断发展,集成多种技术栈成为一种趋势。WebWork+Spring+Hibernate是早期比较流行的一种技术组合,它们各自解决的问题域不同,...

    webwork

    7. **标签库**:WebWork与JSTL等标签库兼容,同时还有自己的标签库,例如`displaytag-1.0`,这是一个用于表格展示的开源标签库,提供了分页、排序、导出等功能,与WebWork结合可以方便地创建复杂的表格展示。...

    webwork源码底层实现

    WebWork虽然现在已经被Struts2和Spring MVC等更现代的框架取代,但其设计理念和实现方式对于理解现代Web框架的演变过程具有很高的参考价值。如果你是Java Web开发的爱好者,深入研究WebWork源码无疑会增强你的技能,...

    webWork2开发指南

    10. **插件系统**:WebWork2拥有强大的插件体系,可以扩展其功能,例如Spring集成插件,便于与Spring框架结合使用。 通过阅读"webWork2guide.pdf",你将深入理解WebWork2框架的各个方面,并掌握如何有效地利用它来...

    webwork.pdf

    WebWork 1.x版本在设计上与Struts框架类似,采用的是紧密耦合的架构,这在一定程度上限制了其在复杂应用场景下的表现。然而,WebWork 2.0通过将框架拆分为WebWork和XWork两部分,实现了更为松散的耦合,极大地提高了...

    基于webwork.hibernate的项目

    WebWork是一个轻量级、高性能的MVC框架,它的核心设计理念是通过Action类处理用户请求,并通过Interceptors(拦截器)实现业务逻辑的解耦。WebWork的优势在于其强大的类型安全参数绑定、动作结果的灵活性以及对AJAX...

    怎么用WebWork来实现HelloWorld.docx

    最后,确保已将WebWork的jar包导入到你的Eclipse项目中,这样你就可以在Tomcat服务器上运行这个HelloWorld示例了。当用户访问`/HelloWorld.action`时,WebWork框架会调用`HelloWorldAction`的`execute()`方法,显示...

    WebWork docs 2 -- webWork 详细的说明文档

    WebWork是一个基于Java的轻量级MVC(Model-View-Controller)框架,它为构建高性能、可维护的Web应用程序提供了强大的支持。WebWork docs 2 是一套完整的WebWork框架的详细说明文档,包含了开发者在使用WebWork时...

    WebWork 教程

    随着版本演进,WebWork经历了重大变革,最新的WebWork2.x实际上是基于Xwork构建的,Xwork作为底层核心,专注于Command模式的实现,提供了诸如拦截器机制、表单验证、类型转换、OGNL表达式语言以及IoC容器等功能。...

    WebWork2.0讲解说明

    在实际开发中,WebWork2.0常用于构建企业级的Web应用,例如B/S系统、电商平台、管理系统等。开发者可以通过创建Action类,定义处理请求的方法,然后在视图层(通常为JSP或FreeMarker模板)渲染结果。同时,利用拦截...

    webwork的jar包

    WebWork与Hibernate的结合可以提供一个完整的MVC+ORM解决方案,让开发者更专注于业务逻辑,而不是底层的数据库交互。 在提供的文件列表中,"lib"可能是一个包含其他依赖库的文件夹,这些库可能包括Spring、...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    5. **国际化支持**:WebWork1.4内置了对多语言的支持,通过资源包可以轻松实现应用程序的国际化。 6. **视图渲染**:WebWork使用JSP、FreeMarker或其他模板引擎作为视图技术,通过ActionSupport类和结果类型来决定...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    webWork

    WebWork是由Apache软件基金会维护的一个项目,它提供了一种轻量级、高性能的方式来构建动态Web应用。WebWork的设计理念是将业务逻辑与表现层分离,以提高代码的可维护性和可重用性。它使用Action类作为模型,处理...

    webwork2实例源代码

    4. **Interceptor(拦截器)**:拦截器是WebWork2的一个重要特性,它们是可复用的代码片段,可以插入到Action执行流程中,实现如日志记录、权限检查、事务管理等功能。通过配置,可以灵活地调整拦截器链。 5. **...

    webwork教程webwork教程webwork教程

    你可以使用JUnit或其他测试框架,结合WebWork的测试类库,编写针对Action的单元测试。这包括对Action方法的调用、预期结果的验证以及异常处理的测试。 本教程仅覆盖了WebWork的基本概念和入门知识,实战G-Roller-WW...

    webwork,tomcat源码

    WebWork的核心在于它的Action系统,它通过处理用户请求并调用相应的业务逻辑来驱动应用程序。源码中包含了Action、Interceptor、Result等关键组件的实现。Action是处理用户请求的入口点,Interceptor提供了AOP(面向...

    webwork2开发指南

    3. 属性(Parameters)和值栈(Value Stack):WebWork2通过值栈管理请求参数,将请求参数自动绑定到动作类的属性上。值栈还允许动作之间的共享数据。 4. OGNL(Object-Graph Navigation Language):WebWork2使用...

Global site tag (gtag.js) - Google Analytics