我已经阅读了similar question中的答案,但我相信我的需求是不同的。
我的“域”图层中有一个 - main
- proj
- __init__.py
- setting.py
- celery.py
- manage.py
类,其中一个方法A
需要从文件中读取以获取特定值,因此我考虑创建一个帮助类来执行文件读取并使getValue
保持尽可能干净和最小。
由于我是第一次使用DDD,并且基于我所拥有的简陋知识,我认为辅助类可以放在域层中,因为它将被用于它。
将域层中的帮助类放在明智的选择中吗?如果不, 有没有更好的DDD兼容解决方案?
答案 0 :(得分:5)
从文件中读取数据应该在Infrastructure层中,以及使用数据库,外部服务,与低级API的通信等。这是技术代码,而不是域逻辑。应该在那里。
在DDD中,您可以使用服务来放置一些帮助代码,如果它当然是域逻辑而不是工厂。您还可以使用Repository对象在Domain Layer中创建接口,在Infrastructure层中创建实现。
因此,您可以在Domain层中创建IMyDataRepository接口,在Infrastructure层中创建MyDataRepository类,解决Application层中的依赖关系。
答案 1 :(得分:4)
我不建议触摸Domain / Aggregates中的文件系统,因为它们应该是纯粹的。但是,如果您使用的是CQRS +事件源,则可以在读取端执行IO,但要注意重放,因为应用程序状态必须随时可重建。
如果您没有使用CQRS,而是使用某种分层架构,并且必须执行IO,那么您应该将依赖关系转换为基础架构(IO完成的位置)。为此,您可以在Domain层中定义接口,在Infrastructure层中定义实现。