私のプロジェクトでは、コントローラーからオブジェクトを受け取り、それを DTO に変換してリポジトリに送信するサービス レイヤーがあります。私が推測する問題は、プロジェクト内のすべてのエンティティ クラスに対して、エンティティとまったく同じプロパティを持つ DTO が必要になることです。いくつかのコードを示してみましょう:
public class PersonDto
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
};
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
};
public class PersonController : Controller
{
public ActionResult Create(CreatePersonViewModel createPersonViewModel)
{
var personDto = //here I map createPersonViewModel to a PersonDto
_personCreateService.Create(personDto);
}
}
public class PersonCreateService
{
public void Create(PersonDto personDto)
{
_repository.Create(personDto);
}
}
public class PersonRepository
{
public void Create(PersonDto personDto)
{
Person person = PersonMapper.Map(personDto);
_db.Person.Add(person);
}
}
それで、私はそれについていくつか質問があります:
- それは良いアーキテクチャですか?
- dto をサービス中のエンティティまたはリポジトリのみにマップする必要がありますか?
- 私の dto を私のエンティティに等しくするのに問題はありますか?
- 多くのチュートリアルが教えているように、コントローラーで直接 dbContext を使用しないのは愚かですか?