我目前正在构建一个验证贷款的 DDD 应用程序。每笔贷款都有各种验证检查,必须在批准贷款之前执行这些检查。验证检查因贷款而异,并且大多数需要外部(基础设施)服务才能完成。
鉴于此,我们决定实现这些检查的最佳方法是为每种贷款类型创建一个配置文件,其中将列出特定规则以及可以执行规则检查的相应验证器服务。此外,某些规则需要传递特定参数。例如信用评分检查,会有一个阈值(例如必须超过 600)。为此,我们认为我们应该只传递一个字符串字典对象,称为验证标准。除非有人有更优雅的方法来做到这一点?
现在我的 Loan 实体有一个验证方法,它接受要检查的规则列表。我的问题是,在运行时从配置文件解析服务引用的最佳方法是什么?将服务工厂传递给接受字符串验证器名称的 Validate() 方法?
我在应用程序的其余部分使用 Unity 进行 DI,但无法找到在运行时动态执行此操作的最佳方法。
任何见解将不胜感激!
最佳答案
我认为验证规则的运行时创建是您领域的重要组成部分。所以我建议从“validate()”方法中提取验证(这对简单的验证规则很有用)并添加到某种“验证规则生成器”中。
这样的类(Class)应该是一等公民,以使该概念明确。它将根据当前上下文(贷款类型、用户类型等)和配置设置动态构建验证器链或类似的东西。验证器链将包含单独的验证器对象,这些对象可以很容易地从 DIC 注入(inject),并且这些对象也可以很容易地在分离中进行单元测试。
总而言之——验证链构建器知道要验证“什么”(需要根据上下文应用哪些单独的验证对象),而验证器对象会知道如何(需要应用的验证细节)。我想这也是划分责任的好方法。
关于c# - DDD 动态服务注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559199/