2

私のプロジェクトでは、コントローラーからオブジェクトを受け取り、それを 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);
        }
    }

それで、私はそれについていくつか質問があります:

  1. それは良いアーキテクチャですか?
  2. dto をサービス中のエンティティまたはリポジトリのみにマップする必要がありますか?
  3. 私の dto を私のエンティティに等しくするのに問題はありますか?
  4. 多くのチュートリアルが教えているように、コントローラーで直接 dbContext を使用しないのは愚かですか?
4

1 に答える 1

1

私はいくつかの質問に答えようとします。

1-それは良いアーキテクチャですか?

多分。NHibernate、Entity FrameworkなどのORMツールを使用している場合は、コンクリートタイプではなくプロキシを使用していることがあるため、ORMツールから一時オブジェクトを共有できないと考える必要があります。ORMツールから直接オブジェクトをビューに送信するのは好きではありません。私はviewModelまたはDTOを使用することを好みます。

2-dtoをサービス中のエンティティにマップする必要がありますか、それともリポジトリ内のみにマップする必要がありますか?

ビューが必要とするため、サービスはを返す必要があるかもしれませんが、結果をに直接指定してからViewModel取得する必要がある場合もあります。QueryRepository

3-私のdtoを私のエンティティと等しくすることに問題はありますか?

いいえ、50個のプロパティを持つエンティティを作成でき、5個または6個のプロパティのみを含むビューにグリッドを表示する必要がある場合があるため、これらの5個または6個のプロパティを使用してViewModelを作成し、エンティティをViewModelタイプに変換する必要があります。 。

AutoMapperと呼ばれる優れたツールがあり、オブジェクトのマッピングに役立ちます。あなたはそれを使うことを考えるべきです。

投稿をクリーンアップし、asp.netmvcを使用したオブジェクト指向プログラミングのベストプラクティスを採用するViewModelを使用する方法については、Asp.NetMVCとAutoMapperを使用したJimmyBogardの優れた実装があります。

http://lostechies.com/jimmybogard/2011/06/22/cleaning-up-posts-in-asp-net-mvc/

于 2012-11-20T16:45:09.947 に答える