2017-02-12 4 views
0

Je suis la mise en œuvre d'une application liée à l'école pour le gouvernement local. J'ai des cours et je veux compter la note en utilisant la formule suivante: grade = acedemicYear - commencingYear + 1.Comment devrais-je utiliser singleton dans DDD?

Vous pouvez modéliser ces 2 façons:

  • à la fois commencingYear et academicYear ont un type de l'année et l'année acedemicYear est une sorte de singleton, si AcademicYear.getInstance() - this.commencingYear + 1
  • une autre solution que commencingYear a un type de AcademicYear, et j'ai une classe de calendrier, qui me donne l'année en cours, donc Calendar.getAcademicYear() - this.commencingYear + 1

Encore je ne me sens pas ces droits. Je ne suis pas sûr si je devrais injecter l'année dans le modèle ou il devrait être dans le modèle. Un autre problème que l'année académique devrait être changé plus ou moins manuellement, au moins il commence chaque année à une date différente. En augmentant l'année scolaire, le niveau supérieur à 8 signifie que la classe est terminée, donc les enfants de cette classe ne devraient pas être sur la liste actuelle des élèves. Que pensez-vous, quelle est la meilleure façon de modéliser cela?

Répondre

1

AcademicYear peut bien sûr être un type de valeur comme vous avez fait. Mais n'est-ce pas compliquer les choses?

Si vous avez un type d'entité qui contient à la fois commencingYear et academicYear, vous pouvez facilement contrôler la valeur de ces champs. Ainsi, si quelqu'un essaie d'entrer une date qui est hors limites, vous pouvez simplement lancer une exception. En ce qui concerne le calcul, cela ressemble à des règles métier et doit donc être encapsulé dans une méthode de l'entité ou dans un service de domaine.

c'est-à-dire une règle, mais une règle pour une entité spécifique dans le domaine. ainsi il ne devrait pas être enveloppé dans une statique quelque part mais implémenté dans la classe d'entité correcte.

Ecrire une réponse plus précise est difficile car j'ai maintenant des connaissances sur votre domaine ou comment vous l'avez implémenté.

+0

Merci! Donc, si je comprends bien, je pourrais créer un service de domaine 'currentAcademicYear = CalendarService.getAcademicYear()' et terminer l'année avec 'CalendarService.finish (currentAcademicYear)'. Ou je pourrais en créer une entité 'currentAcademicYear = AcademicYearRepo.getCurrentAcademicYear()' et 'currentAcademicYear.finish()'. Ou je pourrais utiliser le type Date avec le service, ce qui me semble compliqué, puisque l'année scolaire commence quelque part au début de septembre, mais dans une journée différente chaque année. Je pense qu'il est préférable d'avoir une entité AcademicYear dans mon modèle. – inf3rno

+0

Je ne comprends pas votre modèle ou la règle, donc c'est vraiment difficile à dire. Tout ce que je peux dire, c'est que vous devriez protéger la règle commerciale d'une manière ou d'une autre. Donc, si cela change à l'avenir, il n'y a qu'un seul endroit à modifier. – jgauffin

+0

Je sais, mais je ne veux pas trop en parler. Je pense qu'une entité est beaucoup mieux que d'utiliser un service de domaine ou juste un type de date dans ce modèle. Vous avez beaucoup aidé, merci! – inf3rno