BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Jan Stenberg 关注 37 他的粉丝 ,译者 夏雪 关注 0 他的粉丝 发布于 2015年3月27日. 估计阅读时间: 2 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

领域驱动设计(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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT