最近我在学习 DDD。我也有一些六边形架构(也称为ports and adapters
)的经验。我想将我的想法付诸实践并创建一个交易应用程序。起初我不想拥有一个monolithic
具有一些基本功能的应用程序。我有组合DDD
和微服务以及端口和适配器以及 MVC 的经验,但我目前面临的挑战对我来说是新的。
因此,以下是该应用程序预期的一些功能:
- 监控和保存价格/数量
- 按照策略执行自动交易
- 回测策略
- 为交易者创建交易历史和交易日志
当然还有一些其他的东西,比如身份验证。数据库和 web ui 等服务也确实存在。
所以我的第一个问题是什么bounded context
?是什么sub domains
?例如,用户想要查看实时价格数据,并且在后台,应用程序会以持久的方式保存这些数据,而不管用户是否正在检查价格!现在由于两个功能共享很多,它们是相同bounded context
的还是相同的subdomain
?
我遇到的下一个问题是打包应用程序。看了很多文章还是想不通我怎么能DDD
和Onion
风格结合起来hexagonal
。我正在使用golang
,但我认为整体结构应该是相同的跨语言。我想出了这样一个结构:
src
├─── cmd
│ └─── Main files
│ └─── DI files
├─── sub-domain1
├─── sub-domain2
│ ├─── domain model
│ └─── value objects
│ └─── entity objects
│ ├─── application service
│ └─── infrastructure
│ └─── ports
│ └─── adapters
...
很明显,这里缺少很多东西,我不知道在哪里放置repositories
,DTO's
和Event bus
许多其他对象。此外,我不确定这种结构,因为我已经看到一些实现将目录相互嵌套,就像洋葱一样!现在我不想拥有多个模块和二进制文件,但是应用程序有可能增长到多个微服务,如果发生这种情况我不想处理heavy refactoring
(可能永远不会发生,只是作为现实世界的实践,我想它可能会发生)。
我很困惑,我的一些指导可以帮助我很多。谢谢