Model view controller MVC如何让模特保持苗条

Model view controller MVC如何让模特保持苗条,model-view-controller,model,controller,Model View Controller,Model,Controller,看完这段视频后,我想知道我是否用错了控制器。控制器到底应该包含什么 对于我的博客,我有一个post控制器,它具有以下方法: 创造 显示 列表 装货柱 喜欢 不喜欢 而我的post模型只有一些访问规则、验证规则和关系信息。网络上有MVC应用程序的例子吗?我尝试使用胖视图模型和瘦控制器,这些控制器为我的业务对象提供工作 是一个很好的示例应用程序,但StackOverflow是我最喜欢的MVC站点示例 善良 Dan我尝试使用胖视图模型和瘦控制器,这些控制器为我的业务对象提供工作 是一个很好的示例应用程

看完这段视频后,我想知道我是否用错了控制器。控制器到底应该包含什么

对于我的博客,我有一个post控制器,它具有以下方法: 创造 显示 列表 装货柱 喜欢 不喜欢


而我的post模型只有一些访问规则、验证规则和关系信息。网络上有MVC应用程序的例子吗?

我尝试使用胖视图模型和瘦控制器,这些控制器为我的业务对象提供工作

是一个很好的示例应用程序,但StackOverflow是我最喜欢的MVC站点示例

善良


Dan

我尝试使用胖视图模型和瘦控制器,这些控制器为我的业务对象提供工作

是一个很好的示例应用程序,但StackOverflow是我最喜欢的MVC站点示例

善良


Dan

控制器应该包含足够的逻辑来解释用户在将处理传递到服务层之前所说的操作。 因此,如果用户说将此帖子标记为我喜欢的帖子,那么通过单击like按钮,控制器确保用户已获得授权,然后让服务层处理实际标记帖子的工作等。
如果用户说创建一个新的博客条目,那么控制器将收集帖子、标签、时间戳和其他相关信息,并对数据进行最小限度的验证。然后它将把处理交给服务层。如果服务层发现问题,那么它应该抛出一个异常,然后您可以在控制器中处理该异常。

控制器应该包含足够的逻辑,以便在将处理传递给服务层之前解释用户所说的操作。 因此,如果用户说将此帖子标记为我喜欢的帖子,那么通过单击like按钮,控制器确保用户已获得授权,然后让服务层处理实际标记帖子的工作等。 如果用户说创建一个新的博客条目,那么控制器将收集帖子、标签、时间戳和其他相关信息,并对数据进行最小限度的验证。然后它将把处理交给服务层。如果服务层发现问题,那么它应该抛出一个异常,然后您可以在控制器中处理该异常。

我强烈建议阅读

以下是控制器不应执行的操作的不完整列表:

将post数据绑定到视图模型-不,模型绑定器应该这样做 从存储库中获取实体——我想说不,应该使用模型绑定器或动作过滤器 计算一些东西-不,视图模型或实体应该 授权-可能,但最好传递给属性/过滤器 验证-仅当它从实体/域返回时,即业务规则、视图模型、演示验证应自动处理绑定等 应做到:

获取绑定、验证的视图模型作为输入 调用域层,从视图模型传递数据 处理域层错误 根据视图模型/域结果路由到适当的操作/视图 坏的:

顺便说一下,我很少看到好的MVC示例,包括NerdDinner。它们都处理操作内部的业务逻辑,没有视图模型,等等。对于他们的意图来说,这通常是可以的——MVC特性演示——但不应将其作为良好的设计示例。一个或多或少的好例子是,伴随着一本书ASP.NETMVC的运行。但也有其缺点,例如贫血领域模型

但是,如果不尝试遵循领域驱动的设计,而是有一个简单的数据驱动的需求,事情对您来说会更容易。

我强烈建议您阅读

以下是控制器不应执行的操作的不完整列表:

将post数据绑定到视图模型-不,模型绑定器应该这样做 从存储库中获取实体——我想说不,应该使用模型绑定器或动作过滤器 计算一些东西-不,视图模型或实体应该 授权-可能,但最好传递给属性/过滤器 验证-仅当它从实体/域返回时,即业务规则、视图模型、演示验证应自动处理绑定等 应做到:

获取绑定、验证的视图模型作为输入 调用域层,从视图模型传递数据 处理域层错误 根据视图模型/域结果路由到适当的操作/视图 坏的:

顺便说一下,我很少看到好的MVC示例,包括NerdDinner。它们都处理操作内部的业务逻辑,没有视图模型,等等。对于他们的意图来说,这通常是可以的——MVC特性演示——但不应将其作为良好的设计示例。一个或多或少的好例子是,伴随着一本书ASP.NETMVC的运行。但也有其缺点,例如贫血领域模型


但是,如果不尝试遵循领域驱动的设计,而是有一个简单的数据驱动需求,那么事情对您来说会更容易。

我的名字不是MVC。我建议停止喂她-我的妈妈 e不是MVC。我建议停止喂她-
public ActionResult PlaceOrder(Guid orderid)
{
  if (HttpContext.Session["user"] == null)
    return Redirect("Login");
  if (!ValidOrderId(orderid)) return Redirect();
  var order = cart.Get(orderid);
  if (order == null) { ViewData["orderid"] = orderid; return View("Select"); }
  order.Status = OrderStatus.Placed;
  foreach (var item in order.Items)
    item.Update();
  var cart = Cart.GetCurrent();
  cart.Save(order);
  return Redirect("Show", "Orders", new { orderid = orderid });
}
[Authorize]
[ModelStateToTempData]
// OrderViewModel.Id/OrderViewModel.Instance - validates id, 
// gets it from repository, set Instance or ModelState error
public ActionResult PlaceOrder(OrderViewModel<Order> order)
{
  if (!ModelState.IsValid)
     return View("Select", order);
  var order = order.InstanceFromDatabase;
  _injectedCart.SetOrderPlaced(order);
  return RedirectToAction<OrdersController>(c => c.Show(order));
}