我知道这听起来很奇怪 - 请允许我解释一下:
我目前正在开发一个带有数据库的标准网络应用程序。我选择使用 IoC 框架 (Ninject)、Entity Code First、Bootstrap 和其他一些相关技术。我已经用 UML 转录了一个数据库模型,现在我正在尝试逐步实现它。这通常是这样的:
- 选择要实现的功能。
- 检查需要哪些数据库表。
- 创建适当的 POCO 类
- 使用迁移工具生成新的数据库
- 创建功能所需的所有必需的 CRUD 方法。 (我知道我应该创建单元测试,但根本没有时间 :/)
第一个问题是 - 以上内容对您来说看起来“正常”吗?也许我错过了一些可以加快我的发展的东西?或者也许我应该添加一些更多的步骤 - 例如 - 尽早发现更多错误?
现在下一步是创建 View ,所以我会这样做:
- 在适当的 Controller 内创建 ViewMethod。
- 基于一个或多个 POCO 数据库类创建 ViewModel
- 为我的新 ViewModel 创建编辑器模板
- 在 Controller 内部创建功能逻辑。
上述方法的问题是:
我经常需要创建几乎是 POCO 实体的副本,然后 - 在保存过程中,我需要将它转换回适当的 POCO 实体,通常是这样的:
PocoEntity1 pocoEntity1 = new () { UserName = ViewModel.UserName, UserPicture = ViewModel.UserPicture (and so on) }
以上内容非常耗时且容易出错 - 另一方面,如果我直接使用 POCO,我将不得不添加很多属性,例如:
[Required]
[StringLength(128)]
[DisplayNameLocalizer("FirstName", typeof(TranslationStrings))]
不推荐这样做(有时我想根据 View 为某些属性使用不同的名称)。
问题是 - 难道没有什么“介于两者之间”吗?例如,允许我将 ViewModelEntity 直接转换为 POCO 实体的东西将非常有用。有什么我可以做的来加快速度,还是我现在做事的方式正确?
最佳答案
我敢肯定有人会说对 Entity Framework 使用内置 Controller 脚手架,但我构建真实世界 MVC 应用程序的经验是,内置脚手架非常适合业余项目和 POC,但总是不够用在现实世界。您可以构建自己的脚手架功能,但这不是我以前尝试过的。
回答您关于“介于两者之间”的问题,例如将您的 View 模型映射到 POCO,我强烈建议使用像 AutoMapper 这样的映射器库为了这。然后你的 Controller 代码会变成这样(没有测试语法错误):
[HttpPost]
public ActionResult Edit(int id, YourViewModel model)
{
if (ModelState.IsValid)
{
var poco = repository.getPoco(id);
Mapper.Map<YourViewModel, YourPoco>(model, poco);
repository.Save();
return RedirectToAction("List");
}
return View(model)
}
关于c# - 如何加快我的 MVC4 应用程序开发速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039209/