私は貧血ドメインモデルと、それらがおそらくアンチパターンである理由を理解しようとしています。
これが実際の例です。
名前、性別、ユーザー名など、たくさんのプロパティを持つEmployeeクラスがあります
public class Employee
{
public string Name { get; set; }
public string Gender { get; set; }
public string Username { get; set; }
// Etc.. mostly getters and setters
}
次に、電話の着信とWebサイトの問い合わせ(「リード」と呼ばれる)を営業スタッフ間で均等にローテーションするシステムがあります。このシステムは、問い合わせのラウンドロビン、休日のチェック、従業員の好みなどを含むため、非常に複雑です。したがって、このシステムは現在、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
}
}
次に、ウェブサイトのお問い合わせフォームの裏側に、次のようなコードがあります。
public void SubmitForm()
{
var lead = CreateLeadFromFormInput();
var selectedEmployee = Kernel.Get<IEmployeeLeadRotationService>()
.SelectEmployee(lead);
Response.Write(employee.Name + " will handle your enquiry. Thanks.");
}
私はこのアプローチで実際に多くの問題に遭遇することはありませんが、おそらくこれは貧血ドメインモデルであるため、私が叫んで実行する必要があるものです。
しかし、私にとっては、リードローテーションサービスのロジックがどこに行くべきかは明確ではありません。それは先頭に立つべきですか?それは従業員に行くべきですか?
ローテーションサービスに必要なすべての注入されたリポジトリなどはどうですか?従業員を扱うときにほとんどの場合これらのリポジトリは必要ないことを考えると、それらはどのように従業員に注入されますか?