关于jdon的DCI的一点不同建议

12-03-11 flyzb
  这一年很忙,很久没有发帖了。我看了jdonframework6.5中DCI的设计方式,感觉有一些别扭的地方,希望与bang一起探讨。

  目前jf6.5中的DCI使用模式如下:

@[author]Model[/author]
public class User[author]Model[/author] {

	private String userId;
	private String name;
	[b]@Inject
	public ComputerRole computerRole;[/b]
        ...
<p>

  以上模式让我感觉有些奇怪,因为一个对象是会有很多角色的。在复杂的业务场景中,这样会使对象中的角色变得臃肿不堪。从对DCI的本身来看,我认为应该是场景赋予对象以角色,那么这样在场景还没出现的情况下就让对象拥有角色的做法也是不适当的。

@[author]Model[/author]
public class ComputeContext {

	private DomainMessage ageAsyncResult;

	public void preloadData(User[author]Model[/author] user) {
		if (ageAsyncResult == null)
			[b]ageAsyncResult = user.computerRole.computeCount(user)[/b];
	}
<p>

  以上user.computerRole.computeCount(user)的写法在我看来也是有问题的。既然场景赋予对象以角色,那么正确的写法应该是

ageAsyncResult = computerRole(user).computeCount();
<p>

  建议JF在computerRole(user)中可以自动实现注入,就不需要写类似@Inject public ComputerRole computerRole的代码了。

  以上是我对JF中的DCI提出的一些建议,希望大家一起讨论。

[该贴被flyzb于2012-03-11 12:48修改过]

banq
2012-03-11 15:51
多谢建议,你看到的是一种Domain Events实现,不是DCI,DCI实现可见这个文档的PPT中具体DCI章节:JdonFramework.PPT

还有一篇文章谈Jdon的DDD和DCI的文章:机器人DCI案例

Jdon的DCI是一种探索,特别是结合事件的DCI是我个人的一个莽举,可能存在很多问题,特别是Java语言本身带来的,DCI在Scala等functional语言中会更好实现。

[该贴被banq于2012-03-11 15:53修改过]

[该贴被banq于2012-03-11 15:54修改过]

猜你喜欢