2022年4月23日
Spring Data 使用标准发布域事件ApplicationEventPublisher。这意味着我们也可以使用标准的 Spring 方式处理事件,@EventListener所以让我们先来看看。 处理事件@EventListener 使用的域事件处理程序(我有时也使用术语域事件侦听器 - 它们的意思相同)@Even……
阅读全文
2022年4月23日
如果您使用的是除 Hibernate 之外的其他 JPA 实现,则必须查看该实现的文档以了解如何创建自定义类型。 属性转换器不会做 第一个想法可能是使用简单的值对象和属性转换器。不幸的是,这是不可能的,因为 JPA 不支持对@Id字段使用属性转换器。您可以做出妥协并为您的@Id字段和简单的值对象使用“原始”ID 以从其他……
阅读全文
2022年4月23日
使用 Spring Data 构建存储库非常容易。您需要做的就是声明您的存储库接口并让它扩展 Spring Data 接口JpaRepository。但是,这也很容易意外地为本地实体创建存储库(如果您的开发人员不熟悉 DDD 但熟悉 JPA,则可能会发生这种情况)。因此,我总是像这样声明自己的基础存储库接口: @NoRepositoryBean // <1> public interface BaseRepository<Aggregate extends BaseAggregateRoot<ID>, ID extends Serializable> //……
阅读全文
2022年4月23日
JPA 有自己的@Entity概念,但远没有 DDD 中的实体概念那么严格。这既是优点也是缺点。优点是使用 JPA 实现实体和聚合非常容易。缺点是同样容易做 DDD 不允许的事情。如果您与以前广泛使用过 JPA 但不熟悉 DDD 的开发人员一起工作,这可能会特别成问题。 而值对象只是实现了一个空的标记接口,实体和聚合根将需要更……
阅读全文
2022年4月23日
在战术设计中,我们了解了值对象是什么以及它有什么用处。我们从未真正研究过如何在实际项目中使用它。现在是时候卷起袖子,仔细看看一些实际的代码了! 值对象是领域驱动设计中最简单和最有用的构建块之一,因此让我们从了解在 JPA 中使用值对象的不同方式开始。为此,我们将从 XML Schema 规范中窃取简单类型和复……
阅读全文
2022年4月23日
在前两篇文章中,我们了解了战略和战术领域驱动设计。现在是学习如何将领域模型转化为工作软件的时候了——更具体地说,是如何使用六边形架构来实现。 尽管代码示例是用 Java 编写的,但前两篇文章非常通用。虽然本文中的很多理论也可以应用到其他环境和语言中,但我在编写时明确考虑了 Java 和 Vaadin。 同……
阅读全文
2022年4月23日
与战略领域驱动设计相比,战术设计更加亲力亲为,更接近实际代码。战略设计处理抽象的整体,而战术设计处理类和模块。战术设计的目的是将域模型细化到可以转换为工作代码的阶段。 设计是一个迭代过程,因此将战略设计和战术设计结合起来是有意义的。你从战略设计开始,然后是战术设计。最大的领域模型设……
阅读全文
2022年4月23日
领域驱动设计(DDD) 自_Eric Evans_于 2003 年出版他的有关该主题的书以来就一直存在。几年前,当我加入一个遭受数据一致性问题困扰的项目时,我自己就接触了 DDD。重复出现在数据库中,一些信息根本没有保存,你可能随时随地遇到乐观锁定错误。我们设法通过使用战术领域驱动设计的构建块来……
阅读全文
2022年4月22日
截至今天,Github 上有大约 1000 名贡献者。Virtual DOM 和可重用组件等独特功能吸引了前端开发人员的注意。尽管只是 MVC(模型-视图-控制器)中的“视图”库,但它与 Angular、Meteor、Vue 等成熟的框架竞争激烈。查看下面的图表,它显示了流行的 JS 框架的趋势: React面试……
阅读全文
2022年4月22日
什么是React? React 是一个用于构建用户界面的声明式、高效且灵活的 JavaScript 库。它使您可以从称为“组件”的小而孤立的代码组成复杂的 UI。 React 有几种不同类型的组件,但我们将从React.Component子类开始: class ShoppingList extends React.Component { render() { return ( <div className="shopping-list"> <h1>Shopping List for {this.props.name}</h1> <ul> <li>Instagram</li> <li>WhatsApp</li> <li>Oculus</li> </ul> </div> ); } } // Example usage: <ShoppingList name="Mark" /> 我们很快就会谈到有趣……
阅读全文