-1

コントローラを使用する場合、ドメインエンティティを公開することをお勧めしますか、それともモデルを作成することをお勧めしますか。私は例としてこれを持っています:

[HttpPost]
public ActionResult Create(Order order)
{
        if (SaveObject<Order>(order, false))
        {
                return RedirectToAction("Index", new { id = order.CustomerNo });
        }
        else
        {
                ViewData.Model = order;
                return View();
        }
}

モデルを公開する方がよい場合、モデルに何を含める必要がありますか?バッキングプロパティを作成する必要がありますか、それとも現在のユースケースで公開する必要があるフィールドのみを作成する必要がありますか?「モデルインジェクション」という用語に出くわしましたが、それを使用することの意味とその方法を誰かが説明できますか?

4

2 に答える 2

9

コントローラを使用する場合、ドメインエンティティを公開することをお勧めしますか?

いいえ、お勧めできません。

または、OrderViewModelを作成することをお勧めします。

はい、それは良いです。

はいの場合、ビューモデルには何を含める必要がありますか?

ユーザーが公開および変更するプロパティ。

「モデルインジェクション」という用語に出くわしましたが、誰かがこれの意味とその方法を説明できますか?

次のドメインモデルを想像してみてください。

public class User
{
    public bool IsAdministrator { get; set; }
    public string FirstName { get; set; }
}

そして、ユーザーが自分の名を変更できるようにするコントローラーアクションが必要です。だからあなたは一緒に行きます:

[HttpPost]
public ActionResult Create(User user)
{
    Save(user);
    ...
}

対応するビューには、名のテキストフィールドがあります。これで、ユーザーはコントローラーアクションへのリクエストを非常に簡単にシミュレートし、IsAdministratorプロパティをtrueに設定(注入)できます。

そのため、ビューモデルを使用する必要があります。

public class ChangeFirstNameUserModel
{
    public string FirstName { get; set; }
}

その後:

[HttpPost]
public ActionResult Create(ChangeFirstNameUserModel model)
{
    ...
}
于 2013-03-27T07:23:27.177 に答える
1

エンティティのマップされたモデルを作成するのが常に最善です。特に、エンティティの各プロパティを変更する予定がない場合。また、エンティティに子オブジェクトがあり、それらを熱心にロードしなかった場合、ORM(EF、NHibernateなど)を使用している場合は、が発生するリスクがありselect n+1 issueます。モデルには、更新したいプロパティのみが含まれている必要があります。これにより、過剰な投稿が発生しなくなります。

于 2013-03-27T07:26:27.517 に答える