热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术杂谈_领域驱动设计,这十个错误你犯了吗?|技术杂谈

篇首语:本文由编程笔记#小编为大家整理,主要介绍了领域驱动设计,这十个错误你犯了吗?|技术杂谈相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了领域驱动设计,这十个错误你犯了吗?|技术杂谈相关的知识,希望对你有一定的参考价值。



题图:《大圣归来》


Daniel Whittaker在最近的一篇帖子中表示:在进行领域驱动设计(DDD)时,缺乏与领域专家的互动是一种常见的错误,而如果能够尽早发现并解决这一问题,或许能够避免团队无谓的时间浪费。在这篇帖子中,Daniel共列举了十种他发现开发者经常会犯的错误。


01|让持久化或数据存储问题影响模型的设计。


通过使用战术模式,例如聚合根,能够简化模型,并将相关概念与对基础设施的关注面相互分离,例如数据存储等等。如果在没有经过与领域专家进行交流的前提下贸然开始数据架构或数据模型的设计,可能会导致所创建的代码是基于某个关系型模型,而不是基于某个领域模型的。而在类似话题上,Stefan Tilkov也在先前的一篇文章中对于在企业中使用标准化数据模型的方式提出了警告,这种方式可能会导致模型中充满了可选的特性以及奇怪的行为。


02|缺乏与领域专家的交流。


DDD的核心实践之一就在于通过与领域专家进行交谈,从而以他们的角度对于问题领域进行理解。而行为驱动开发(BDD)实践则强调与领域专家通过对话的方式创建行为的实例。对此,Konstantin Kudryashov曾专门写过一篇如何将BDD与DDD实践相结合的文章。


03|忽视领域专家的语言。


DDD的另一个核心实践在于创建一套通用语言,并与领域专家共享。这套通用语言必须使用在讨论过程中,同样也必须反映在代码中,例如类与方法的名称。


04|没有鉴别出边界上下文。


解决复杂问题的常见方式是将其分解为多个小问题。而边界上下文就是为了将一个大的领域分解为多个小的子领域而出现的,每个边界上下文将负责处理领域中的一个内聚的功能。这一点同样也是微服务的核心概念,在今年的DDD Exchange大会的主题演讲中,Eric Evans专门对此展开了讨论。


05|使用贫血模型。


这是一个说明团队并没有正确地使用DDD的信号,也暗示着建模过程的失败。一个贫血模型第一眼看上去与真正的领域模型非常相像,例如它们同样使用了正确的名称。但问题在于贫血模型中的类几乎丢失了所有的行为,而变成了只包含单纯的getter与setter属性的容器。


Whittaker所认识到的另外五种常见的错误在于:


06|没有让边界上下文随着对领域的见解加深而相应地作出改变。


07|将所有逻辑都设想为领域逻辑。


08|过度使用集成测试。


09|将安全性视为领域的一部分(除非你本身设计的就是一种安全性领域)


10|过度关注基础设施。


Whittaker最提到的最后一个错误则是忽视了事件风暴的作用,这是由Alberto Brandolini所创建的一种专注于事件的设计过程。Brandolini的想法是,通过将所有的项目干系人都集中在一个房间内,为他们提供无限的空间进行建模工作,并让他们用贴纸的方式写出所有的领域事件。这种方式在几个小时之内就能够为某个问题领域创建出一套非常出色的模型。





版权归属InfoQ,禁止私自抄袭转载。


回复关键词React | 架构师 | 运维 | 云 | 开源 | 物联网 | Kubernetes | 架构 | 人工智能 | Kafka | Docker | Netty | CoreOS | QCon | Github | Swift | 敏捷 | 语言 | 程序员















有话想说?!戳“写评论”

推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
author-avatar
严气
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有