作者:板桥里人 原文地址:
http://www.jdon.com
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开发下的图: