`

在Ruby on Rails/Naked Objects精神指引下的域驱动开发框架

阅读更多
Ruby on Rails已经受到越来越多的重视,更多文章开始关注,Rolling with Ruby on Rails一文比较详细,也有国人做了翻译,按这里。这里我们不过多讨论ROR(Ruby on Rails),而是探讨如何以一个正确的方式快速开发J2EE。

现在的问题

  现在我们J2EE开发碰到了什么问题呢? 让我们想象一下使用Spring和Hibernate开发一个J2EE WEB应用是什么样的:我们需要增加一个新的域对象类型为Person,下面主要的开发步骤:

  1. 创建Person类.
  2. 创建PersonDAO类.
  3. 创建Person数据表.
  4. 定义PersonDAO在Spring的application context XML文件.
  5. 创建Person page页面和action类.
  6. 增加Person页面到web框架(如struts)XML配置文件中.
  7. 创建personList页面来显示Person实例.
  8. 创建personEdit页面来编辑Person实例.

  你会确实感慨:真是需要很多步骤啊。

如何解决?

  关键问题是我们开发时不能重复一些步骤,因此必须尽量减少步骤,如果只减少步骤到:

  1. 创建Person类?

  是否只需要第一个步骤就可以?在第一步时,我们花费更多时间精力进行域建模,确定域模型的属性行为等。其他步骤我们会发现下面的规律:

  • 对于每个实体,我们需要完成应用的基本功能,如 create, retrieve, update, and delete (CRUD).
  • 我们需要每个实体持久化到数据库.
  • 我们需要数据库为每个实体创建数据表。
  • 我们需要安排实体之间的关系。

  当然,在复杂应用中,不会只是这些功能,但是如果我们将这些功能通过框架实现,将大大提高我们的开发效率。

域驱动开发

  域驱动开发(domain driven development framework ),简称DDD是一种最新的OO设计概念,它是由ROR和Naked Object组织提出的。

  所谓naked Object是指一个复杂的域对象,这个Object是一个POJO,但是不是一个傻傻的完全是属性的POJO,而是封装了业务逻辑的POJO,注意这里是最大的区别,一般业务逻辑我们是通过另外的Service类来实现,然后在Service中封装的transaction script(Martin Fowler却称为贫血模型) , naked Object则是合并起来的(有的类似回归传统了,符合Martin Fowler审美观了),但是,这种纯OO是和SOA()思想矛盾的(Service-Oriented vs. Object-Oriented ),可见Adventures in SOA(puts the business logic in service-like methods instead of on the object, service method -> business method --> persistence method) )

  个人感觉整个软件好像一直在玩0或1的游戏,不过也许最复杂的体系就是来自最简单的抉择,如股票/汇市等投资领域也如此。

  naked Object提出现在J2EE开发和裸体对象DDD开发下的图:

  通过这张图我们可以看到,以前方式造成J2EE开发层次之间调用混乱,修改和拓展非常不方便,而在右边的DDD开发方式下,界面(边界)对象就是域对象就是持久化的实体BO,没有多余的Contorller或Action了。原来Domain层被服务层Service layer遮挡,在右图中,则Domain层直接暴露给前台了,所以Domain没有东西被遮盖,裸露了,称为Naked(裸露) Objects.

现在怎么办?

  ROR提倡的DDD方式引起了众多J2EE开发者的兴趣,在各大Java媒体正在引起广泛的讨论,但是ROR不是Java的,那么有无基于Java的DDD开发框架呢?

  目前有不少DDD开发框架正在诞生中,Jdon框架正是在ROR这种精神指引下的一款快速开源开发框架,Jdon框架1.2.2版本虽然不是一个完全意义上的Naked Object,基于Service-Oriented 架构,但是已经初步具备上图右边开发流程,具体可参考Jdon Sample的开发流程

  使用Jdon框架开发J2EE应用系统,最重要的一个前提是:设计好你的域对象,然后在将域对象复制到表现层,变成表现层的ActionForm/ModelForm;将域对象直接在持久层使用Hibernate/iBatis等持久化到数据库;如果使用EJB的实体Bean持久化技术,将无需实现建立数据表;应用系统部署时,J2EE容器将直接根据实体建立数据表,也可节省前面步骤中两个步骤。

  当然,目前Jdon框架是采取分离手法,遵循桥模式,将抽象和行为分离,每个域对象对应一个操作它的服务类或DAO类,服务类主要用来封装业务逻辑层,然后将业务Service作为一个业务组件暴露给表现层的Controller/Action类,而Controller/Action则无需代码,只要通过如下配置即可完成:

<model key="username" class="com.jdon.framework.samples.jpetstore.domain.Account">
  <actionForm name="accountForm"/> //指定边界类
  <handler>
    <service ref="accountService"> //指定某个业务接口
      <getMethod name="getAccount"/>
      <createMethod name="insertAccount"/> //业务接口的新增方法
      <updateMethod name="updateAccount"/> //业务接口的修改方法
      <deleteMethod name="deleteAccount"/>
    </service>
    </handler>
</model>

  通过上述配置,净化了上图中应用控制层(Application or Controller layer)和Domain Layer之间对应关系,变得有条理而且明晰。

  随着Naked Object 被越来越多人认识和应用成熟,Jdon框架也将转向支持另外一个纯OO流派Naked Object, 就象它同时支持POJO派和EJB派一样。

  在Jdon框架以后版本中,会很方便支持Naked Object,只要将上面配置文件指向Service去除,CRUD方法由Model自己实现,如下:

<model key="username" class="com.jdon.framework.samples.jpetstore.domain.Account">
  <actionForm name="accountForm"/> //指定边界类
  <handler>
   <!-- <service ref="accountService"> //指定某个业务接口 无需业务层,去除-->
      <getMethod name="getAccount"/>
      <createMethod name="insertAccount"/> //业务接口的新增方法
      <updateMethod name="updateAccount"/> //业务接口的修改方法
      <deleteMethod name="deleteAccount"/>
   <!--  </service> -->
  </handler>
</model>

参考文章:

面向对象与领域建模

Ruby on Rails and J2EE technical comparison

ValueObject和DTO模式的一些疑问

Jdon Framework的服务调用命令模式实现

DDD(Domain-Driven Design领域驱动设计)实战

Java项目开发中常见根本性认识误区

领域模型驱动设计(DDD)之模型提炼

分享到:
评论

相关推荐

    Ruby on Rails Tutorial

    David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby。Rails 常被称作 Ruby on Rails,它让 Web 开发变得从未这么快速,也从未如此简单。在过去的几年中,《Ruby on Rails Tutorial》这...

    ruby on rails 101

    ”这句话生动地描述了Ruby on Rails的独特之处以及它在Web开发领域的影响力。 #### 二、安装 安装Ruby on Rails的方法多样,具体包括: - **InstantRails**:适用于Windows用户的单击安装包。 - **Locomotive**:...

    ruby on rails最新版

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...

    ruby on rails最佳敏捷开发

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用框架,它遵循敏捷开发原则,致力于简化Web开发过程。Rails的核心理念是“Convention over Configuration”(约定优于配置),这意味着开发者可以减少大量...

    Ruby on Rails安装包全集(Linux)

    Ruby on Rails是一款基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发流程。在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,...

    ruby on rails 3 tutorial.pdf

    《Ruby on Rails 3 Tutorial》是一本专门为初学者设计的指南,旨在帮助读者快速掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的一个开源框架,它采用MVC(Model-View-...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性。在这个开发环境包中,我们拥有Ruby ...

    Ruby on Rails实践

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架。这个框架遵循“约定优于配置”(Convention over Configuration)的原则,致力于简化Web应用的开发流程,提高...

    ruby on rails for dummies

    《Ruby on Rails for Dummies》是一本专门为初学者设计的Ruby on Rails教程,它旨在帮助新手快速理解并掌握这个强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言构建的一个开源Web应用程序框架,它...

    ruby on rails社区网站开发源码

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它基于Ruby编程语言。这个框架以其MVC(Model-View-Controller)架构、约定优于配置(Convention over Configuration)的...

    Ruby On Rails(PDF)

    在众多的开发框架中,Ruby on Rails (RoR) 和 Java 的相关框架尤其受到关注。本文基于给定的PDF文档内容,深入探讨了Ruby on Rails和Java框架之间的区别,尤其是它们在易用性方面的差异。 #### 二、Java框架现状 ...

    使用 Ruby on Rails 和 Eclipse 开发 iPhone 应用程序教程(含图例)

    【使用 Ruby on Rails 和 Eclipse 开发 iPhone 应用程序教程】是一个面向中级开发者的系列教程,旨在教读者如何利用 Ruby on Rails 框架在服务器端为 Mobile Safari 设计和提供自定义内容,以适应 iPhone 和 iPod ...

    Ruby On Rails中文教材(PDF)

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用程序的开发。Rails由David Heinemeier Hansson于2004年创建,它提倡“约定优于配置...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    Ruby on Rails 4 Tutorial 中文版

    Ruby on Rails 4 Tutorial 是一本深受开发者欢迎的书籍,它详细介绍了如何使用Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的开源框架,以其“约定优于配置”(Convention over ...

    ruby on rails(开发文档)

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web应用的开发过程。Rails的哲学是“约定优于配置”,鼓励开发者遵循一套标准的...

    ruby on rails api

    Ruby on Rails(简称Rails)是一种基于Ruby编程语言的开源Web应用程序框架,专为敏捷开发而设计,强调简洁的代码和“约定优于配置”的原则。它主要用于构建数据驱动的Web应用,借助于MVC(Model-View-Controller)...

    提升Ruby on Rails性能的几个解决方案

    Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...

Global site tag (gtag.js) - Google Analytics