c# - 如何加快我的 MVC4 应用程序开发速度?

标签 c# .net asp.net-mvc-4 poco

我知道这听起来很奇怪 - 请允许我解释一下:

我目前正在开发一个带有数据库的标准网络应用程序。我选择使用 IoC 框架 (Ninject)、Entity Code First、Bootstrap 和其他一些相关技术。我已经用 UML 转录了一个数据库模型,现在我正在尝试逐步实现它。这通常是这样的:

  1. 选择要实现的功能。
  2. 检查需要哪些数据库表。
  3. 创建适当的 POCO 类
  4. 使用迁移工具生成新的数据库
  5. 创建功能所需的所有必需的 CRUD 方法。 (我知道我应该创建单元测试,但根本没有时间 :/)

第一个问题是 - 以上内容对您来说看起来“正常”吗?也许我错过了一些可以加快我的发展的东西?或者也许我应该添加一些更多的步骤 - 例如 - 尽早发现更多错误?

现在下一步是创建 View ,所以我会这样做:

  1. 在适当的 Controller 内创建 ViewMethod。
  2. 基于一个或多个 POCO 数据库类创建 ViewModel
  3. 为我的新 ViewModel 创建编辑器模板
  4. 在 Controller 内部创建功能逻辑。

上述方法的问题是:

  1. 我经常需要创建几乎是 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/

相关文章:

c# - 如何转换 GroupedEnumerable?

c# - 无法找到请求的.Net Framework 数据提供程序。它可能没有安装。

c# - 复制一个更大的位数组(右对齐)

.net - 模块划分——如何正确划分?如何分离现有的能力?

asp.net-mvc - 带有 HTML5 语义标记的 MVC4 项目 HtmlHelper.EditorFor 使用 HTML5 输入类型

javascript - WebApi 捕获连接超时错误

c# - 模拟 Controller 以测试区域内的 ViewEngine - nullreference 和 RouteData

c# - 是否可以在执行期间更改变量的值?

.net - 现有的细粒度访问控制库/框架?

c# - 如何使用 Linq 实现 NextRcord 和 PreviousRecord 按钮?