【发布时间】:2015-12-15 13:18:07
【问题描述】:
我刚刚开始使用 MVC,并选择让我的解决方案为数据库交互和一个 UI 项目分别保存一个项目(希望是一种可接受的工作方式)。 UI 引用了 BL,但 BL 没有对 UI 的引用。因此,我必须将参数设置为dynamic(下面的示例)才能将值传递给 BL,是否应该避免这种情况?如果是,为什么?(除了缺乏智能感知)。
public class MyController : Controller
{
[HttpPost]
public ActionResult MyAction(MyActionViewModel vm)
{
if (!ModelState.IsValid)
{
return View(vm);
}
//pass formCollection to model to do stuff with
int isSuccessful = ModelName.Insert(vm);
return RedirectToAction(....);
}
}
public partial class ModelName
{
public static int Insert(dynamic theVm)
{
using (ModelEntities ctx = new ModelEntities ())
{
ModelName mn= new ModelName();
mn.AddressLineOne = theVm.AddressLineOne;
mn.AddressLineTwo = theVm.AddressLineTwo;
ctx.TheTargetedEntity.Add(mn);
ctx.SaveChanges();
return mn.id;
}
}
}
一位同事建议我应该做一个额外的项目,让 BL 和 UI 都引用,这样我就可以对我传递的参数进行强类型化(并尽可能避免弱类型化)。我的问题是,在这种情况下,它似乎在解决方案中引入了不必要的元素。
我是在以一种过于简单的方式看待这个问题,还是这个建议使问题过于复杂,或者我们都完全错过了一些东西(我们都是 MVC 的新手,来自 Web 表单,网站将是中小型网站)。
【问题讨论】:
-
在POST方法中,初始化数据模型的一个实例,并将视图模型属性映射到它,然后保存数据模型。
-
那不会让我的控制器“变胖”吗?我读过也应该避免。
-
我绝对会建议和你的同事一样,我认为
very bad实践使用dynamic用于BL 公共API。不知道为什么你认为这是不必要的 - 你仍然会在 BL 和 UI 之间有很强的解耦。 -
当然不是。至于“胖”与“瘦”控制器 - 这是一个见仁见智的问题。但不好的做法是使用动态并在模型内部访问数据库
-
谢谢。我可能会听从同事的建议
标签: c# asp.net-mvc entity-framework architecture entity-framework-6