问题标签 [hexagonal-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
repository - 外部服务(通过 API 公开的机器学习模型)是否符合存储库的 DDD 定义?
标题的灵感来自这个问题。
你好呀!
我目前正在实施 DDD 之后的六边形架构。在应用程序的一个用例中,我在 API 上使用了一种第三服务抽象,该 API 公开了机器学习模型。
它接收域聚合作为输入并返回一个分数。这个 ml 模型服务是否适合存储库的定义?在否定响应的情况下,这个抽象适合哪个类别?
我不知道如何解释这个具体案例,在此先感谢您的帮助!
spring-boot - 六边形架构中的层
我正在阅读很多关于六边形架构的内容,但是在我正在查看的所有示例中,所有文件夹和类 ubication 都是不同的,这让我看起来有点困惑。
我已经完成了一个具有以下文件夹结构的简单 Spring Boot 应用程序。适配器文件夹包含存储库接口和其余控制器的实现。
在域文件夹中,我有模型,这是一个简单的 POJO,端口是服务类的接口,它包含 Product 的所有业务逻辑,以及存储库接口,它公开要在存储库中实现的方法。
在另一个文件夹中,我有服务实现,正如我之前所说,使用产品的业务逻辑。
这是为简单用例实现六边形架构的正确方法吗?如果不是,为什么?我应该把每节课放在哪里,为什么?这是不清楚的...
非常感谢!
domain-driven-design - 领域驱动设计 (DDD):领域事件处理程序——将它们放置在哪里?
我对在基于六边形架构的应用程序中处理域事件的位置感到困惑。我说的是有界上下文内部域事件,而不是上下文集成/应用程序/公共事件。
背景
据我了解,应用程序逻辑(即用例逻辑、工作流逻辑、与基础设施的交互等)是命令处理程序所属的地方,因为它们特定于某个应用程序设计和/或 UI 设计。然后,命令处理程序调用所有域逻辑所在的域层(域服务、聚合、域事件)。领域层应该独立于特定的应用程序工作流和/或 UI 设计。
在许多资源(博客、书籍)中,我发现人们在应用层实现域事件处理程序,类似于命令处理程序。这是因为域事件的处理应该在它自己的事务中完成。由于它可能会影响其他聚合,因此必须首先通过基础架构加载这些聚合。然而,关键点是:领域事件被撕裂并变成一系列对聚合的方法调用。这个重要的翻译只存在于应用层。
问题
我认为关于哪些领域事件会对其他聚合产生什么影响的知识是领域知识本身的一个组成部分。如果我要删除除我的领域层之外的所有内容,那么这些知识不应该保留在某个地方吗?在我看来,我们应该将领域事件处理程序直接放在领域层本身:
它们可以是接收域事件和可能受其影响的聚合的域服务,并将域事件转换为一个或多个方法调用。
它们可以是聚合本身的方法,直接使用整个域事件(即签名包含域事件类型)并使用它做任何他们想做的事情。
当然,为了加载受影响的聚合,我们仍然需要在应用层有一个对应的处理程序。这个处理程序只启动一个新事务,加载感兴趣的聚合并调用到域层。
由于我从未在任何地方看到过这个,我想知道我是否对 DDD、域事件或应用层和域层之间的区别有什么问题。
编辑:示例
让我们从这个常用的方法开始:
而这个呢?
domain-driven-design - 需要帮助改进具有聚合根的设计
我有以下情况:
您需要在它成为商店并获得所有者帐户之前创建一个请求。
所以有一天你注册了一个请求。经理审核并批准您的请求后 2 天,这意味着系统必须创建商店和所有者帐户。
在我的模型中,我认为请求、商店和所有者帐户是 3 个聚合根,但后来我读到我不能在一个事务中更新多个聚合,因为它们可能是(事实上它们是,因为所有者帐户位于外部身份验证服务)在单独的数据库服务器中。
问题是..我仍然有一个请求,当它获得批准时,我需要创建 2 个聚合根,即商店(具有所有商店属性,我只有一些数据不变量,例如联系电子邮件或电话的限制) 和所有者帐户。
然后可以允许一个所有者帐户编辑其他人的商店(如协作者)
我怎么能建模呢?
谢谢!
java - 具有干净架构的模型中的参数化验证
我正在开发一个应用程序,试图遵循六边形架构和干净架构的建议。将应用程序划分为层:基础设施、应用程序和模型。所有这一切都在关注我导入的包,并且在基础设施层中只存在与框架的依赖关系。
怀疑来自模型中的实现。大多数情况下,如果您验证字符串的最大大小或最大值和数字,您可以使用常量,如果在构造函数中不满足条件,则会引发异常:
问题是,如果我想参数化这些验证的最大值,或者在属性或数据库文件中,例如。该机制将与加载应用程序框架使用的数据的方式相结合。什么时候应该验证?
通过属性服务加载用例(应用层)中的值。例如:
或者创建一个验证器,将类传递给该验证器并验证其所有属性:
什么是最好的解决方案?最干净的?其他更好的可能性?谢谢。
kotlin - 六边形架构和 DDD
我有一个关于六边形架构和 DDD 的问题
是否允许从作为参数传递给适配器的持久性适配器调用域逻辑?
例子:
git - 与基于 gateway-service/BFF(前端的后端)项目的队友合作时的任何建议,通过使用 git flow
描述:这个项目基于Hexagonal架构)我通过repositories层调用其他服务,现在的问题是我怎么能和我的团队做git flow,因为一个repository方法被多个业务逻辑调用,见下面的场景
我有 2 个业务逻辑服务,像它的 API 一样命名它
- 订单服务(业务逻辑)-> 调用存储库方法 1
- 运输服务(业务逻辑)-> 调用存储库方法 1
上面的例子是我试图解释的,我应该为存储库和服务(业务逻辑)分离 git 分支吗?
问题: 我怎样才能和我的团队一起做 git flow ?
提前致谢
java - Saving a domain entity to a file
I have a domain entity with the saveToFile method. This method takes an implementation of the ToFileSavable interface. And now a few questions. What is this interface in DDD? Is it a port and its impementation are adapters? In what layers should these 2 elements be placed? How does this relate to domain services?
signal-processing - Qualcomm DSP:带有命令行参数的 hexagon-sim
我正在使用以下工具在六边形模拟器上分析 c 代码:
二进制文件是用 hexagon-clang 构建的:
但是,在运行 hexagon-sim 时,我无法将命令行参数传递给我的二进制文件
有人知道该怎么做吗?
我试过:
但这一切都只是给出了错误:
spring-boot - JPA 实体未映射
我有使用六边形架构的 Spring 微服务应用程序。当尝试使用 hql 查询从我的 H2 数据库中获取数据时,我有一个异常,说我的实体未映射。我的实体是另一个具有 commons 属性的实体的子类。
活动
存储库
Spring数据实现
开始上课
结果