恒拓开源发布 Java EE 企业级应用开源开发平台 Koala,以 DDD 思想为核心

  • 杨赛

2013 年 9 月 2 日

话题:语言 & 开发

2013 年 9 月 2 日,恒拓开源发布了开源项目 Koala(考拉),这是一款 Java EE 企业级应用的开发平台,基于 Apache 2.0 开源许可协议发布。Koala 项目的官网上介绍该项目特性如下:

  • 开源免费的开发平台,允许你任意修改源码并扩展功能
  • 以 DDD 领域驱动思想为核心,抛弃传统的以数据库为中心的四层编码模型
  • 丰富的基础组件支持,包括:国际化、异常、缓存等
  • 向导式的搭建项目过程,支持各种技术选择:JPA,mybatis,SpringMVC,struts2MVC 等
  • 向导式的数据库到实体的生成过程
  • 向导式的实体生成 CURD 功能
  • 向导式的服务发布一键无缝发布成 war、EJB、webservice(SOAP/REST) 多种服务形式
  • 基于 RBAC3 模型的权限子系统
  • 监控子系统轻松协助你监控 URL, 方法,数据库,内存等状态
  • 使用通用查询子系统轻松定制完成查询功能
  • 基于 IP 过滤,用户名验证及方法权限控制的 WS 安全子系统
  • 基于 JBPM5 的流程子系统

InfoQ 中文站采访到了恒拓开源技术副总监陈操,了解有关 Koala 项目的更多细节。

InfoQ:首先,请你简单的介绍一下 Koala 项目。它是为什么开发的?它主要面向哪些用户?

陈操:Koala 是一个免费的、开源的 JavaEE 企业应用开发平台。它的主要设计目标是:

  • 促进领域驱动设计(DDD)思想的普及推广;
  • 简化架构师的系统设计工作;
  • 提高开发人员的工作效率;
  • 降低软件开发成本。
  • 集成 JavaEE 企业应用开发中常用的技术组件和业务组件,使得开发人员不必自行开发和配置;
  • 提供一个简单、一致的核心,同时不限制开发人员的自由度。
  • 促进面向标准和规范编程,降低框架、类库的耦合度,避免厂商锁定。
  • 促进单元测试、验收测试、自动化构建、持续集成、软件质量度量等软件质量保证措施的广泛采用

Koala 是为企业应用而开发的,它面向 IT 企业与开发人员,为他们生成一个可直接部署运行的项目核心,集成了绝大多数企业应用中都要用到的技术基础组件和业务组件,开发人员可以以此为基础添加自己的内容,形成一个完整的企业应用。

InfoQ:在 Koala 项目开发的过程中,你们参考了哪些前人的解决方案?之前的解决方案存在哪些问题?

陈操:与 Koala 类似的软件有不少,有一些很流行的平台或解决方案,很多软件企业也都有自己内部的解决方案。这些软件虽然都有各自的亮点,但也或多或少存在以下的问题:

  • 范式落后,停留在“以数据库表为中心的增删改查”这种面向过程而不是面向对象的、以技术实现而不是业务领域为中心的开发方式。
  • 内容单薄,通常只集成了流行的 SSH 三大框架。只对编码过程进行有限的支持,对质量保证、运行监控、生命周期管理等软件开发中至关紧要的环节没有提供有效支持。
  • 过度封装,严重限制了开发人员的自由度。开发人员只能严格按照开发平台的规定来编写代码,限制了他们的创造性。
  • 耦合性强。代码被紧密耦合到开发平台,不能在别的地方重用。
  • 不遵循标准和规范编程,直接绑定到具体的实现框架,无法自由切换到其他实现方式。
  • 扩展性差。很多开发平台鼓励面向实现编程,取消接口和抽象,美其名曰“简单第一”,因此都是不可扩展的。
  • 学习曲线陡峭,开发人员不得不花费大量的时间和精力来掌握开发平台的使用方法。
  • 一些框架不是开源的,需要支付很高的费用。

InfoQ:Koala 项目对这个问题的实现思路是什么?

陈操:针对同类软件中存在的种种问题,我们的实现思路是:

  • 开发平台生成的企业应用以领域驱动设计(DDD)开源项目DDDLib为核心,鼓励开发人员遵循领域驱动设计范式进行面向对象的软件开发。领域对象(业务实体)是最“丰满”的对象,封装了领域逻辑,而不是一个贫血的数据容器,或数据库记录的 Java 对象形式。
  • 为企业软件开发提供从代码到工具到平台的全套技术支持。
  • 最大化开发人员的自由度。用户的代码对平台没有依赖,可以脱离平台自由重用。
  • 遵循标准和规范编程。可以自由扩展和替换各种基础技术组件,而主体代码不变。
  • 遵循面向对象的“依赖倒置”原则,实践并鼓励面向接口、面向意图编程。
  • 致力于免费和开源。Koala 全部采用开源组件,而且 Koala 本身也是开源的,降低企业的总拥有成本。Koala 是开放的。我们彻底公开全部的源代码,欢迎所有的人使用和修改。我们期待来自开发人员的反馈意见并欢迎他们的参与,为开源事业贡献自己的力量。

