热门标签 | 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 | 敏捷 | 语言 | 程序员















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

推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 从用户转型为开发者:一场思维升级的旅程 | 专访 StarRocks Committer 周威
    从用户转变为开发者,不仅是一次角色的转换,更是一场深刻的思维升级之旅。本次专访中,StarRocks Committer 周威分享了他如何在这一过程中逐步提升技术能力与思维方式,为开源社区贡献自己的力量。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 本文深入探讨了 Git 与 SVN 的高效使用技巧,旨在帮助开发者轻松应对版本控制中的各种挑战。通过详细解析两种工具的核心功能与最佳实践,读者将能够更好地掌握版本管理的精髓,提高开发效率。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • 经过半年的精心整理,我们汇总了当前市场上最全面的Android面试题解析,为移动开发人员的晋升和加薪提供了宝贵的参考资料。本书详细涵盖了从基础到高级的各类面试题,帮助读者全面提升技术实力和面试表现。章节目录包括:- 第一章:Android基础面试题- 第二章:... ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 本文精选了几个结合 Vue 和 Spring Boot 的优质开源项目,适合开发者学习和参考。这些项目不仅涵盖了前后端分离的最佳实践,还提供了丰富的功能示例和详细的文档,有助于提升开发效率和技术水平。项目地址:https://github.com/ 示例链接。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
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社区 版权所有