使用关注点分离的MVC选择列表

时间:2011-07-04 03:21:51

标签: asp.net-mvc

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的新手,但在我看来,这不是一个很好的关注点分离,因为它在控制器内进行数据库调用。这是对的吗?

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

我认为只要他们查询数据库,进行数据库调用就不是一件坏事。 :)

当然,通常的“依赖”答案适用:项目规模,生命周期,复杂性等。

但是对于查询,轻量级查询机制可以很好地发挥作用。

您可能有兴趣查看命令/查询责任隔离(CQRS) - 但如果您这样做并且您不熟悉它,请注意不要将其与事件采购混淆,因为从最基本的形式来看,CQRS实际上是相当的简单的想法:将您的读取(查询)与任何域操作分开。

进行操作数据状态的数据库调用并不是那么明智。

答案 1 :(得分:0)

由您决定项目的复杂程度。项目越大 - 你应该采取这种方法的可能性最小。我建议至少使用Repository模式返回您的数据。其次,根据上面的例子,它使用ViewBag - 这也是强烈推荐的东西。当然它的'酷'就在那里 - 但通常你想要的强类型视图模型中的数据代表转到View的数据,而不是ViewBag的动态魔法,它依赖于你不会错误地输入字段名称使用正确。