请教实体的set/get方法问题

11-02-17 oiunt
按照DDD的思想, 实体是不应直接暴露set/get方法,而应该是暴露有实际含义的操作。

但是实体之间以及实体与DTO难免存在拷贝的问题,一般会采用一些拷贝的工具类来实现,那么这里问题就出现了,如果实体不暴露set/get方法,那么拷贝的工具类是无法执行的。另外,对于hibernate这种ORM工具来说,也是需要实体具有set/get方法。

对于以上问题,不知道各位道友是如何处理的?谢谢。

1
SpeedVan
2011-02-17 13:48
这个和语言有关,Object和Entity是不同的,所以没办法,set和get都在语言层的话,你就没有这样的感觉了。而且getter可以理解为“望闻问切”,所以“知道了”。而setter是实体的“状态迁移”,你set入去的是下一个关注的状态,如你在玩玩偶,你调整玩偶的姿势就是set,这样的话都可以理解为,所有实体都被外界一条不为人知的线操纵着。

oiunt
2011-02-17 13:54
to SpeedVan.

请问这位道友是如何处理的呢?还是需要给实体都设置set/get方法吧,那么如何控制这些set/get不被调用呢?

SpeedVan
2011-02-17 14:02
setter和getter是必须有的,至于不想被丢用,又想给ORM使用的话,用接口就可以了,接口中除想要的方法外,其他都不写。

oiunt
2011-02-17 17:38
O,这是一种解决方法,谢谢了!

oojdon
2011-02-17 21:38
Hibernate没有强制说必须写get set的吧,应该是显示的时候必须要用get set.

一个实体用get set用来显示,导致把显示逻辑导入实体,持久需要get set就对应数据库,这也许不是DDD的意思。

楼主可以看下DDD sample的例子,那些Domain是没有get set的。

我认为写get set为了持久的的那个Object只是真正Domain需要持久的那部分,同理,写get set为了显示的的那部分构成的Object也是Domain用于显示的那部分,Domain是主角,它应该不知道显示和持久要做些什么。

猜你喜欢