由于一前一后(Architecture: simple CQS)的结果,我一直在想,我怎么能建立一个简单的系统,该系统可以灵活地后来扩展。换句话说:我现在看不到需要成熟的CQRS,但是如果需要的话,我希望以后能够很容易地演化成它。建筑问题
所以我就想来分隔查询命令,但都基于相同的数据库上。
查询部分很简单:基于视图的WCF数据服务很容易查询数据。没有什么特别的。
命令部分是更困难的事情,这里有一个想法:命令当然是以异步方式执行的,所以它们不会返回结果。但是,我的ASP.NET MVC站点的控制器通常需要来自命令的反馈(例如,如果成员的注册成功与否)。所以如果控制器发送一个命令,它也会生成一个与命令属性一起传递的事务ID(一个guid)。命令服务接收到该命令,将其放入状态为“处理”的数据库中的事务表中,并执行(使用DDD原则)。执行后,事务表被更新,以便状态变为“完成”或“失败”,以及其他更详细的信息,例如生成的主键。
与此同时,该网站正在使用QueryService来查询此事务的状态,直到它收到“已完成”或“失败”,然后它可以基于此结果继续其工作。如果事务表被轮询并且结果“完成”或“失败”,则该条目被删除。
副作用是我不需要guid作为我的实体的键,这对性能和大小来说是件好事。
在大多数情况下,可能不需要此轮询机制,但如果需要的话是可能的。接口的设计考虑到CQS,所以对未来开放。
你认为在这种方法的任何缺陷的?其他想法或建议?
谢谢!
路德
为什么要通过WCF数据服务来分离前端?是否有特定的原因,因为我会尽可能简单地保持我的解决方案。 – thekip
+1不参加WCF。 Fowler的第一个分布式对象设计法:不要分发你的对象(来自PoEAA) – Deleted
+1 - 同意@Chris Smith –