This MVC tutorial建议制作下拉列表:
//
// POST: /StoreManager/Create
[HttpPost]
public ActionResult Create(Album album)
{
if (ModelState.IsValid)
{
db.Albums.Add(album);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GenreId = new SelectList(db.Genres, "GenreId",
"Name", album.GenreId);
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId",
"Name", album.ArtistId);
return View(album);
}
我是MVC的新手,但在我看来,这不是一个很好的关注点分离,因为它在控制器内进行数据库调用。这是对的吗?
有更好的方法吗?
答案 0 :(得分:0)
我认为只要他们查询数据库,进行数据库调用就不是一件坏事。 :)
当然,通常的“依赖”答案适用:项目规模,生命周期,复杂性等。
但是对于查询,轻量级查询机制可以很好地发挥作用。
您可能有兴趣查看命令/查询责任隔离(CQRS) - 但如果您这样做并且您不熟悉它,请注意不要将其与事件采购混淆,因为从最基本的形式来看,CQRS实际上是相当的简单的想法:将您的读取(查询)与任何域操作分开。
进行操作数据状态的数据库调用并不是那么明智。
答案 1 :(得分:0)
由您决定项目的复杂程度。项目越大 - 你应该采取这种方法的可能性最小。我建议至少使用Repository模式返回您的数据。其次,根据上面的例子,它使用ViewBag - 这也是强烈推荐的东西。当然它的'酷'就在那里 - 但通常你想要的强类型视图模型中的数据代表转到View的数据,而不是ViewBag的动态魔法,它依赖于你不会错误地输入字段名称使用正确。