2017-02-12 77 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