Apache Causeway:实现领域驱动设计的原型工具


Apache Causeway™ 通过自动为 Spring Boot™ 应用程序生成 UI 来实现域驱动的应用程序开发。这意味着:

  • 生产力- 您的应用程序主要是业务逻辑,消除了昂贵的 UI 代码。
  • 发现- 您可以与业务领域专家携手合作,了解问题空间并探索,然后在解决方案空间中选择解决方案。
  • 易于使用- 您的企业用户会发现该应用程序易于学习,并且以业务概念为中心
  • 简单集成- 您可以通过自动发布的域事件进行异步集成,并使用自动提供的 REST API 进行同步集成,轻松与其他系统集成。
  • 干净的架构- 您会发现在应用程序的内部架构中保持清晰的关注点分离很容易

由于 Apache Causeway 是开源的,运行在 Spring Boot 之上,因此您不会被供应商甚至框架所束缚;关注点的清晰分离意味着如果需要,您甚至可以将域逻辑提升并转移到其他框架上运行。

使用最小的helloworld入门应用 程序尝试该框架。
使用结构化simpleapp入门应用程序开发您自己的应用程序。

特点:
Apache Causeway 非常适合快速原型设计,因为为了让应用程序正常运行,您需要编写的只是域模型对象。

通过只关注领域,您还会发现您开始开发一种普遍存在的语言 - 整个团队(业务人员和技术人员等)都有共同理解的一组术语和概念。

如果您愿意,您可以将其与 BDD 结合起来 - 该框架与Cucumber集成。
勾勒出域模型后,您就可以重新开始并使用下面列出的部署选项之一进行部署。

使用通用 UI 进行部署
Apache Causeway 的最初动机之一是能够自动为域对象模型生成用户界面。

该框架的架构允许不同的用户界面技术。主要实现是Web UI(Wicket 查看器),它不仅提供有吸引力的默认用户界面,还能够通过编写新的Apache Wicket组件来自定义用户界面。

在 Apache Causeway 上部署意味着该框架还管理对象持久性。同样,这是可插拔的。有两种实现,JDO (DataNucleus)JPA (EclipseLink)。这些通常与 RDBMS 一起使用,但原则上也可以与 NoSQL 数据库一起使用。JDO/DataNucleus 历来对 NoSQL 具有广泛的支持,尽管 JPA/EclipseLink 也有一些支持。

部署为 REST API
REST(表示状态传输)是一种用于构建高度可扩展的分布式系统的架构风格,使用与万维网相同的原理。许多商业 Web API(twitter、facebook、Amazon)都是作为纯 REST API 或其中的某种近似实现的。

Restful对象规范定义了一种方法,通过该方法可以使用 HTTP 上的 JSON 表示将域对象模型公开为 RESTful 资源。

Apache Causeway 的RestfulObjects 查看器是该规范的实现,使任何 Apache Causeway 域对象通过 REST 自动可用。还可以选择性地限制域对象集以排除域实体(从而避免泄漏实现细节)。
将 Apache Causeway 部署为 RESTful Web 服务的三个主要用例是:

  • 允许根据 RESTful API 构建自定义 UI
    例如,使用 JavaScript 框架,如 Angular/Ionic/ReactJs/Vue 等,或 JavaFX
  • 实现系统之间的集成
    REST 被设计为机器可读,因此是同步数据交换场景的绝佳选择。
    该框架提供SPI来允许根据需要返回自定义表示。
  • 作为通用 UI 的基础。
    在撰写本文时,有两个正在开发中:Kroviz(使用 Kotlin/JS)和Rob(使用Microsoft 的 Blazor)。

另一个实现 RO 规范的框架是Naked Objects Framework(.NET 上)。它提供了一个完整的通用 UI,并针对其自己的 RO 实现进行了测试。

框架管理对象持久性,例如使用 JDO/DataNucleus 对象存储。完全可以将 RESTful API 与自动生成的 Web 应用程序一起部署;两者都使用相同的域对象模型。

部署在您自己的平台上
使用 Apache Causeway 进行原型设计,但拥有自己的专有应用程序框架来实际构建生产应用程序。

Apache Causeway 支持这一点,因为 Apache Causeway 定义的编程模型有意最小化对框架其余部分的依赖。事实上,领域模型类对 Apache Causeway 的唯一硬依赖是通过类org.apache.causeway.applib,主要是为了获取@Action@Property等注释。因此,使用 Apache Causeway 进行域对象原型化和/或测试相对容易,但要部署在其他框架的运行时上。

如果您有兴趣采用这种方法,那么您将需要提供您自己的代码使用的任何框架提供的服务的实现。
如果您自己的应用程序框架基于Spring Boot并使用 JPA 或 JDO,那么还有另一种选择。如上所述,Apache Causeway 本身运行在 Spring Boot 之上。因此,您可以使用常规 Spring 技术之一开发完整的自定义 UI,并将其与 Apache Causeway 一起运行 - 实际上是前面描述的选项,但适用于每个用例,而不仅仅是选定的用例。Apache Causeway 继续作为 Spring 之上的薄层来管理对象生命周期和持久性,但您的自定义 UI 会完全按照您的需要呈现域对象。