Spring 3下如何实现DCI, Domain Events?

11-11-07 lshoo
已有的项目已经使用了Spring3 + Spring MVC + JPA2的架构,在此架构下,如何实现DCI和Domain Events?

请老师指点,或者能把jdon和spring3结合到一齐吗?如何整合?

1
banq
2011-11-08 09:48
2011年11月07日 22:46 "@lshoo"的内容
能把jdon和spring3结合到一齐吗?如何整合 ...

DCI可以用Spring的Aspectj实现,Domain Events估计不行,结合Jdon + Spring实现倒是一个好思路,原来我没有考虑过,可以在下个版本尝试一下,如果你有实践的好方法,也谢谢提供以下。

lshoo
2011-11-08 10:04
我google了一下,Axon可以实现Domain Events,而且能和Spring集成.

DCI用scala如何实现?

Spring现在是一个平台,很多应用都有,而且是公司层面决定的,最好能把jdon的优点集成到spring3中.

banq
2011-11-08 10:28
2011年11月08日 10:04 "@lshoo"的内容
能把jdon的优点集成到spring3 ...

我初步想了一下,两者现在就可以结合,只是各用各的Annotation元注解就可以了。然后把com.jdon.controller.AppUtil作为一个普通Bean配置在Spring中即可,通过AppUtil从外部调用Jdon框架管理的一些功能。

[该贴被banq于2011-11-08 10:58修改过]

lshoo
2011-11-08 14:31
在看Axon的Reference,上面有提到:

The Axon Framework makes a distinction between three types of events,Domain Events, Application Events and System Events.

banq
2011-11-08 14:55
2011年11月08日 14:31 "@lshoo"的内容
在看Axon的Reference,上面有提到 ...

Jdon框架与Axon区别是:JdonFramework是基于DDD领域驱动设计的,也就是DDD + DCI + Domain Events,不是一个纯Events框架,看看这个案例:

DDD DCI和领域事件:http://www.jdon.com/jdonframework/dci.html

[该贴被banq于2011-11-08 14:55修改过]

lshoo
2011-11-08 15:04
2011年11月08日 14:55 "@banq"的内容

Jdon框架与Axon区别是:JdonFramework是基于DDD领域驱动设计的,也就是DDD + DCI + Domain Events,不是一个纯Events框架 ...

Axon是基于DDD的, 支持Event sourcing, CQRS, Domain Events,关键是能和Spring集成.

老大能否出个jdon + spring集成的sample,最好再说上两句.谢谢!

[该贴被lshoo于2011-11-08 15:37修改过]

banq
2011-11-08 18:57
2011年11月08日 15:04 "@lshoo"的内容
老大能否出个jdon + spring集成的sample,最好再说上两句 ...

只要是基于JDK直接开发的,都支持Spring。Jdon框架只要通过一个静态类WebAppUtil就可以访问,在SpringMVC的Rest Controller中直接调用:

@Controller
@RequestMapping(value = "/contact")
public class UserController {

        //关键需要声明一个ServletContext 供WebAppUtil使用
	@Autowired   
	ServletContext context;

	@Autowired
	private SimpleJdbc simpleJdbc;

	@RequestMapping(method = RequestMethod.GET)
	public String list(Model model) {
		model.addAttribute("contacts", simpleJdbc.getUsers());
		return "contact/listContacts";
	}

	@RequestMapping(value = "/new", method = RequestMethod.GET)
	public String newForm() {
		return "contact/createContact";
	}

	@RequestMapping(value = "/new", method = RequestMethod.POST)
	public String newFormSave(@Valid UserModel user, BindingResult result) {
		if (result.hasErrors()) {
			return "contact/createContact";
		}
		user.setUserId(Integer.toString(user.hashCode()));
               //从Jdon框架中获得DCI的角色分配器
		RoleAssigner roleAssigner = (RoleAssigner) WebAppUtil.getComponentInstance("roleAssigner", context);
		RepositoryManagerIF rm = (RepositoryManagerIF) roleAssigner.assign(user, new RepositoryManagerEventImp());
		rm.remember(user);
		return ("contact/contactCreated");
	}
<p>

SpringMVC3 + Jdon完整源码见:

http://code.google.com/p/jivejdon/downloads/detail?name=SpringMVC%2BJdon.zip&can=2&q=makechanges

lshoo
2011-11-08 22:47
在看jdon的文档和做点实验.

jdon不支持maven吗?

banq
2011-11-11 15:00
2011年11月08日 18:57 "@banq"的内容
在SpringMVC的REST Controller中直接调用: ...

只要在Spring中增加一个启动类,在Spring启动时,把Jdon和Spring互相依赖的组件注射一下就可以无缝混合在一起使用:

@Autowired

private SimpleJdbc simpleJdbc;

@Autowired //需要Jdon框架的RoleAssigner

private RoleAssigner roleAssigner;

至此,在JdonFramework 6.5.1 可以在Spring中使用,Jdon也能使用Spring的资源,比如JdbcTemp:

@Consumer("saveUser") // 这是 Jdon框架

public class UserSaveListener implements DomainEventHandler {

  @Autowired //这是Spring框架

  private UserRepository simpleJdbc;

这个启动类见:http://www.jdon.com/jdonframework/spring.html

lshoo
2011-11-11 22:24
试下先,jdon不支持Maven是个遗憾。

banq
2011-11-12 09:04
2011年11月11日 22:24 "@lshoo"的内容
jdon不支持Maven ...

如果说这世界上还有Maven的反对者,我就是那么一个,Maven是复杂化java的罪魁祸首,不可否认Maven在团队协作中重要作用,但是对于崇尚轻量简单的Jdon框架来说,没有必要,两个原因:

1.Jdon框架对所依赖包都有重写和要求,开源项目升级没有几个是考虑向后兼容的,为保证Jdon框架的稳定性只能固定相应的包。

2.一次性下载开发的依赖环境即可,不必象拉稀一样。初学者可能在等待拉稀过程中离场。

[该贴被admin于2011-11-12 09:17修改过]

lshoo
2011-11-12 10:49
2011年11月12日 09:04 "@banq"的内容
1.Jdon框架对所依赖包都有重写和要求,开源项目升级没有几个是考虑向后兼容的,为保证Jdon框架的稳定性只能固定相应的包。

...

这是一个问题,举例来说,aopalliance.jar都是spring和jdon所依赖的,难道Spring中的aopalliance.jar和jdon中的aopalliance.jar要重复导入?如果选一个,另一个都有可能有问题啊.

banq
2011-11-12 11:06
2011年11月12日 10:49 "@lshoo"的内容
aopalliance.jar都是spring和jdon所依赖的,难道Spring中的AOPalliance.jar和jdon中的AOPalliance.jar要重复导入?如果选一个,另一个都有可能有问题啊 ...

道理是这样,但是具体到AOPalliance.jar不会,因为它是一个空接口包。

所幸的是Jdon和Spring不存在这样冲突,否则就无法在一起使用了。比如Jdon依赖的是picoContainer 1.1包或Disruptor 2.0包,如果你的其他应用依赖于picoContainer 1.3和Disruptor 2.5,而他们没有做到象Windows或JDK那样向后兼容,你如果使用Maven,你就完蛋了,当然,在公司内部相对可控的边界内,都是没有问题的。

[该贴被banq于2011-11-12 11:12修改过]

lshoo
2011-11-12 22:24
用sts构造的springmvc,整合jdon好痛苦,把jdon的jar放到lib里,每次保存文件都会重新布署,自动清空lib里的jar,而且只更新maven中的jar,有什么好办法保留lib中的jdon包不被清空?

猜你喜欢