如何加速我的MVC4应用程序开发?

时间:2014-01-10 08:20:27

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

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

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

  1. 选择要实施的功能。
  2. 检查需要哪些数据库表。
  3. 创建适当的POCO类
  4. 使用迁移工具生成新数据库
  5. 创建功能需要的所有必需CRUD方法。 (我知道我应该创建单元测试,但根本没有时间:/)
  6. 第一个问题是 - 以上看起来对你来说是“正常的”吗?也许我错过了一些可以加速我发展的东西?或许我应该添加更多步骤 - 例如 - 尽早发现更多错误?

    现在下一步是创建视图,所以我做了类似这样的事情:

    1. 在相应的Controller中创建ViewMethod。
    2. 基于一个或多个POCO数据库类创建ViewModel
    3. 为我的新ViewModel
    4. 创建编辑器模板
    5. 在控制器内创建特征逻辑。
    6. 上述方法的问题是:

      1. 我经常要创建几乎POCO实体的副本,然后 - 在保存过程中,我需要将其转换回适当的POCO实体,通常是这样的:

        PocoEntity1 pocoEntity1 = new ()
        {
            UserName = ViewModel.UserName,
            UserPicture  = ViewModel.UserPicture
            (and so on)
        } 
        
      2. 以上是非常耗时且容易出错的 - 另一方面,如果我直接使用POCO,我将不得不添加许多属性,如:

        [Required]
        [StringLength(128)]
        [DisplayNameLocalizer("FirstName", typeof(TranslationStrings))]
        

        并不建议这样做(我有时希望某些属性具有不同的名称,具体取决于视图)。

        问题是 - 介于两者之间是否有任何“?例如,允许我将ViewModelEntity直接转换为POCO实体的东西将非常有用。有什么我可以做的事情来加快速度,或者我现在正在以正确的方式做事吗?

2 个答案:

答案 0 :(得分:4)

我确信有人会说使用内置控制器脚手架来实现实体框架,但我构建真实世界MVC应用程序的经验是,内置脚手架对于业余爱好项目和POC来说很好,但总是很短暂在现实世界。你可以构建自己的脚手架功能,但这不是我以前尝试过的。

要回答有关“介于两者之间”的问题,例如:将您的viewmodel映射到POCO,我强烈建议您使用AutoMapper之类的映射器库。你的控制器代码然后结束这样的事情(没有测试语法错误):

[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)
}

答案 1 :(得分:3)

  

......以上看起来对你来说是“正常的”吗?

对我来说这看起来很正常。另一种方法是首先创建单元测试。声明“没有时间进行单元测试”非常糟糕。我认为这根本不是真的。

让我解释一下: 如果您实现的功能没有单元测试,那么您通常不会提前发现简单的bug。这意味着您需要在最后有更多时间来实现它,因为您可以在实现该功能后立即添加一些时间来修复错误。

  
      
  1. 检查需要哪些数据库表。
  2.   
  3. 使用迁移工具生成新数据库
  4.   

实际上并不需要2.和4.点。想象一下,您可以先使用简单的“内存”存储(...也可以用于单元测试)。您可以稍后创建数据库和表。

  

通常必须创建几乎POCO实体的副本,然后 - 期间   保存程序,我需要将其转换回适当的POCO   实体,通常是这样的:

PocoEntity1 pocoEntity1 = new () 
{ 
  UserName = ViewModel.UserName,
  UserPicture = ViewModel.UserPicture 
  (and so on) 
}

我真的同意你这有时很麻烦。 但是......有一个解决方案。用于AutoMapper(有一个nuget包)

  

上述内容相当耗时且容易出错 - 另一方面   如果我直接使用POCO,我将不得不添加很多   属性如:

     

[...]

     

并不建议这样做(我有时希望有所不同   某些属性的名称,具体取决于视图。

为此,还有另一个很好的帮助库:Fluent Validation (MVC)

这只是允许您为查看模型创建验证器。有了它,您可以为同一个视图模型创建许多验证器 - 无需直接装饰任何模型。