- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将在几个月内开始一个未开发的项目。
该项目将包含许多业务逻辑,分布在多个subdomains
上。是的,我们将使用Domain Driven Design
原则。
技术将由Spring, Spring Boot & Hibernate
堆栈组成。
我一直在寻找一些Java库来覆盖基础设施,例如:domain event publication
event store
event deduplication
消费者方面的resequencers
projections
reliable publishing
reliable delivery & redelivery
...
我遇到了Axon Framework
。我已经听说过,不知道详细信息。因此,我阅读了一些博客文章,少量文档,并观看了YouTube上的一些广播。
似乎很有希望,我正在考虑使用它,因为我不想在基础设施方面一再重复发明。
因此,我正在寻找可以回答和澄清我问题的人:
命令处理
Axon将CommandHandlers
与void
方法一起使用。是否可以使它们返回值(例如,生成的业务ID)或对象以用于与业务操作有关的通知目的?对我来说,方法将是对此进行I / O阻塞不是问题。
本地与远程域事件发布
我想明确区分local
vs remote
域事件。Local domain
事件仅应可见并被本地子域使用。是否可以配置事件消耗同步和/或异步?
我的本地域事件可以是“肥胖”。它们被允许携带更多数据,因为它不会跨越域边界。Remote domain events
将是“瘦”的,因此只有远程域所需的最少数据。这种类型的op事件始终需要进行异步处理。
是否可以将本地(胖)域事件转换为域边缘的远程(瘦)域事件?所谓“边缘”,是指基础设施方面。
这样,域模型无需知道本地和远程域事件之间的区别。
同步CQRS
我的应用程序将包含1个(也许2个)core domains
和several subdomains
。有些域包含很多业务逻辑,因此需要CQRS
。
其他领域将更加“粗糙”风格。
是否可以同步执行CQRS
?我想以这种方式开始,然后再添加诸如异步处理之类的技术复杂性。用Axon
这样可印吗?
这也意味着域事件将在不使用event sourcing
的情况下存储在事件存储中。可以在没有事件来源的情况下使用Axon的event store
吗?
投影内容也一样,我只想投影域事件以构建读取模型。
模块化整体式
我们将使用modular monolith
。
如今,所有microservices
内容都不是很时尚。虽然,我深信在每个领域都完全分开的整体应用程序(应用程序代码和数据库架构)中,将以最终的一致性处理操作,并且领域事件包含必要的数据。
以后,如有必要,将更容易迁移到microservices architecture
。
Axon是适合模块化整体架构的框架吗?有什么要考虑的吗?
完全分离的域模型(与持久性无关)
域模型将与数据模型完全分离。
我们需要有一个存储库,可以读取数据模型(使用Hibernate
)并在需要加载时使用data mapper
创建聚合。
还需要另一种方法,需要将聚合转换并保存到数据模型中(使用数据映射器)。
此外,聚合的域事件需要存储到事件存储中,并发布到本地或远程事件处理程序。
这会产生一些后果:
我们需要完全控制与一个或多个DAO(Spring数据存储库)进行通信的存储库实现,以从Hibernate实体中提取必要的数据并与之建立聚合。毕竟,聚合可以在2个甚至3个关系表中建模。
我们在域模型中不需要任何Hibernate注释
Axon是否可以使用这种方法?我仅看到使用直接JPA(将领域模型从1映射到实体的映射)或事件源的示例。
这种方法对我们来说确实是一个大问题,与直接将其映射到数据实体相比,分离的域模型提供了更多的可能性。
下面是我要实现的示例:
在某些域模型包中聚合(不使用JPA):
public class ScoringResultAggregate {
// members, constructor, operation omitted for brevity
}
@Entity
@Table(name ="SOME_TABLE_NAME)
public class ScoringResultEntity {
// member and getters & setters; no domain logic
}
public interface ScoringResultRepository {
void save(ScoringResultAggregate scoringResultAggregate);
ScoringResultAggregate findByApplicationNumber(ApplicationNumber applicationNumber);
}
class ScoringResultAdapterRepository implements ScoringResultRepository {
private ScoringResultJpaRepository scoringResultJpaRepository;
ScoringResultJPARepository(ScoringResultJpaRepository scoringResultJpaRepository) {
this.scoringResultJpaRepository= scoringResultJpaRepository;
public void save(ScoringResultAggregate scoringResultAggregate) {
// converts aggregate to ScoringResultEntity and saves the state into DB
}
public ScoringResultAggregate findByApplicationNumber(ApplicationNumber applicationNumber) {
// loads an ScoringResultEntity from DB and converts it into an aggregate
}
}
Axon server
看起来很有希望。虽然,它仅对
event sourcing
有用吗?
最佳答案
我觉得贾斯珀说的是对的话,但我也想强调一点:
命令处理-是的,您可以在命令处理程序上获得返回值。请注意,不要滥用此功能将的状态返回给用户,因为这会将命令模型(您的聚合处理命令)与查询模型混合在一起。
本地与远程域事件发布-Jasper明确指出了这一点,他是正确的。您渴望形成Axon Server(Enterprise)支持的有界上下文。如果您不使用Axon,则必须自己构建此基础结构。
同步CQRS-Axon很好地提供了异步和同步消息传递的句柄。主要区别在于,您将阻止发送消息的结果。例如,CommandGateway
具有send
和sendAndWait
方法,从而为您提供同步和异步命令分派。最后,在不进行事件搜索的情况下,将Axon Server用作事件存储是完全可以的。使用Axon时,事件来源是一个选择,而不是必须的。
模块化整体-作为公司的AxonIQ积极鼓励采用这种方法来构建软件。所以是的,您可以执行此操作,不可以,在执行此操作之前,我无法想到您应该考虑的任何内容。
完全分离的域模型(与持久性无关)-从查询模型中,您可以完全控制要如何将数据模型与实际使用的模型进行映射。应该将Axon术语中的“聚合”视为您的命令模型,您可以选择“事件源”存储方法或“状态存储”存储方法。 Axon Framework提供的状态存储实现基于JPA,因此需要您在Command Model中的axon注释旁边设置一些注释。如果需要将其分开,我可以想象您将创建自己的Repository
和AggregateFactory
变体。再说一次,事件搜索方法将使您的域模型完全摆脱持久性注释,因此我会坦白地说。
Axon Server-是的,即使您使用状态存储方法进行聚合,也可以使用Axon Server。知道Axon Server不仅是事件存储,还是命令,事件和查询的统一路由解决方案。如果您要从模块化的整体服务转移到(微)服务设置,那么拥有Axon Server来执行所有消息路由将使您的生活变得非常非常轻松。
关于domain-driven-design - 在新项目中考虑Axon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59813583/
我遇到了搜索引擎优化问题,用户可以通过指定任何子域访问我的站点。这会导致 SEO 出现重复页面问题。 例如,如果用户错误输入“www”然后在论坛上发布了一个链接,则谷歌正在抓取“wwww.domain
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicates: Can I change all my links to just //? Network-Path Ref
我正在玩 lighttpd在小型虚拟专用服务器上。我两个域指向服务器。我在 Ubuntu 8.10 上使用最新版本的 lighttpd 和 mod_evhost。 我正在尝试设置一个规则,这样如果任何
我正在开发一个由 domain.ext 提供的网络应用程序。此 Web 应用程序使用基于 cookie 的 session ,并为用户提供在子域上托管包含自定义 JavaScript 的网页的能力,例
我想重定向: 情况一、example.com到subdomain.example.com 情况2.www.example.com到subdomain.example.com 我已将这两段代码放入我的
我遇到了“领域对象”这个术语,并在 Google 上找到了几个定义,但我只是想验证我的理解是否正确。 这是否只是表示业务规则的任何类 - 因为“域”一词通常表示特定于某些本地问题集的规则,例如如何计算
将我们的应用程序静态内容托管在一个完全不同的域上而不是像其他域一样托管在我们主域的子域上有什么好处吗?例如微软使用 i.microsoft.com,谷歌使用 gstatic.com,雅虎使用 yimg
Orbited的客户端JS组件( cometd 服务器),要求如果服务器运行在与 JS 本身不同的域或端口上,则必须执行 document.domain = document.domain; 在加载任
我通读了另一篇文章,但似乎没有人回答我一直遇到的问题。是否可以使用通配符域的通配符子域(即使它仅用于子域而不是子子域),例如:foo.example.local。 我已经有 example.local
我在 Google Domains 上有一个域名,我想指向我在家里的 raspberry pi 服务器上运行的网站。我的公共(public) IP 地址是动态的,当 IP 更新时,我无法弄清楚如何保持
我有这个经典的 DDD 问题;我有一个做一些事情的域服务“DetectPriority”。 PM 要求我创建 2 个不同的服务;一个 INTERNAL(包含完整的业务规则并涉及许多其他领域模型)和另一
An interesting thread我刚才输入这个问题时就出现了。但我认为它没有回答我的问题。 我一直在使用 .NET MVC3 进行大量工作,因此需要一个贫乏的模型。 View 模型和编辑模型
我正在通过docker-compose运行最新版本的Artifactory OSS(如here和here所述)。我的docker-compose文件看起来像这样: version: '2' servi
我正在阅读 MDC entry for nsICookieManager2.add它讨论了域和非域 cookie。这两种类型的 cookie 有什么区别? 最佳答案 来自 RFC2109: Host
这是我的问题:http://regexr.com?2temn 我相信对于你们中的一些正则表达式大师来说这很简单。 干杯! 最佳答案 这也有效: (?<=\.|)\w+\.\w+$ 仅使用 PHP 进行
这应该很简单,但我无法理解。有许多好的和坏的正则表达式方法来匹配 URL,有或没有协议(protocol),有或没有 www。我遇到的问题是这个(在 javascript 中):如果我使用正则表达式来
我有一个网站 http://mywebsite.tld ,我想将 www.mywebsite.tld 重定向到 http://mywesite.tld (所以 www=>非 www) (防止重复内容)
TL;DR 我应该从 www.domain.tld 重定向到 domain.tld 还是相反? 我正在运行一个处理多个域的 CMS。到目前为止,CMS 负责将 www.domain.tld 重定向到
我目前有以下代码: string user = @"DOMAIN\USER"; string[] parts = user.Split(new string[] { "\\" }, StringSpl
使用 Go 和 AWS-SDK 我正在尝试查询 AWS 控制台中 Route53 -> Hosted Zones 下列出的 route53 CNAME 和 A 记录。我可以使用以下代码进行查询,但它需
我是一名优秀的程序员,十分优秀!