2017-02-12 14 views
0

私は自治体向けの学校関連のアプリを実装しています。私はクラスを持っており、次の式を使ってグレードを数えたい:grade = acedemicYear - commencingYear + 1DDDでシングルトンを使用するにはどうすればよいですか?

あなたは、この2つの方法をモデル化することができます。

  • commencingYearとacademicYearの両方が、年式やacedemicYear年度は、シングルトンのいくつかの種類、commencingYearはAcademicYearの種類を持っているので、AcademicYear.getInstance() - this.commencingYear + 1
  • 別の解決策である必要があり今年私に今年のカレンダークラスがあるので、Calendar.getAcademicYear() - this.commencingYear + 1

まだ私はこれらの権利を感じていません。モデルに年を挿入するのか、それともモデルの中に入れるのかは分かりません。学年を手動で多かれ少なかれ変更しなければならないという別の問題は、少なくとも毎年違う日に始まります。学年度を上げることにより、≧8はクラスが終了したことを意味するので、そのクラスの子供は現在の学生リストに載らないようにしてください。あなたはどう思いますか、これをモデル化する最良の方法は何ですか?

答えて

1

AcademicYearもちろん、あなたが行ったような価値のタイプになることができます。しかし、複雑なこと以上のことではないのですか?

commencingYearacademicYearの両方を含むエンティティタイプがある場合は、これらのフィールドの値を簡単に制御できます。したがって、誰かが範囲外の日付を入力しようとすると、例外をスローすることができます。

計算に関しては、ビジネスルールのように聞こえるため、エンティティまたはドメインサービスのメソッド内でラップする必要があります。

つまりルールですが、ドメイン内の特定のエンティティのルールです。したがって、静的な場所にラップするべきではなく、正しいエンティティクラスに実装する必要があります。

あなたのドメインについての知識や実装方法を知っているので、より具体的な回答を書くのは難しいです。

+0

ありがとうございます!ですから、私がうまく理解すれば、ドメインサービス 'currentAcademicYear = CalendarService.getAcademicYear()'を作成し、 'CalendarService.finish(currentAcademicYear)'で年を終えることができます。または、私は 'currentAcademicYear = AcademicYearRepo.getCurrentAcademicYear()'と 'currentAcademicYear.finish()'からエンティティを作成することができます。あるいは、私は、学年が9月初めのどこかで始まるが、毎年違う日に始まるので、複雑であると思うサービスでDate型を使うことができます。自分のモデルにAcademicYearエンティティを持つことが最善の策だと思います。 – inf3rno

+0

私はあなたのモデルやルールを理解していないので、本当に言うことは難しいです。私が言うことができるのは、何らかの形でビジネスルールを保護すべきだということだけです。したがって、将来変更される場合は、修正する場所は1つだけです。 – jgauffin

+0

私は知っていますが、私はあまり話したくありません。私はエンティティが、このモデルではドメインサービスや日付型を使用するよりはるかに優れていると思います。あなたは多くの助けをしました、ありがとう! – inf3rno

関連する問題