• 当我们开始编写软件时,我们总是希望有一个好的设计。我们阅读书籍,运用最佳实践,最后,我们常常一团糟。根据我在一家定制软件开发公司的经验,我每天必须处理此类代码,尤其是在某些旧系统上工作时。造成这种情况的原因多种多样,我将尝试在一系列文章中以一些实际的方式来探讨其中的一些原因。在我的第
  • 本章试图说明据我所知,面向数据编程的核心原理是什么。这在很大程度上取决于我在Clojure的编程经验,但是我认为这些原则与语言无关。可以使用Java或C#等面向对象(OO)语言来遵守它们,而可以使用Ocaml,Haskell,JavaScript(甚至使用Clojure)之类的功能编
  • 存储库和DAO的实现被认为是可互换的,尤其是在以数据为中心的应用程序中。这引起了他们之间差异的困惑。在本文中,我们将讨论DAO和存储库模式之间的区别。 DAO模式数据访问对象模式(也称为 icon
  • 文中的想法最适用于实现(复杂)业务规则、状态转换并将其数据保存到某个数据库的后端应用程序。复杂的逻辑应该在您可以完全控制内部域模型的数据结构上实现,您可以根据问题对其进行定制以简化代码。这是本文中使用的术语定义的(自以为是的)列表: 领域= 要保留应用程序逻辑 icon
  • 对象更多是关于行为还是数据?从外部看,数据是隐藏的,行为是公开的。我们看到投入转化为产出。但看不到任何倍隔离的数据;我们也不知道这些数据的存储位置或存储方式。数据库表更多是关于行为或数据信息?它们是简单的数据结构。从外部看,数据是暴露的,没有任何行为,无论可见或隐含的行为。对 icon
  • 很多人将数据表之间的关系图或者将类的静态结构关系作为聚合模型的设计依据,这是片面的。这属于一种简单模型,复杂聚合模型是应该考虑这些结构中部件的交互关系的。mathiasverraes这篇文章主要谈论这点:所有模型都是错误的,但是简单模型比复杂模型更错误。简单的模型更具吸引力,更易于教 icon
  • 这是一个实用指南:结合DDD和OOP展示如何通过封装构建意图暴露一个类的API?这篇博文中的所有代码都可以在这里找到。对我 icon
  • 商业软件的最大问题之一是技术架构比领域模型获得的提升会更多。大多数领域模型都是普通的,并且可以由学校学生以比通常花费很少的成本来实现;然而,通常支持模型的软件架构,通常是过度设计的。一个常见的吹嘘是这样的:“该架构每秒可以处理 10,000,000 多条消息!” 但架构师无法证明这一 icon
  • 实体、值对象、DTO或VO、record之类基本都是只有getXX/setXX的对象(record除外),当DDD领域设计为这些对象赋予业务行为以后,这些业务行为会与技术环境如Srping管理的bean相互交互,在Clean架构中实现为适配器或端口,但是具体如何在Java中落地?另外 icon
  • 可用于生产的 Java 16 通用可用性 (GA) 版本已经发布了,Java 16 中有一些可用的新特性,我们现在就来看看。 Record记录记录声明一种数据类,这种类在 ORM 框架中被定义为数据传输对象 (DTO) 或实体。 icon
  • 本文将教您如何使用 Spring Boot 构建 modulith 并使用 Spring Modulith 项目功能。Modulith 是一种软件架构模式,假设将您的整体应用程序组织成逻辑模块。此类模块应尽可能相互独立。 Modulith 平衡整体 icon
  • 当我开始阅读Robert Martin的Clean Code。我正在尝试将他的所有示例“翻译”成Python,因此我可以更好地理解它们,请看以下内容: 书中的Java原始代码: icon
  • Setter方法违反了不变性并添加了意外耦合!重构步骤:找到 setter 的用法如果您正在设置基本属性,请将它们移动到构造函数并删除该方法如果你需要改变一个偶然的属性,它不是一个 setter。删除 setXXX 前缀< icon
  • Java 程序员是否应该放弃属性setter方法,并对其领域对象进行不可变的建模?Java首席语言架构师Brian Goetz认为:“问题中隐含的非此即彼,这会 icon
  • 贫血领域模型是一个没有任何行为、只有数据属性的领域模型。 缺血(贫血、失血)领域模型在简单的应用程序中工作得很好,但如果您有丰富的业务逻辑,它们就很难维护和发展。业务逻辑和规则的重要部分最终分散在整个应用程序中。它降低了内聚性和可重用性,并 icon
  • Jeremy Carter 的文章《思考 Actor:第 1 部分》讨论了 Actor 模型作为管理现代软件应用程序(尤其是分布式系统)状态的框架。以下是主要要点的总结: 每个软件开发人员可能都接触过某种分层架构。我们倾向于将组件分类为最适合的层, icon
  • ORM 以及保存数据的方式可以显着影响您的设计并导致胖域模型。 数据很重要,但捕获数据的方式可能会引导您走上一条需要意识到您所做的妥协的道路。 我将展示一个示例,说明并非所有数据都是平等创建的。 icon
  • 这篇对话主要讨论了六边形架构以及它与MVC、SOA架构的区别,特别是关于领域模型和业务逻辑的处理方式。以下是对话的大白话整理:背景:对话者正在研究六边形架构,之前有MVC和SOA架构的经验。在SOA架构中,通常会使用“贫血模型”(POJOs),即领域对象(如Cart)只是简单 icon