InfoQ:如果一个DDD尝试者打算使用DDD以帮助改善他们的产品,你建议他们先从什么概念开始呢? 首先使用上下文映射及子领域来诊断出问题的范围,并且将核心领域设计为一个新的边界上下文,这种方式非常有价值。你会发现领域事件及聚合会在战术设计中扮演关键性的角色。如果可能,尽量偏向于使用值对象(Value Object)而不是实体(Entity)。只要你能选择实现不可变性(immutability)及无副作用(side-effect-free)的功能,你就有可能避免很多问题。 你可以阅读这本书的示例,以观察如何使用各种策略及战术建模技术,示例包含了Java及C#代码:
InfoQ:有许多相关的概念在当前的主流软件开发技术中获得了良好的发展势头:如DDD,事件溯源(Event Sourcing),NoSQL及函数式编程等等。DDD看起来与这些概念合作良好,你认为这种势头会带领我们走向何方呢? DDD方法的原则可以在很长一段时间内得到应用,并与各种技术、模式、方式及习惯良好合作。我对这个问题的简单回答是:DDD会在可见的未来依然得到使用,在我看来事件溯源以及NoSQL就是明证。在函数式编程中使用DDD的经验也在增加,而且很可能会继续加强,使得函数式编程真正得到广泛应用。 有一个你没提到的架构模式是角色模型(Actor Model),我个人现在就在为推广在DDD中使用角色模型这一方式提供一些经验并打造一些工具。在函数式编程环境中,这种方式可能被称为代理人模型(Agent Model)而非角色模型,不过两者都强调了消息传递和非阻塞式并发,因此可以达到高度分布式。通过这种重要的方式,我们就可以靠增加CPU核的数量获得更多的计算能力,虽然这种核的处理速度是弱于单机处理器的。角色模型的基本概念极大的简化了我们理解并应用并发和分布式的难度。 如果你打算尝试一下角色模型,你可以在这里找到我的实验项目。 你也可以尝试一个完整的角色模型系统,是面向Scala或Java的Akka项目。如果你在.NET平台上进行开发,你也可以尝试微软的ActorFX。
|