转载

以传统应用示例明确领域驱动设计的用法

领域驱动设计 (DDD)是一种软件构建方法,它强调多角色之间的协作,包括领域专家、开发人员和为满足业务目标而涉及到的其他角色,Naresh Bhatia以Bullsfirst为例解释了DDD基础概念的引进,这个例子取自财务传统领域中一个具有中等复杂度的系统,他希望这个例子能够易于大家的理解。

Bhatia参与了这个示例,他是一名软件架构师和和 Archfirst 的创始人,他学习DDD基础时提取出了他认为最重要的概念。

一门 统一的语言 是大家对领域形成共识的关键。在领域专家和开发人员交流时,使用公共术语可以尽可能地降低误解的风险,避免开发人员以编码术语来描述一个领域。

边界上下文 是一种将大领域划小的方式,以业务视角把不同的关注点分隔到它们所属的上下文中。Bhatia说,一个模型应该足够的小,小到可以由一个团队来负责。

领域模型 中除了这些最常见的概念(比如实体和价值对象)之外,Bhatia还总结了一些他觉得很重要的其他概念。

  • 一项与领域概念相关的 领域服务 ,通常一些业务逻辑运行于一组对象之上,因此并非单一实体的自然构成部分。通常领域服务是无状态的。Bhatia的示例中有个 MatchingEngine 的例子,包含的业务逻辑是匹配订单并执行交易。
  • 领域事件 代表领域内会发生的一些重要的事情,只共享这些事件可以解除组件间的耦合。
  • 聚合 用来把相关的对象归为一组,一起充当一个单元。一个对象作为根,它是聚合成员唯一对外的用户,外界只能调用它的方法,这样就有效地隐藏了所有其他对象。早些时候Vaughn Vernon就已经详细阐述过聚合了。

Bullsfirst 是Bhatia用作示例的系统,它是一个包含有RESTful API(遵循 REST Maturity Level 2 )使证券交易更简单的开源项目,是一个负责订单匹配和执行的交易所,是一个负责创建订单的订单管理系统。采用的技术包括有Java、.NET、FIX、messaging 和 Web Services。相关代码可 点此下载 。

查看英文原文: Clarifying Domain-Driven Design Using a Trading Application Example

正文到此结束
Loading...