我正在一个.NET 6项目中尝试使用领域驱动设计,我正在尝试了解以下内容。
在我之前的Big Ball of Mud项目中,我们通常将应用程序配置变量存储在环境变量(和/或appsettings.json)中。我对DDD的理解是,我们将业务规则/逻辑转移到域层,以将其与应用程序层分开组织(实现细节)。
我已经完成了Pluralsight的培训,也回顾了微软面向DDD的微服务(https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice)和Clean Architecture。很明显,域层应该引用应用层中的任何内容。对我来说,使用appsettings.json
似乎是应用层实现细节的一部分-所以我的问题是,“是否不可能在域层中使用appsettings.json?"
我提出这个问题是因为我希望允许使用appsettings.json定义某些变量,但是我也希望能够使用这些变量在我的域层中实施防护。
例如,我想在环境变量中定义一个“用户的默认会话长度”,但我也想在创建或更新实体时在域层中强制执行该会话长度。我知道我可以在应用层中实现这一点,但将应该与域实体绑定的内容移到应用层中感觉不对。
任何帮助或意见将不胜感激。
2条答案
按热度按时间j5fpnvbx1#
广泛中风:决定如何处理信息的代码位于域层内部,而决定信息来源的代码位于域层外部。
因此,域层之外的代码读取环境变量,或读取appsettings.json,或其他内容,值作为参数传递到域层。
我能想到至少三种变体
cnjp1d6j2#
我总是喜欢问自己以下几个问题:
如果用户告诉你他们想用这个软件做什么,他们真的关心这个事情吗?在你的例子中,* 用户的默认会话长度 *?这是他们提出来的,还是你头脑中产生的技术问题?
您可以将这种思想推广到您实现的每个特性中,因此自然不需要通过
appsettings.json
配置域业务规则,反之亦然:需要通过设置来配置域可能是对DDD的误解。或者你可以这样想:Aggregate确保业务规则的事务一致性。如果您可以通过
appsettings.json
更改值,这对业务规则意味着什么?在没有任何用户交互的情况下,今天对所有Aggregate示例的一致性定义与昨天不同?这对现有示例意味着什么,它们现在只是无效吗?在我听来不像DDD。