论坛首页 Java企业应用论坛

炒PO-VO-DTO的冷饭,Remote下PO的运用方式问题

浏览 25358 次
精华帖 (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的。
0 请登录后投票
   发表时间: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的这个新特性不熟悉, 暂时放弃这个试验了,
0 请登录后投票
   发表时间:2005-03-21  
Quake Wang 写道
试验失败了, 原因在于Hibernate2不能支持对于Proxy/CGILib的对象进行持久化...


残念~~.

:idea: 辛苦了.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics