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