JiveJdon Community Forums
在线135人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 8 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
yananay

发表文章: 54
注册时间: 2005年02月23日 22:15
我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月03日 01:26 回复
2005年看过banq发过的关于DDD方面的文章,感到不可理解。
2007年忽然明白了那些文章的意义,感慨原来差距是这么大。。。。。。

顺便问一个问题,就是
DDD 中的 实体,值对象,服务,对应于四色模型中的哪三个部分?
(那本DDD的书还没邮到,实在忍不住只好先问问)
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
回复:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月03日 15:40 回复
多谢,持续不断学习与应用才是最重要的。

关于DDD和四色模型因为都是对同一种事物进行辨识的不同方法,必然存在同一个事物在DDD和四色原型中有不同的表示方法,只是表达方式不一样,实际是表达的同一个概念。

如果这两个方法都掌握了,自然感觉到类似部分,但是它们不是必然对应的。
yananay

发表文章: 54
注册时间: 2005年02月23日 22:15
re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月03日 22:51 回复
暂时删除...
[该贴被yananay于2007年07月05日 10:59修改过]
yananay

发表文章: 54
注册时间: 2005年02月23日 22:15
re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月04日 13:01 回复
banq, 附件里是我的一些想法,可以看看吗?
谢谢
xyz.zip
src.zip

banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
回复:re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月05日 11:41 回复
很不错的案例和心得:

正如你文中引用的obert C. Martin 的一句话:
数据库是实现细节!应该尽可能地推迟考虑数据库。有太多的应用程序之所以和数据库绑定在一起而无法分离,就是因为一开始就把数据库考虑在内了。请记住抽象的定义:本质的部分放大,无关紧要部分的去除。在项目的当前阶段数据库就是无关紧要的;它只不过是一项用来存储和访问数据的技术而已。

我非常同意你通过这个案例试图说明:

优先设计业务层,将数据库层放在后边设计,并不是十分难的,恰恰相反,这种方式对于业务的理解,更加有好处。
对于持久层的设计,无论是采用JDBC,Ibatis,或者Hibernate,总可以找到一个合适的模式来将业务层与之匹配在一起。其实大部分情况是我们一定会知道预先使用什么持久方式,所以,预先设计出一个结合业务与持久的模式,也是必要的方法。

数据库仅仅是持久层的一种解决方案,即使它是目前最广泛使用的持久方案。但是,在设计我们的业务的时候,不要着急去考虑如何创建数据库,先把我们的业务逻辑设计清楚,然后再去考虑哪些类需要持久,才是正确的途径。

我认为在复杂软件系统种,业务逻辑的分析和认识需要排除任何技术细节,不断推入细化,这才是软件系统实现中最关键也是最难的。

yananay

发表文章: 54
注册时间: 2005年02月23日 22:15
re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月05日 22:21 回复
我想知道我实现那种lazyload 方式正确吗。。。?
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
回复:re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月06日 10:21 回复
下面这段代码是有些问题,如果按照orderList 来决定是否加载就不行了。

public List getAllExistsOrders(User user) {
String userId = user.getUserId();
//constructed by sql: select * from orders where user_id= user.userId
//the object in the list will be Order.java
List orderList = null;
if(orderList != null) {
for(int i = 0, m = orderList.size(); i < m; i++) {
Order order = (Order) orderList.get(i);
//constructed by sql: select * from order_items where
//order_id=order.order_id
//the object in the list will be OrderItem.java
List orderItemList = null;
order.setOrderItemList(orderItemList);
}
}
return orderList;
}
yananay

发表文章: 54
注册时间: 2005年02月23日 22:15
re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月06日 23:05 回复
banq , 你贴的那个代码是非lazyload持久层实现的代码... ...
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
回复:re:我现在真的很佩服banq,顺便问一个问题 发表: 2007年07月08日 16:51 回复
只看文档,源码没看,你把lazy-load代码贴上来看看。

櫴加载目前我知道有三种解决方式:
1. 2001年得Jive2.5中,在实体对象中设置一个boolean标致load是否执行。
2. Hibernate等框架使用动态代理,只有在使用访问时才通过动态代理load
3. 前面两种都符合DDD,这一种解决方式不是在实体内解决,而是外借服务等操作来进行,我在JiveJdon3中是这么做得。
不知你采取哪种,或者有更好得方式。


[该贴被banq于2007年07月08日 17:11修改过]
这个主题有 8 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam