`
jusescn
  • 浏览: 125852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于ss3扩展框架

阅读更多
原文可以去springside的论坛上找。
我的思路如下:
一、增加一套基于EXTJS的控件
     我感觉可以通过增加Struts2的一个theme,干脆叫做ext_xhtml,可以参考ajax theme,做一套。
     控件包括:
    1、tree可以支持拖拉,编辑还是权限,在基本树的基础上扩展为用户、角色、部门选择树。
    2、grid应该支持右键菜单,右键菜单中包括编辑、打开、删除以及其他定制操作,
         当然支持shift、ctrl多选,多选和单选后,右键菜单是不一致的。
    3、表单。
         3.1 富文本编辑。
     3.2 日期选择控件。
         3.3 BeanEditForm,功能类似Tapestry 5的BeanEditForm,
             3.3.1 通过property设置那些属性编辑、那些不需要;
             3.3.2 通过Model的property的类型和JPA Annotation,自动选择input type而且自动增加类型validation。
          属性类型和input type 对应如下:
                 @Basci,String => text
                 @Basci,long,int、float等数据类型 => text
                 @one-to-many等数据类型 => select
                或者(option="id",value="name")需要实现IEntity和IName,必须有id,name属性
                或者自定义实现ISelectModel
                 @Basci,date、time等日期类型    =>日期选择控件
                 @lob,byte[] =>file
                 @lob,String =>富文本编辑
                 其他 =>定制
         3.4 FileUpload,文件上传主要需要统一考虑性能和存储管理问题,最好增加Cache.
             3.4.1 文件上传流程:文件先放在Cache中,然后通过JMS异步写入到数据库中。
             3.4.2 文件下载流程:先从Cache中读文件,Cache如果没有,从数据库中读,并写入到cache中。
    4、struts2支持json
       4.1 增加JSON interrupter
       4.2 增加JSON Result
       4.3 基于Json-lib(http://json-lib.sourceforge.net/)
    5、工具条
       一般来说,每个gird都带有一个工具条。包括统一查询、新建等快捷键。
       
二、支持Restful 2
    2.1 URL路由规则。在StrutsEntityAction中实现index、view、edit、editNew、create、update、remove方法就可以。
子类一般无需实现,但留有回调就可以。路由规则如下:
          GET: /groupId/7/user          => method="index" ,groupId=7           =>listUser.jsp
          GET: /groupId/7/user/5       => method="view", id=5 ,groupId=7    =>viewUser.jsp
          GET: /groupId/7/user/5!edit => method="edit", id=5 ,groupId=7     =>editUser.jsp
          GET: /groupId/7/user/new   => method="editNew" ,groupId=7       =>newUser.jsp
          POST: /groupId/7/user        =>    method="create" ,groupId=7        =>listUser.jsp
          PUT: /groupId/7/user/5       =>  method="update",id=5 ,groupId=7  =>listUser.jsp
          DELETE: /user/5                       => method="remove"                                 =>listUser.jsp
          DELETE: /id/1/id/2/id/3/user                       => method="remove"                                 =>listUser.jsp (批量删除)


    2.2  在StrutsEntityAction,增加getHelper,实现ROR的部分help功能.
         2.2.1 url helper。public String url(String action, String... params);
           比如<s:set name="thisUrl" value="helper.url('user','groupId=2','roleId=5')" />
     2.2.2 获得参数的功能;这方面比动态语言稍微不方便一点。
           helper.getParam("groupId").toString();
           helper.getParam("selectUserIds").toList();//比如客户在用户表中,一次选择多个用户。
            不过在JSP中也很简单。
               <c:set var="groupId" value="${params.groupId}" />

三、零配置
    3.1 Struts2的零配置。通过Annotation和Restful2ActionMapper和CodeBehind。
      3.1.1 需要修改Struts2的源码(ClasspathConfigurationProvider),支持wizard功能。(无奈的办法)
      3.1.2 增加类似Restful2ActionMapper,CodeBehind功能的RuleActionMapper和RuleCodeBehind支持动态路由规则。
    3.2 Spring的零配置. 基于sannotations(http://sannotations.sourceforge.net/)。
        需要修改源码来支持parent和abstract属性。(无奈的办法)
    3.3 JPA的零配置.比较容易做到。
四、DAO
    4.1 dao采用CRUD GenericDAO模式.
       4.1.1 参考文章
          http://forum.springframework.org/showthread.php?p=120962
      http://www-128.ibm.com/developerworks/java/library/j-genericdao.html
      http://www.ibm.com/developerworks/cn/java/j-genericdao.html
    4.2 增加 JPA 的DSL Criteria Style api。Hibernate的Criteria不太易用。
       这方面BBA 96 这个开源项目做的很不错。不过可以再优化。基本思路如下:
4.2.1 简单的
   List users = GenericDAO.find(User.class,"groups:g.name","开发部")
4.2.2 复杂的
Criterion criterion =  Criterions.select(distinct(),count(),"g.name")
    .and(
         in("groups:g.name", "开发部","测试部","人事部","行政部门").eq("roles::r.name", "admin")
    ).or(
        eq("disable", true).gt("menus.m",1)
    )
    .group("g.name")
.having(gt(count(),1))
    .order(asc("createtime"));

//这个只是例子,
    List users = GenericDAO.find(User.class,criterion)

     介绍以下:
     4.2.2.1、"groups:g.name"是用户和部门内连接,g是部门的别名,g.name是部门的name属性
4.2.2.2、"roles::r.name"是用户和角色左连接,r是角色的别名,r.name是角色的name属性
4.2.2.3、目前只支持内连接和左外连接,其他连接在实际应用中一般极少用到.如果碰到这种情况,你可以试试去买彩票了。^_^
4.2.2.4、如果没有select方法,那么就是select *。and、in、or 、eq、gt、group、having、order都可以没有,根据情况而定。
4.2.2.5、支持eq、ne、le、ge、gt、lt、between、in、like、ilike等操作。

4.2.3 支持QBE
    User user = new User();
    List<User> Users = UserDao.find(like(User).excludeProperty("name"));

4.2.4 支持智能行数计算
   count(criterion),具体做法就是去掉group和order,
   然后在select count(o) from (去掉group和order的JPA QL) o。

4.2.5 支持常用MODEL
   4.2.5.1 主键统一名称为id,类型为Long的EntityImpl  implement IEntity
           public Long getId();
           public void setId(Long id);
   4.2.5.2 具有名称属性的NameEntityImpl extends EntityImpl implement IName
          public String getName();
          public void   setName(String name);
   4.2.5.3 名称唯一的UniqueNameEntityImpl extends NameEntityImpl implement IUniqueName
   4.2.5.4 有创建和更新时间,RecordableEntityImpl extends EntityImpl implement IRecordable
   4.2.5.5 当然都是各种接口。比如说,RecordableUniqueEntity extends UniqueNameEntityImpl  implement IRecordable

五、Service
    5.1 增加BaseEntityManager,其他Entity Service来继承这个BaseEntityManager
    5.2 组件,比如说compass、jbossrules、jbpm等应该在这个层次上定义
      SearchManager,RuleManager,WorkFlowManager,CacheManager,SecurityManager
    5.3 不能光看到ROR开发效率高,但同时也要看到ROR复用程度并不是很高。当然只是我个人意见,ROR fans别用砖头砸我。^_^
    5.4 增加异类关联。有点像@hibernate.any,不是一般的1:n或者m:n关联。实际情况很常见。
    而且就是hibernate.any也不能做到双向关联。
        比如说表单和工作流实例的关系、表单和附件的关系,日志和被记录实体的关系

六、增强测试
   6.1 基于Testng。junit无法实现测试方法的依赖关系。
   6.2 做各种测试基类。比如AbstractBaseManagerTests、BaseSearchManagerTests、BaseRuleManagerTests。
   6.3 坚持Pragmatic风格的测试。减少mock测试。毕竟我们是给他人提供框架的人。
       框架本身可以给二次开发人员提供mock测试。
  
七、项目管理
   7.1 做持续继承。可以通过CiruseControl,建议continuum更好。
   7.2 做单元测试覆盖率.
   7.3 彻底maven2,不要看到任何ant target。开发maven2 Mojo相当easy.

我的E-Mail: yangxionghui@263.net
分享到:
评论

相关推荐

    SS2H框架纯净版

    SS2H框架是Java开发中的一个经典组合,由Spring、Struts2和Hibernate三大开源框架集成,常用于构建企业级的Web应用。本压缩包"SS2H框架纯净版"包含的是Spring 4.0、Hibernate 4.2和Struts2的一个精简配置,便于...

    关于SS框架后台代码开发规范实例

    SS框架,通常指的是Spring+Struts2的组合,这是一种经典的Java Web开发框架。Spring作为全面的后端控制反转(IoC)和面向切面编程(AOP)框架,而Struts2则负责处理HTTP请求和视图展示。在这个背景下,后台代码开发...

    J2EE开发ss2h框架JAR包整合

    在本文中,我们将深入探讨一个经典的SS2H(Struts2、Hibernate、Spring)框架集成,用于实现MVC(Model-View-Controller)架构。这个组合在Java Web开发中非常流行,因为它们各自提供了不同的优势,可以协同工作,...

    java ss2h框架增删改查

    Java SS2H 框架,全称是 Spring Security、Spring MVC 和 Hibernate 的组合,是一种常用的Web开发架构,尤其在企业级应用中广泛使用。...通过熟练掌握SS2H框架,可以大大提高开发效率,保证应用的稳定性和可扩展性。

    三大框架ss2h整合(一)

    Struts2提供了一套强大的拦截器机制,可以灵活地扩展功能和处理异常。 **Spring框架**则是一个全面的后端应用管理框架,其核心特性是依赖注入(DI)和面向切面编程(AOP)。依赖注入使得对象之间的依赖关系得以解耦...

    sssp框架的增删改查

    SSSP框架,全称为Spring-SpringMVC-SpringData-JPA的组合,是Java开发中常见的一种Web应用程序架构。这个框架集合了Spring的核心特性、SpringMVC的控制器机制、SpringData的数据访问抽象以及JPA(Java Persistence ...

    ss3ex中使用UrlRewrite

    `ss3ex`可能是一个基于Java的Web框架,但具体细节并未给出,我们通常可以将`ss3ex`理解为一个自定义或特定于项目的框架,它可能基于Spring、Struts或其他类似的Web框架。 描述中提到的“博文链接:...

    ss3h项目jar

    综合以上分析,这个"ss3h项目"是一个使用了传统Java Web技术栈的项目,它利用了Spring、Struts、Hibernate等框架,结合MySQL数据库,实现了数据持久化,使用Jackson处理JSON数据,通过Smack进行即时通讯,并且有日志...

    资料-SS M框架Spring+SpringMVC+MyBatis全覆盖.zip

    在实际工作中,SSM框架因其灵活性和可扩展性被广泛采用。开发者可以根据项目需求,选择合适的组件进行集成,以达到最佳的开发效果。同时,随着Spring Boot和Spring Cloud的流行,SSM框架在现代微服务架构中的地位也...

    SS2H的理解

    ### SS2H的理解 #### Struts2的理解 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web层框架,它本质上是一个大型的Servlet。具体来说,该框架的核心组件是`ActionServlet`或者它的子类。开发者可以...

    神思ss628型USB二代身份证DEMO(C#)

    3. **事件监听**:神思SS628在读取到身份证信息后,会通过串口发送数据。DEMO需要注册一个事件监听器来接收这些数据,这通常通过定义一个事件处理函数来完成。 4. **数据解析**:收到的数据是二进制格式,需要进行...

    很不错的pb框架SD2

    开发者可以查看源代码,理解其工作原理,并根据实际需求进行定制和扩展,促进了技术的共享和进步。 4. **易于上手**:对于熟悉PB的开发者来说,SD2的简洁设计使得新项目的启动更快,开发者可以迅速地投入到实际开发...

    SSSP整合及分页开发

    总的来说,SSSP整合集成了Java Web开发的多个重要组件,为开发人员提供了高效、灵活的工具,帮助构建可扩展、易维护的应用程序。在分页开发方面,Spring Data的Pageable接口使得数据检索更加高效,避免一次性加载...

    java基本框架

    Java基本框架是构建高效、可扩展且易于维护的Java应用程序的核心工具。这些框架提供了一种标准的方法来组织代码,使得开发过程更加规范和模块化。在这个"java基本框架"的压缩包中,我们重点关注三个主要组件:Spring...

    yii 2.0 框架安装包

    Yii 2.0 框架是一款高效、可扩展且易于学习的PHP框架,专为构建高性能的Web应用而设计。Yii,发音为"易",代表简单和优雅,是Yee或Yes It Is的英文缩写。这个框架遵循模型-视图-控制器(MVC)设计模式,提供了一系列...

    SSPP.rar_sspp_struts_struts 上传_www.77sspp_com

    标题中的"SSPP.rar_sspp_struts_struts 上传_www.77sspp_com"表明这是一个关于SSPP(可能是Student Software Publishing Platform,学生软件发布平台)的项目,使用了Struts框架,并且包含了文件上传的功能。...

    公司人事管理系统(ss2h)

    3. **MySQL数据库**:MySQL是一种关系型数据库管理系统,以其开源、免费、高效、易用等特性深受开发者喜爱。在人事管理系统中,MySQL存储所有员工的个人信息、工资、考勤等数据,通过SQL语句实现数据的增删改查操作...

    ssh1 ss2 jar 架包

    总结一下,SSH1和SS2都是为了简化Java Web开发的复杂性,通过整合Struts、Spring和Hibernate的优势,提供了一个强大的平台来构建可维护、可扩展的企业级应用。JAR文件是Java生态系统的重要组成部分,它们承载了框架...

    ss开发帮助文档

    本教程的"struts2教程"子文件可能包含了更多关于Struts2的实例代码、配置示例和使用技巧,对于学习和掌握Struts2框架会非常有帮助。通过深入学习和实践,开发者可以更好地理解并运用Struts2框架来构建高效、可维护的...

    整合后的空白框架模板

    本项目名为“整合后的空白框架模板”,是将Spring、SpringData、SpringMvc和JPA这四个关键组件整合后形成的基础框架,适用于快速开发高效、可扩展的Web应用。 首先,Spring框架是整个项目的基石,它提供了一个容器...

Global site tag (gtag.js) - Google Analytics