J'essaie de comprendre Anémique Modèles de Domaine et pourquoi ils sont censés être un anti-modèle.
Voici un exemple réel.
J'ai une classe d'Employés, qui a une tonne de propriétés: nom, prénom, sexe, nom d'utilisateur, etc
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Username { get; set; }
// Etc.. mostly getters and setters
}
Ensuite, nous avons un système qui consiste à faire tourner les appels téléphoniques entrants et des enquêtes de site web (connu sous le nom 'conduit') uniformément parmi le personnel de vente. Ce système est assez complexe, car elle implique un aller-robining demandes de renseignements, de la vérification de vacances, des préférences des employés etc. Donc ce système est actuellement séparés dans un service: EmployeeLeadRotationService.
public class EmployeeLeadRotationService : IEmployeeLeadRotationService
{
private IEmployeeRepository _employeeRepository;
// ...plus lots of other injected repositories and services
public void SelectEmployee(ILead lead)
{
// Etc. lots of complex logic
}
}
Puis sur le dos de notre site web, formulaire de demande, nous avons un code comme ceci:
public void SubmitForm()
{
var lead = CreateLeadFromFormInput();
var selectedEmployee = Kernel.Get<IEmployeeLeadRotationService>()
.SelectEmployee(lead);
Response.Write(employee.Name + " will handle your enquiry. Thanks.");
}
Je n'ai pas vraiment rencontrer de nombreux problèmes avec cette approche, mais apparemment c'est quelque chose que je devrais courir en hurlant de, car il est un Anémique Modèle de Domaine.
Mais pour moi, il n'est pas clair où la logique dans la tête de rotation de service devrait aller. Faut-il aller dans la direction? Faut-il aller à l'employé?
Pour ce qui est de l'injection de référentiels, etc. que la rotation de service exige - comment pourraient-ils être injecté dans de l'employé, étant donné que la plupart du temps lorsque vous traitez avec un employé nous n'avons pas besoin de ces référentiels?