首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于领域驱动设计的C#知识认证

基于领域驱动设计的C#知识认证
EN

Software Engineering用户
提问于 2019-04-03 09:25:13
回答 1查看 106关注 0票数 1

我以前问过关于代码评审的问题,但是有人告诉我这是“非主题”,所以我在这里尝试。我希望有人能帮我指路。

作为我们建立的保险索赔系统的一部分,索赔管理人员可以记录与索赔有关的来电。

索赔管理器必须通过询问许多“数据保护”问题来验证调用方,这些问题是根据数据库中针对索赔的信息动态生成的。我相信这种类型的安全性被称为“基于知识的身份验证”。

备注:

  • 有些问题是强制性的,有些则不是。
  • 所有强制性问题都必须得到回答。
  • 至少必须回答一个非强制性问题。
  • 每个问题可能有多个正确的答案。
  • 根据数据库中的声明存储的信息也会动态生成答案。
  • 索赔管理器从生成的每个问题的答案列表中选择一个答案,该列表与调用者的响应非常或完全匹配。
  • 每个问题的答案列表必须包括“未回答”(默认)和“不正确的答案”选项。

当前的系统是五年前编写的,我们没有尝试使用任何设计模式或现代方法(比如领域驱动的设计),因为我们缺乏时间和理解。

我们现在有机会重写这个软件,并希望遵循域驱动的方法。

下面是我对上述需求建模的简单尝试:

代码语言:javascript
复制
public class DataProtection
{
    public IEnumerable<DataProtectionQuestion> DataProtectionQuestions { get; set; }        
    public bool DataProtectionValidated =>
        DataProtectionQuestions.Where(x => x.IsRequired).All(x => x.AnswerIsCorrect) &&
        DataProtectionQuestions.Any(x => x.IsRequired == false && x.AnswerIsCorrect);        
}

public class DataProtectionQuestion
{
    public IEnumerable<string> Answers { get; set; }        
    public string Question { get; set; }
    public bool IsRequired { get; set; }
    public string Answer { get; set; }
    public bool AnswerIsCorrect => Answers?.Contains(Answer) ?? false;
}

这一设计产生的问题:

  • 根据鲍勃叔叔的说法,这些实体会被认为是贫血吗?
  • DataProtection实体是验证答案的“正确”位置吗?
  • 答案是否应该是具有“IsValid”属性的实体?

有谁能就前进的方向/更好的方法提供一些指导/建议?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2019-04-03 09:59:17

根据鲍勃叔叔的说法,这些实体会被认为是贫血吗?

难道不是马丁·福勒创造了“贫血”这个词吗?无论如何,我会说“不”,他会认为DataProtectionQuestion是一个数据结构,而不是一个对象。MF可能不同意。

DataProtection实体是验证答案的“正确”位置吗?

很难说。我不喜欢你的例子对象。我可以看到,对已回答的问题的评估可能比简单的函数更复杂,因此您希望能够替换业务规则。我会有这样的东西:

代码语言:javascript
复制
public class DataProtectionForSituationX : IResultEvaluator
{
    public bool DataProtectionValidated(IEnumerable<DataProtectionQuestion> answeredQuestions) {...}
}

答案是否应该是具有“IsValid”属性的实体?

是。您将希望存储、传递和使用答案,而不必担心它们是否有效,它们的验证很可能取决于答案之外的信息以及时间信息。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/389683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档