InfoQ:请简单介绍一下 Koala 项目的实现。

陈操:Koala 是以领域驱动思想为核心,在此基础上为开发人员提供了一整套可选的完整的辅助解决方案。

Koala 现在包含以下功能及实现:

  • 向导式项目定制与生成。通过 Eclipse 插件自动生成按标准分层的、多模块的 Maven 项目骨架,省去了开发人员收集、装配和配置各种技术组件的麻烦。可以在多种持久化框架、IoC 容器、Web 框架之中自由选择一种,灵活搭配。可以选择消息服务、缓存、规则引擎、业务流程引擎、ftp、定时任务、Excel 导入导出等基础技术组件(未来还会提供更多技术组件)作为项目的组成部分。
  • 通过 Eclipse 插件从数据库表生成实体类,以及根据实体类生成 CRUD 功能的 Java 类和 Web 页面,以减轻开发人员的机械性、重复性工作。开发人员可以在生成的类和页面的基础上作进一步的修改,以满足自己的特定需要。
  • 对测试自动化的支持。系统提供了方便的测试基础设施和测试基类,开发人员只专注于编写测试用例,不需要自行搭建任何测试支持环境。另外,在代码生成的过程中也自动生成了测试类和某些测试方法。
  • 权限子系统。生成的项目中集成了一个基于 RBAC3 模型的权限子系统,以用户、角色和资源为核心的关系而建立,可以针对 URL、业务方法、页面中的按钮、文字和图片等资源施加细粒度的权限控制。
  • 流程子系统。系统集成了一个基于 JBPM5 的业务流程运行和设计平台。你只需通过浏览器在线设计流程并部署,即可发起、执行和监控流程实例。其余的一切由流程平台为你解决。
  • 监控子系统。系统集成了一个可开关的监控子系统。它可以为你监控 http 请求,找出哪个请求访问次数最多或最耗时;为你监控业务方法,找出请求最多或最耗时或抛出异常的方法;为你监控数据库资源,连接池健康状态监控以及 SQL 监控,等等等等。
  • 透明的远程化支持。你可以通过 Eclipse 插件,将项目中的某些类发布成 SOAP 和 / 或 RESTful 风格的 Web Service 或 Stateless EJB,在此过程中无需修改现有的类代码。Koala 自动生成可部署的发布包,可以选择 WAR + EJB 或 WAR 两种部署形式之一。
  • WS 的安全机制。使用 Koala 发布的 Web Service,你可以立刻获得基于 IP 过滤,用户名密码验证,方法级权限控制的 Web Service 安全机制。无需自己编写和配置。
  • 通用查询组件。无论事先多么详细规划,也无法穷尽最终用户的查询需求,甚至在系统上线之后客户还可能提出更多的查询需求。Koala 对此的解决方案是提供一个通用查询组件,用户可以在系统提供的界面上自由定制自己需要的查询,即时生效。

InfoQ:对于 Koala 项目,你们的下一步计划是什么?

陈操:现阶段 Koala 已经发布了第二期,提供了一些较为丰富的功能与支持。Koala 下一步计划是:

1)推广并支持项目使用 Koala 进行开发

Koala 一期在一些项目中已经进行使用,获得了一些认可。接下来二期功能发布后,Koala 会继续在项目中推广与使用,并对使用过程中的问题进行支持,同时也会不断收集反馈,以优化与完善。

2)开始三期的项目开发

  • 集成持续交付子系统
    • 持续集成支持:hudson 和 Jenkin
    • 代码质量持续检查:Sonar
    • BUG 管理平台支持 Trac 和 JIRA
    • 版本管理支持:SVN 和 Git
  • Koala UI 开发

    KoalaUI 是一个面向前端美工和前端开发人员的 UI 开发平台,基于 Html5 标准,集成主题皮肤、页面模板和可视化页面编辑等功能,目的在于提高前端 UI 的开发效率,通过 KoalaUI 平台快速开发企业前端应用,以及消除美工与前端开发之间的合作隔膜。

    KoalaUI 平台的特点:

    1. 可视化操作
    2. 拖拽式组件的页面编辑
    3. 内置企业平台前端模板
    4. 可自定义皮肤、模板和组件
  • 集成更多的子系统

    包括组织机构子系统与日志子系统等新加的子系统开发

  • 已有功能的进一步完善与功能扩充

如果对 Koala 有兴趣,可访问Koala 的官网获取更多信息。

语言 & 开发