精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-03-18
youcai 写道 在domain model这样的设计中不存在实体类这样的东西,dto更加是一个极端的贫血domain model,有了dto倒是会导致并行是dto不够用,或多或少等问题,domain model相反这方面问题到少.
采用dto并不是不可,只是增加这一层,在一个没有remote call的情况下,带来的隔离变化等好处都很有限,相反编码量增加和dto增加更为可怕. 老兄DTO根本不属于DomainModel的一部分,何来贫血的DomainModel?赫赫。 youcai 写道 至于你举的几个例子,纯粹是设计思路不同,因为在我看来customer.getStatus()这样的设计一点问题都没有.哪怕这个status得来得更复杂也不会有影响,只不过在实现的时候随机应变罢了. 建议你去阅读一下DDD中有关职责层的划分。你现在这种思路是不可能开发出 灵活健壮的DomainModel的。 |
|
返回顶楼 | |
发表时间:2005-03-21
jackyz 写道 Quake Wang 写道 我按照前面的想法试验了透明的分布式lazy load, 确实是可以用的, 这个周末我把代码整理一下, 发上来以后继续讨论.
Excellent!!! 试验失败了, 原因在于Hibernate2不能支持对于Proxy/CGILib的对象进行持久化, 伪代码如下: 写一个Hibernate的Intercetpor实现: public class FroxyFactoryInterceptor extends Intercetpor { public Object instantiate(Class clazz, Serializable id); throws CallbackException { Object newEntity = getEntityFromProxyFactory(clazz);; setIdOnNewEntity(getSessionFactory();, clazz, id, newEntity);; } } newEntity是从Spring的ProxyFactory获得: <bean id="parent" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="singleton"><value>false</value></property> <property name="proxyInterfaces"><value>domain.Parent</value></property> <property name="interceptorNames"><value>remoteLazyLoadInterceptor,parentTarget</value></property> </bean> 然后实现这个RemoteLazyLoadInterceptor: public class RemoteLazyLoadInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation invocation); throws Throwable { if(isGetCollection(invocation); && isNotInstantiated(invocation););{ instantiate(invocation);; } return invocation.proceed();; } } 结果由于生成的对象是Proxy, 导致Hibernate无法读取对应的ClassPersister, 从Spring的网站上搜索到一篇帖子: http://forum.springframework.com/viewtopic.php?t=2489&highlight=enhancerbycglib 据说Hibernate3支持Proxy对象的持久化, 对于Hibernate3的这个新特性不熟悉, 暂时放弃这个试验了, |
|
返回顶楼 | |
发表时间:2005-03-21
Quake Wang 写道 试验失败了, 原因在于Hibernate2不能支持对于Proxy/CGILib的对象进行持久化...
残念~~. :idea: 辛苦了. |
|
返回顶楼 | |