2

この記事では、Jimmy Bogardが、MVC を実行する際に推奨するベスト プラクティスのいくつかについて説明します。

この記事は概して非常に優れており、(他のブログ投稿での) 彼のアドバイスは概してかなり堅実であることがわかりました。ただし、彼は属性を使用してエンティティをモデルにマップすることを提案しています。

これはどのように

[AutoMap(typeof(Product), typeof(ShowProduct))]
public ActionResult Details(int id)
{
    var product = _productRepository.GetById(id);
    return View(product);
}

これよりも優れています(私の意見では、コードの実際の意図に関しては、より宣言的です

public ActionResult Details(int id)
{
    var product = _productRepository.GetById(id);
    var model = Mapper.Map<Product, ShowProduct>(product);
    return View(model);
}

その1つの点に加えて、入力に基づいて異なるモデルを返すアクションメソッドや、次のような単純なシナリオなど、これがかなり非現実的なシナリオがあるようです:

    [HttpGet]
    public ActionResult Index()
    {
        return List();
    }

    public ActionResult Until(long id) // "id" is the timestamp
    {
        return List(id);
    }

    [NonAction]
    internal ActionResult List(long? timestamp = null, int count = 8)
    {
        IEnumerable<Post> posts = postService.GetLatest(timestamp, count);
        PostListModel model = mapper.Map<IEnumerable<Post>, PostListModel>(posts);
        return ContextView("List", model);
    }

これは実際に良い習慣なのか、それとも正当化されていないだけなのか、そもそも非常に単純なコードの不当な難読化なのか?

AutoMapper がすでに大好きであることに加えて、すばらしいブロガーと見なす人を個人的に攻撃するのではなく、無知からお願いします。

4

2 に答える 2

2

私はまさにこのトピックについて検索を行っていて、Los Techies の投稿にも出くわしました。次に検索すると、AutoMapper-users グループの このGoogle グループの記事にたどり着きました。

Jimmy はこのガイダンスから離れたようです。

アクション フィルターを使用しないでください。当初はその方法を採用していましたが、最終的にはカスタム アクションの結果に落ち着きました。アクション フィルターよりもカスタマイズする方が少し簡単です。これにより、カスタム動作を提供することはほとんど不可能になります。

HTH、

ジミー

于 2014-04-02T18:03:10.973 に答える
1

これについての私の考えは、実際のマッピング実装の詳細の一部を隠すことができるため、コントローラー アクションにマッピングを配置する方が良いということです。また、7 つ以上のアクション メソッドでこの呼び出しを変更するのではなく、後で 1 つのファイルでマッピングを変更するという追加の柔軟性も得られます。これは、純粋に基本的な CRUD アクションを想定しています。これが機能しない特別な使用例があるかもしれません。そのような場合は、別のことをしても問題ありません。

それはちょうど私の 2 セントです。

于 2012-10-12T13:44:19.743 に答える