写点什么

避免标准数据模型

2015 年 4 月 14 日

将企业软件中进行数据交换的业务对象,例如客户、订单或产品等常规模型进行标准化,让它们包含所有属性与关联信息,这种做法看上去似乎是一种吸引人的目标,但在 Stefan Tilkov 看来,这种方式将产生标准数据模型(Canonical Data Model - CDM),这是一种十分糟糕的做法,他强烈建议不要这么做

Tilkov 是 innoQ 的联合创造人兼首席顾问,在他多年的经验中,无数次地看到各个软件组织是怎样基于错误的假设而进行工作的。他同时表示, 他所定义的 CDM 这种模型会使得组织必须进行大量的会议、并且需要所有相关人员参与协作。通常来说,这种方式所产生的模型中包含了大量的可选属性,以及为了满足所有系统对该模型的不同需求和制约而编写的各种奇怪行为。

为了避免产生这种模型,Tilkov 推荐的方式是使用边界上下文,这个概念来自于领域驱动设计(DDD)。它是想法是将一个巨大的模型划分为多个小的上下文,因此在不同上下文中的业务对象可以根据每个上下文的不同需求,采取不同的建模方式。他同时强调,这一点不仅对于大型系统来说非常重要,对于企业范围的架构来说更是至关紧要,因为每个系统都具有不同的需求,应当根据各自的需求不同进行相应的设计。

对于那些仍然以 CDM 为目标的组织,Tilkov 提供了一些指南,以应对各种可能出现的问题:

  • 允许在系统中使用独立的特定模型,可以由不同的团队定义模型中的不同部分。
  • 对模型格式进行标准化,并创建结构小于业务对象的构建块,而不是一个巨大的、一致的模型,因此多个团队可以按照他们的需求共同添加这些构建块。
  • 不要将模型强行推给团队,如果团队认为在他们的上下文中使用这个模型能够带来某些价值,让团队自己选择将该模型引入。

在 Tilkov 看来,企业架构师应当避免集中式的模型与 CDM,而应当尽量将整体性的内容减至最低,将大部分职责交给团队本身及团队中的成员。

在 2008 年,Bill Poole 在一篇文章中从 SOA 的角度对集中式非集中式模型进行了对比。在他看来,集中式的模型中存在着许多缺点,从他的自身经验来看,他更倾向于使用非集中式的模型,这一观点也引起了人们的一些争议

查看英文原文: Avoid a Canonical Data Model

2015 年 4 月 14 日 08:561490
用户头像

发布了 428 篇内容, 共 149.3 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

通过女朋友来通俗易懂讲解“接口回调”,一不小心就被绿

小松漫步

Java 编程 接口 代码

面向对象设计原则----依赖倒置原则(DIP)

张荣召

面向对象设计原则----接口分离原则(ISP)

张荣召

第二周

scorpion

第二周 框架学习-作业

刘希文

架构师训练营第二周学习总结

张荣召

基于 iOS14 系统的游戏卡顿问题解决方案

白开水

typescript 游戏开发 iOS14 游戏卡顿 ios开发

区块链交易所系统开发源码,交易所搭建app

WX13823153201

第二周

等燕归

优化Banner广告收入的7种策略

易观大数据

使用Spring Cloud Stream玩转RabbitMQ,RocketMQ和Kafka

Barry的异想世界

kafka RocketMQ RabbitMQ 消息队列 spring cloud stream

作业-2020-09-27

芝麻酱

第二周总结

等燕归

2.框架设计-依赖倒置原则,接口隔离原则

博古通今小虾米

架构训练营-week2-作业

于成龙

作业 架构训练营

面向对象设计原则----单一职责原则(SRP)

张荣召

架构师训练营第二周学习总结

成长者

极客大学架构师训练营

架构师训练营-第二周作业

一个节点

极客大学架构师训练营

家谱链-家谱族谱制作

WX13823153201

揭秘开源项目 Apache Pulsar 如何挑战 Kafka

Apache Pulsar

kafka 开源 云原生 Apache Pulsar 消息中间件

依赖倒置原则和接口隔离原则练习

知行合一

看动画学算法之:排序-基数排序

程序那些事

算法 数据结构和算法 看动画学算法 算法和数据结构

面向对象设计原则----里氏替换原则(LSP)

张荣召

架构师训练营第二周作业

文智

极客大学架构师训练营

面向对象设计原则--开放关闭原则(OCP)

张荣召

graylog日志分析系统上手教程

MySQL从删库到跑路

Apache Linux 运维 日志分析 实时 Web 日志分析器

案例分析--反应式编程框架Flower的设计

张荣召

TensorFlow 篇 | TensorFlow 2.x 基于 Keras 的多节点分布式训练

Alex

tensorflow keras 分布式训练 AllReduce

架构师训练营 - 第二周总结

一个节点

极客大学架构师训练营

用家谱链记录家族信息

WX13823153201

编程语言的本质

张荣召

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

避免标准数据模型-InfoQ