如何实现一个快速开发框架之crud

我们在《一个优秀框架的评判标准和方向》说了,一个优秀的企业级开发框架——以用户需求为向导的框架——应该至少实现crud,workflow,report三个范畴的常见需求的快速开发。
Crud范畴的快速开发具体怎么做呢?这里提供一种我的实现方式,它采用了hibernate这个orm框架。
Crud;说白了就是一个实体对象的增、删、改、查。是我们最常见的功能。做Crud的时候oo的思想特别有用。
通过分析得到我们的实体对象和它们之间得关系。那么我们的功能无外呼就是维护实体对象和对象之间的关系。
具体怎么来阐述我的思路呢?
页面是功能得直接表现。我们就从页面说。(实体对象和对象之间的关系是本质,而页面是本质的体现。不同实体的不同关系,在页面上会有一定的表现。这个就上是生病了去看医生,医生通常是从你的表征上来看你得了什么病。)
举个例子:
例如:多对一的关联关系:
如班级和系别的关系,多个班级属于一个系。关系得主控方通常在多得一方。(具体hibernate怎么配置请参看《我的O/R MAPPING (HIBERNATE)方法小结》)那么我们的页面就是这样:

上面有一个选择,点击后弹出系别列表,可以选择系别。当然也可以是一个下拉框。可以让程序员根据需要用tag方便替换。

又如:多对多关系(或多对一关系主控方在一的一方)
如学生选客,学生和课程多对多,主控方在学生,这个时候我们的课程一方就可主动声明” inverse="true"” (具体hibernate怎么配置请参看《我的O/R MAPPING (HIBERNATE)方法小结》)那么页面有可能是这样:

下面有一个多选框(当然可以是其他元素,可自由替换)来维护多对n的关系。在维护学生的时候维同时维护和课程之间的关系。但是对于课程的维护就无需维护关系了,即课程的维护页面就没有那个多选框了。

再如:聚合关系
课程和课程安排是聚合关系,课程安排组成了课程,课程安排离开了课程不存在意义(这通常说明课程安排不会有自己单独的增,删,改,查页面,而对它得增,删,改,查通常通过课程来完成)这个时候要没课程安排是一个hibernate组建,也可以是一个一对多的关联关系并且同时配置cascade="all-delete-orphan"/"all"和fetch="join" lazy="false"。也就是说查看课程通常同时查看课程安排,课程安排的操作通过课程的操作级联来完成。这个时候页面通常是这样:

下面的列表在更新课程的时候级联更新课时安排。
由于fetch="join" lazy="false"我们加载课程的时候同时加载了课程安排,由于cascade="all-delete-orphan"/"all"我们修改课程的时候同时维护课程安排。

那我的的思路就是
1》 oo建模,得到实体对象和对象之间的关系
2》 配置hibernate配置文件
3》 根据配置文件生成功能默认实现,包括页面,业务逻辑等等。页面元素采用tag的形式。程序员可以根据需求替换。而代码实现尽量细力度,程序员只需要修改个性的那一部分。


[该贴被xyz于2008-04-28 09:01修改过]

非常不错,这应该是我们目前OO方向下的主流做法,很多人可能不是很明白,关键我们是根据需求设计出如下的模型图:

这样模型图设计好,楼主上述界面也就能完成,模型图之间关系和楼主界面中表现出来关系有一个对应,两者只是表达形式不同,其实都反映对象之间的关联关系。

还是banq一个人回!
不过无论如何,按照这种思路我得小框架curd功能已经有了雏形!workflow方面得雏形以前已经写过了,但还需要很多修改!

有用处就是好贴 哈哈

楼主加油,期待你的小框架

用oo的维思设计出相应的模型,在用Hibernate很自然,很好,很强大!

一个优秀的企业级开发框架——以用户需求为向导的框架——应该至少实现crud,workflow,report]
workflow,report有非常厉害的作用吗?与这个论坛讨论的OO有什么关系?CRUD,J道框架就实现得很漂亮了,该框架是否要考虑加入workflow,report?

[该贴被oojdon于2008-04-29 09:37修改过]

workflow,report是企业级系统开发的必须功能,缺少说明该框架不完整!