📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 20, 2023 01:09 PM
Parent item
领域
该电子书通过实际案例的方式,介绍了在项目中如何使用DDD和CQRS实践整洁架构,并对一些常见反模式的设计提出了改进方法,最终完成一个用 Go 构建的面向业务的应用程序框架。
本书的想法是不要过多关注基础设施和实现细节,但我们需要有一些基础,以便以后可以在此基础上进行构建。在介绍具体的方法之前,需要先设计一个便于举例的模拟项目,本文就是介绍该模拟项目的框架和背景。
基础设施:使用GoogleCloud托管K8S集群
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 19, 2023 03:43 AM
Parent item
领域
几年前,我在一家 SaaS 公司工作,该公司可能遇到了所有可能的软件开发问题。代码非常复杂,添加简单的更改可能需要几个月的时间。项目的所有任务和范围均由项目经理单独定义。开发人员不明白他们要解决什么问题。如果不了解客户的期望,许多实现的功能都是无用的。开发团队也无法提出更好的解决方案。
尽管我们有微服务,但引入一项更改通常需要对大多数服务进行更改。该架构耦合如此紧密,以至于我们无法独立部署这些“微服务”。业务人员不明白为什么添加“一个按钮”可能需要两个月的时间。最终,利益相关者不再信任开发团队。我们都很沮丧。但情况并非毫无希望。
我很幸运能够对领域驱动设计有所了解。那时我还远远不是那个领域的专家。但我的知识足够扎实,可以帮助公司最大限度地减少甚至消除所提到的大部分问题。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 19, 2023 02:53 AM
Parent item
领域
这篇文章是测试架构的直接后续内容,我在其中为我们的示例项目引入了新类型的测试。
Wild Workouts 使用 Google Cloud Build 作为 CI/CD 平台。它以持续部署的方式进行配置,这意味着一旦管道通过,更改就会立即投入生产。如果你考虑一下我们目前的设置,你会发现它既勇敢又天真。我们没有在那里运行可以避免明显错误的测试(无论如何,不太明显的错误很少能被测试发现)。
在本章中,我将展示如何使用 docker-compose 在 Google Cloud Build 上运行集成测试、组件测试和端到端测试。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 19, 2023 01:33 AM
Parent item
领域
通过测试和代码审查,您可以使您的项目没有错误。是吗?嗯……实际上,可能不是。那太简单了。这些技术降低了出现错误的可能性,但不能完全消除它们。但这是否意味着我们需要忍受错误的风险直到生命的尽头?
一年多前,我在Harbor项目中发现了一个非常有趣的 PR。这是对允许普通用户创建管理员用户这个问题的修复。这显然是一个严重的安全问题。当然,自动化测试之前并没有发现这个bug。错误修复如下所示:
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 18, 2023 02:00 PM
Parent item
领域
您是否知道当您从头开始开发新应用程序,并可以通过适当的测试覆盖所有流程时的罕见感觉?
我说“罕见”是因为大多数时候,您将使用历史悠久、贡献者众多且测试方法不那么明显的软件。即使代码使用了好的模式,测试套件也并不总是遵循。
有些项目没有设置现代化的开发环境,因此只有易于测试的东西才进行单元测试。例如,他们单独测试单个功能,因为很难测试公共 API。团队需要手动验证所有更改,可能是在某种临时环境中。您知道当有人引入更改但不知道他们需要手动测试时会发生什么。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 18, 2023 05:46 AM
Parent item
领域
在前面的章节中,我们介绍了 DDD Lite、CQRS 和 Clean Architecture 等技术。即使单独使用它们是有益的,但它们一起使用效果最好。不幸的是,在实际项目中将它们一起使用并不容易。在本章中,我们将展示如何以最务实、最高效的方式连接 DDD Lite、CQRS 和 Clean Architecture。
我为什么要在乎?
从事编程项目类似于规划和建设住宅区。如果您知道该地区将在不久的将来扩张,您需要为未来的改进保留空间。即使一开始它可能看起来像是浪费空间。您应该为住宅区、医院和寺庙等未来设施留出空间。否则,您将被迫摧毁建筑物和街道,为新建筑物腾出空间。早点考虑一下会好得多。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 17, 2023 02:09 PM
Parent item
领域
虽然耦合似乎主要与跨多个团队的微服务相关,但我们发现松散耦合的架构对于团队内的工作同样有用。保持架构标准使并行工作成为可能,并有助于新团队成员的加入。
您可能听说过“低耦合、高内聚”的概念,但如何实现它却很少是显而易见的。好消息是,这是整洁架构的主要好处。该模式不仅是启动项目的绝佳方式,而且对重构设计不佳的应用程序时也很有帮助。
本章我重点讨论后者。我展示了真实应用程序的重构,因此应该清楚如何在项目中应用类似的更改。我们还注意到这种方法还有其他好处:
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 17, 2023 07:14 AM
Parent item
领域
您是否听说过一个项目,其中对您不喜欢的客户或无法盈利的国家/地区进行了测试?或者更糟糕的是——你从事过这样的项目吗?
仅仅说它不公平、不专业还不够。开发任何新东西也很困难,因为你害怕对代码库进行任何更改。
为了轻松、自信地开发应用程序,您需要进行一组多个级别的测试。在本章中,我将通过实际示例介绍如何实现高质量的数据库集成测试。我还将介绍基本的 Go 测试技术,例如测试表、断言函数、并行执行和黑盒测试。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 17, 2023 03:39 AM
Parent item
领域
我一生中见过很多复杂的代码。通常,这种复杂性的原因是应用程序逻辑与数据库逻辑相结合。将应用程序的逻辑与数据库逻辑保持在一起会使您的应用程序变得更加复杂,难以测试和维护。
已经有一个经过验证的简单模式可以解决这些问题。该模式允许您将应用程序逻辑与数据库逻辑分开。它使您可以使代码更简单,更容易添加新功能。作为奖励,您可以推迟选择数据库解决方案和模式的重要决策。这种方法的另一个好的副作用是开箱即用,不受数据库供应商锁定的影响。我想到的模式是Repository存储库。
当我回想起我使用过的应用程序时,我记得很难理解它们是如何工作的。我总是害怕在那里做出任何改变——你永远不知道它可能会产生什么意想不到的不良副作用。当应用程序逻辑与数据库实现混合在一起时,很难理解。这也是重复的来源。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 17, 2023 02:13 AM
Parent item
领域
现在开始重构Wild Workouts项目。第一条就是远离DRY原则,即“不要做重复的工作”不一定正确。
背景
Susan入职了这家Wild Workouts 初创公司。在顺利的招聘过程之后,她开始了在公司的第一天。团队中只有几位工程师,所以 Susan 的入职速度非常快。第一天,她就被分配了第一个任务,旨在让她熟悉该应用程序。我们需要存储每个用户的最后一个 IP 地址。它将在未来启用新的安全功能,例如从新位置登录时进行额外确认。现在,我们只想将其保留在数据库中。苏珊浏览了申请表一段时间。她试图了解每项服务中发生的情况以及在哪里添加新字段来存储 IP 地址。最后,她发现了一个可以扩展的 User1 结构。
📔
【关键词】整洁架构 DDD CQRS
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Oct 16, 2023 03:42 PM
Parent item
领域
当我开始在GO中工作时,社区并没有积极关注DDD(领域驱动设计)和整洁结构等技术。我多次听到:“不要在Golang做Java!”,“我已经在Java看到了,请不要!”。
这些时候,我已经在PHP和Python拥有将近10年的经验。我已经看到了太多的坏事了。我记得所有这些“八千”(具有8K+代码行的方法)和没有人想维护的应用程序。我正在检查这些丑陋的怪物的旧GIT历史,一开始它们都看上去无害。但是随着时间的流逝,小而无辜的问题开始变得更加重要,更严重。我还看到了DDD和整洁架构如何解决这些问题。
也许Golang与众不同?也许在Golang编使用微服务能解决这些问题吗?
更多