2010-04-27 5 views
1

J'ai un scénario dans lequel j'ai besoin de conseils. J'ai une application où il y a deux types d'utilisateurs étudiants et enseignants. Les étudiants et les enseignants partagent certaines propriétés communes telles que Prénom, Nom, Email, Nom d'utilisateur, Mot de passe, etc. Pour cette raison, je dérive des classes Étudiant et Enseignant de l'utilisateur.Conception par domaine Question

Maintenant, le problème est qu'il y a des moments où je ne sais pas vraiment que si l'utilisateur est étudiant ou enseignant. Comme lors de l'implémentation d'un fournisseur d'appartenances personnalisé et dans la fonction GetUser. GetUser prend userName mais maintenant j'ai perdu ce que je devrais retourner.

Pour les fonctions Étudiant, j'ai créé IStudent et ITeacher pour les enseignants. Mais parfois, je veux juste retourner un utilisateur et ne pas se soucier s'il est étudiant ou enseignant. Mais retourner la classe de base ne semble pas être une bonne idée aussi.

MISE À JOUR:

Je pense qu'il est bon de revenir l'utilisateur et ne pas avoir même des classes d'élèves et des enseignants. Les étudiants et les enseignants sont simplement les rôles et peuvent être gérés par StudentServices et TeacherServices.

+0

Pourquoi retourner un objet de type User est une mauvaise idée? Il semble que la solution logique - en particulier pour un appel de getUser(); – quoo

+0

Et votre question est ??? – Oded

+0

Voir ma question mise à jour! – azamsharp

Répondre

1

Un scénario classique et un emballement classique du problème. Oui, il y a toujours de la peine à travailler avec l'héritage comme ils contraignent. Mais les avantages se produisent quand vous injectez le comportement dans votre classe (es). Maintenant, il semble que vous avez décidé pour Jut en utilisant la classe User et ne pas avoir l'utilisateur comme base et les classes enfant enseignant et étudiant. Ce peut être une bonne idée si vous faites des rôles d'enseignant et d'étudiant, mais les manipulant dans des services séparés ... eh bien, ça sent mon opinion. Vous allez probablement vous retrouver avec du code en double dans ces services, car ils doivent tous deux gérer les logiques utilisateur. Le fait est que si vous commencez à repousser les difficultés de ce type en compensant la couche de service, c'est la voie vers un modèle de domaine anémique où la logique s'échappe de la couche de domaine vers la couche de service ou gui. Ce qui est unique avec l'enseignant et l'élève et quelle logique/comportement diffère doit être représenté dans la couche domaine.

Vous pouvez utiliser l'héritage (peut-être la meilleure solution) ou en faire un rôle où vous faites réellement Enum - Regardez (Je pense) Jimmy Bogard pour savoir comment étendre un Enum personnalisé avec un comportement.