不会有两种建模的,应该只是业务建模,至少在开发阶段如此,在将来的维护升级阶段,特别是数据库查询优化的时候,会有一些数据建模的工作需要做。我自己做设计的步骤如下:
分析软件需求,以用户的角度来使用软件,找出发生的scenerio,抽象成为一个一个Use Case,分析出Use Case之间的关系,这一步是非常重要的,这一步做好了,设计就成功了一半。Use Case的抽象有一些可以遵循的原则,这里不详细谈。
然后用语言描述每一个Use Case,描述用户使用一个Use Case发生的主事件流以及异常流。
这样就完成了需求分析阶段。
接下来做概要设计,针对每个Use Case,读Use Case的描述,看事件流,找出所有的实体类,这也有一些可以遵循的原则,例如找出所有的名词,画表格排除等等方法。
然后分析实体类之间的关系,是包含,聚合还是依赖,是1:1,还是1:n,还是其他....,根据这些关系,就可以得出实体类和别的实体类想关联的属性,然后再找出每个实体类本身重要的属性。
然后再次分析Use Case的事件流,一方面check实体类的设计是否合理,另一方面你可以找出动词,分析对实体类的控制逻辑,这样就可以可以设计出业务控制类,一般你可以一个实体类一个控制类,也可以业务逻辑相关的实体类由一个Facade Session Bean(非EJB含义)来统一控制,这里面的控制类的颗粒度就由你自己来掌握了。一般来说先可以设计一些细颗粒度的控制类,然后再按照模块,用粗粒度封装细颗粒度的控制类,提供给Web层一个Facade。
然后你可以画序列图,就是用序列图来表达事件流,在这个过程中,你需要不断回到类图,给控制类添加方法,而序列图就是控制类的方法调用。
至此,你已经在Rose里面完成了概要设计,当然你不可能一次设计完善,会有很多次迭代,因此你不能一开始把类设计的太详细,只抓住主要的属性和方法,特别需要注意的是,是抽象的设计,不要用具体的编程语言来表达类。
然后你就可以抛开Rose了,转到Eclipse+Togehter里面,根据那些类,规划一下package层次,然后在Together里面进行类的详细设计,所有需要的属性一一写上,当然你还是不可能一下把所有的属性方法写全,不过没有关系,把重要的写好就行了。
然后类框架已经生成好了,给所有的实体类加上xdoclet,然后生成hbm,然后用Hibernate的ExportScheme生成DDL,运行一遍自动创建好所有的表。这样所有的实体相关类全部做好了。
你现在就集中精力把控制类那些方法里面的代码填写上就OK了,在这个过程,你会发现有些实体类缺属性,没有关系,加上属性,然后写好xdoclet,运行一遍,自动生成hbm,自动创建好表,然后继续写你的方法,也有可能你发现控制类缺方法,那么就加上。
基本上实体类就是getter/setter,和少量的实体相关方法,所有的控制逻辑都写在控制类里面。
最后你的软件就基本写好了,用Eclipse生成好一堆你的testCase运行测试,反复修改,除bug。
看看使用OOAD的设计思路,是多么的爽的事情阿!你只需要把精力放到Use Case的抽象,实体类的关系总结,控制类的归纳。而当你使用Eclipse+Together之后,你所需要写的代码只不过是控制类的方法实现代码,其他的都已经生成好了。另外可能需要写少量工具类。
分享到:
相关推荐
### MFC SDI 制作 Office 2007 样式 Robbin 菜单 #### 一、概述 Microsoft Foundation Classes (MFC) 是一个由微软开发的类库,用于简化 Windows 应用程序的开发过程。本文档旨在介绍如何在 MFC 单文档界面...
git config --global user.name "robbin" git config --global user.email "fankai@gmail.com" git config --global color.ui true ``` 设置别名,如`co`为`checkout`,`ci`为`commit`,`st`为`status`,`br`为`...
Robbin Fan—运营专业型社区的经验和反思.ppt
robbin_site 是范凯的个人网站 http://robbinfan.com 网站的源码。 标签:robbin
在Javaeye Robbin的讨论中,他提到了缓存技术在多种场景下的应用和重要性。 **缓存的作用** 1. **高速缓冲存储**:缓存是一种位于主存储器和慢速I/O设备之间的高速存储器,其目的是减少对慢速设备的访问次数,提高...
- 独立配置Robbin负载均衡 # 1.系统架构演变 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到...
组件的使用通常包括以下几个步骤: 1. 在Delphi的工具箱中添加Ribbon组件。 2. 在设计界面中放置Ribbon组件,并设置其基本属性,如宽度、高度、背景色等。 3. 添加功能区和命令按钮,通过代码或属性设置它们的行为和...
-rwxr-xr-x 1 robbin users 11939 2008-11-02 13:48 hello ``` 该文件大小约为11KB。 ##### 2. 查看动态链接库 通过`ldd`命令可以查看该程序所依赖的动态链接库,例如: ```sh ldd hello ``` 输出结果可能类似...
2. **C#编程**:理解面向对象编程,掌握C#语法,如类、对象、属性、方法、事件等,以及如何与WPF进行交互。 3. **Ribbon控件**:了解Ribbon控件的结构,如Tab、Group、Button、Gallery等元素的使用和自定义。 4. **...
在 JavaScript 中,prototype 是一个非常重要的概念,它提供了一套面向对象编程的基础设施,允许开发者定义对象类型和实现继承。下面我们将详细介绍如何使用 prototype 定义对象类型。 一、什么是 Prototype? 在 ...
* `git revert <$id>`:恢复某次提交的状态,恢复动作本身也创建了一次提交对象 * `git revert HEAD`:恢复最后一次提交的状态 查看文件 diff * `git diff <file>`:比较当前文件和暂存区文件差异 * `git diff`:...
5. 创建一个 RibbonPanel,并将其 Source 属性设置为步骤 4 中创建的 RibbonPanelSource。 6. 将 RibbonPanel 添加到 RibbonTab 中,使用 RibbonTab.Panels.Add() 方法。 7. 创建控件,如 Autodesk.Windows.Ribbon...
5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为表达式语言,用于在Action与视图之间传递数据,以及在Action中访问对象属性。 6. **结果类型**:不同的结果类型决定了Action执行后的跳转...
GE在韦尔奇任内20年实现了每年30%的高速增长,市值曾经达到全球第2,是全球最著名的CEO楷模。韦尔奇写的两本书:一本自传,一本Winning我读了很多遍,我觉得最有意思的反差是,尽管韦尔奇整个职业生涯都在GE渡过,...
在Spring Cloud生态系统中,Eureka、Gateway、Feign和Hystrix是四个核心组件,它们协同工作以构建出高可用、高性能的微服务架构。让我们深入探讨这些组件以及它们如何整合。 ...它是一个基于REST的服务,用于定位服务...