2017-02-12 89 views
0

我正在为当地政府实施与学校相关的应用程序。我有课,我想用下面的公式来计算分数:grade = acedemicYear - commencingYear + 1我应该如何在DDD中使用单身人士?

您可以推估此2种方式:

  • commencingYear和academicYear都有一个年型,acedemicYear年是某种单的,所以AcademicYear.getInstance() - this.commencingYear + 1
  • 是commencingYear有型AcademicYear的另一种解决方案,我有一个Calendar类,这给了我当年,所以Calendar.getAcademicYear() - this.commencingYear + 1

但我不觉得这些是正确的。我不确定我是应该在模型中注入一年,还是应该在模型中。另一个问题是,学年应该或多或少地手动改变,至少每年都会在不同的日期开始。通过增加学年,大于等于8意味着班级已经完成,所以该班的孩子不应该在当前的学生名单上。你认为什么是建模的最佳方式?

回答

1

AcademicYear当然可以像你这样做的价值类型。但是,这不是复杂的事情吗?

如果您有一个包含commencingYearacademicYear的实体类型,则可以轻松控制这些字段的值。因此,如果有人试图输入一个超出限制的日期,你可以抛出一个异常。

关于计算,它听起来像业务规则,因此它应该包装在实体或域服务中的方法中。

即它是一条规则,但是该域中特定实体的规则。因此它不应该被包装在一个静态的地方,而是在正确的实体类中实现。

写一个更具体的答案很难,因为我现在知道您的域名或您如何实施它。

+0

谢谢!所以如果我理解的很好,我可以创建一个域名服务'currentAcademicYear = CalendarService.getAcademicYear()'并用'CalendarService.finish(currentAcademicYear)'完成一年。或者我可以从它创建一个实体'currentAcademicYear = AcademicYearRepo.getCurrentAcademicYear()'和'currentAcademicYear.finish()'。或者我可以使用日期类型与服务,我认为这很复杂,因为学年从9月初开始,但在每年的不同日子。我认为在我的模型中最好有一个AcademicYear实体。 – inf3rno

+0

我不明白你的模型或规则,所以很难说。我只能说,你应该以某种方式保护业务规则。因此,如果未来发生变化,那么只有一个地方需要修改。 – jgauffin

+0

我知道,但我不想谈太多。我认为一个实体比在这个模型中使用域服务或日期类型好得多。你帮了很多,谢谢! – inf3rno