如何为MVC3生成服务和存储库层

时间:2011-09-15 22:16:19

标签: asp.net-mvc-3 entity-framework repository scaffolding

我最近为使用微型ORM实现的Repository模式的客户端完成了一个MVC3项目,并为我的业务逻辑提供了服务层。恕我直言,该应用程序运行良好,客户很高兴。

但是每当我想添加/实现新服务和相关的DTO时,我都必须编写很多样板代码。此外,还有相当数量的代码重复,将DTO转换为View Models,然后再将相关的PEBKAC转换回来。随着需求的发展,数据库模式发生了变化,需要直接传播到View模型。

对于另一个客户端,我继承了一个.netTiers代码生成项目,这让我感到非常悲痛,直到我修复了基本模板中的一些缺陷,使用MSBuild自动生成代码,并且还使用MSBuild,按摩生成的代码以获取它没有以前需要的手动调整目录。 .netTiers最终产生了许多有用的代码,但是有大量的重复,一堆复杂性,感觉就像用大锤给猫皮肤擦拭。

现在我正在寻找另一个MVC3项目,我想避免自己编写所有样板文件,但我也想避免完整的.netTiers类型代码生成。我没有用EF。我倾向于认为它对于我承担的项目规模而言是一个太大的工具,但如果它可以为我带走一些手动步骤那么这将是一个很大的节省时间。 EF的优点是什么?它会为我设计服务层吗?

我正在考虑的另一个选项是LightSpeed,这需要我花一些钱(不是很多),但是如果它可以为我生成服务层代码,那将花费很多钱。 LightSpeed是否支持这种类型的代码生成?

显然,随着域模型和数据库模式的发展,需要更新服务以适应这些变化。 .netTiers通过生成部分类来实现这一点。这些其他工具如何在不覆盖服务层中的任何自定义逻辑的情况下处理这些更改?

还有哪些其他选择?

更新:感谢您提供的所有反馈,以及许多积极的选择。有人看过MVC Scaffolding吗?

更新#2:我将继续推行MVCScaffolding选项,为EF Code First生成代码。开箱即用它会产生一个Repository类,然后有点不幸地将它与模型结合在一起,在MVC中实际上是View Model而不是域模型。对于服务层脚手架的MVCScaffolding项目有一个pull请求,因此将调查该选项。加上用于映射POCO的AutoMapper< - > DTO的。

2 个答案:

答案 0 :(得分:5)

T4模板工作得很好,很容易修改。它们可用于datatier层以及任何服务层。

我们仅用于EF代码的过程:

  1. 从我们的数据库构建edmx
  2. 安装T4 POCO类生成模板
  3. 生成我们的POCO和上下文类
  4. 删除我们的edmx和T4模板,保留POCO和上下文类
  5. 实体框架中的新工具非常棒,因为它们为您提供了多种选择:

    模型第一:

    1. edmx中的模型
    2. 从edmx生成数据库
    3. 从edmx
    4. 生成POCO类
    5. (可选)删除edmx,运行仅限代码
    6. 代码优先:

      1. 编写POCO课程
      2. 从POCO类生成数据库
      3. (可选)从POCO类生成edmx
      4. 数据库优先:

        1. 构建数据库
        2. 从数据库生成edmx
        3. 从edmx
        4. 生成POCO类
        5. (可选)删除edmx,运行仅限代码
        6. 附录(14/01/2012):

          Code First Migrations的测试版已经发布。我们还没有调查它,但它看起来很有趣。

答案 1 :(得分:0)

我使用automapper作为实体 - > dto翻译