これが私がすることです。DAL を UI から切り離すには、「中間層」が必要です。次の図を考えてみましょう。

中間層は、サービス層またはアプリケーション層として広く知られています。
Person
データがあるレイヤーから別のレイヤーに渡されるたびに、その特定のレイヤーの同等のクラスに「マップ」されます。
次のスニペットは、サービス層の非常に基本的な例を構成しています。AutoMappers やその他の一般的なプラクティスなど、その他の詳細は含めませんでした。
はPersonDto
、中間層で定義され、Person
エンティティを表します。
public class PersonDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
PersonService
クラス。データ アクセスとビジネス ロジックをカプセル化し、PersonDto
(エンティティではなく) のみを返します。これは、UI がドメインと通信する方法です。
public class PersonService
{
public PersonDto GetPersonById(int id)
{
Person person = dbContext.Persons.Find(id);
// Mapping in action.
var personDto = new PersonDto()
{
FirstName = person.FirstName,
LastName = person.LastName,
};
return personDto;
}
}
これPersonService
は UI コードが認識しているものであり、データ アクセスやビジネス ロジックについては認識していません。サービスについてのみ知っています。
サービスはビジネス ロジックをカプセル化し、UI を BLL および DAL から分離する必要があります。