CodeSmith 发布代替和扩展 LINQ to SQL 的工具——PLINQO

阅读数:2248 2007 年 9 月 2 日

话题:.NETDevOps语言 & 开发架构

CodeSmith 最近发布了一套用于 CodeSmith 和 Visual Studio 2008 的模板,叫做 PLINQO 或 Professional LINQ to Objects。这些模板被用于补充微软即将发布的 LINQ to SQL 的设计功能,其包含了如下很多优秀的特性:

  • 从数据库结构生成或更新 LINQ to SQL 的 dbml 文件
    • 包括所有表、存储过程、函数和视图,并能基于正则表达式来排除特定对象
    • 能自动删除对象的前缀和后缀(如:tbl_ 和 usp_)
    • Dbml 文件依然能通过普通的 Visual Studio 2008 设计器来自定义
    • Dbml 文件能被当前数据库结构在保持自定义信息的情况下进行同步更新(参看 Safe Attributes)
  • 生成 LINQ to SQL 的 DataContext 类
  • 生成 LINQ to SQL 的实体类
    • 为每个实体生成一个文件,而不是只生成一个大型的文件
    • 生成分部类,用于书写自定义代码,以避免被自动生成的代码覆盖
    • 生成的实体文件作为和他们相关的自定义实体文件的后置代码文件被添加到项目里
  • 生成实体管理类
    • 添加可定制的业务逻辑引擎来执行实体验证、业务和安全规则
    • 为基于主键、外键和索引的通用查询提供访问
    • 通用查询可暴露为 IQueryable 以便能被扩展
  • 所有模板都能被自定义以满足你的需要

InfoQ 最近有机会采访了 Eric J. Smith(CodeSmith Tools LLC 的创始人)和 PLINQO 有关的事情。Eric 解释了发布 PLINQO 的目的:

很多开发人员,包括我们自己,不喜欢黑盒方式。所以我们创建这些模板的目的就是消除黑盒,并允许我们自己和其他开发人员能够自定义 LINQ to SQL 设计器的输出内容。我们也希望能扩展生成类的功能,包括业务逻辑、授权逻辑和其他特性。

在 PLINQO 的宣布博客随笔中,提到他们意欲替换和扩展包含在 Visual Studio 2008 中的 LINQ to SQL 设计器。因为微软有他们自己的 LINQ to objects 和 LINQ to SQL 技术,InfoQ 问到他们的模板是否真能作为 LINQ to SQL 的替代品或 LINQ to Objects 替代品,并问到为什么取名和微软的重叠?Eric 答复:

PLINQO 是个 LINQ to SQL 替代品,但和 LINQ to Objects 没有关系。我们知道这可能会引起一些混淆,但是我们真的需要一个有趣的名称,并且我们也非常喜欢 PLINQO 这个名字。PLINQO 就像一种“正确价格”(the Price is Right)的游戏,Plinko,恰好就是“正确价格”游戏中最火爆的一个。:-)

在问到为什么开发人员会采用你们的模板,而不是简单使用微软提供的功能:

使用 PLINQO 模板而不用设计器有几个优点。下面是一个主要原由的列表:
  • 能轻易地从数据库中生成整个.dbml 文件,然后能在数据库结构改变的时候重新生成.dbml 文件,并同时保留任何你做出的自定义信息,如实体、熟悉和关系命名。假设使用设计器的话,如果你改变了数据库结构,你需要删除某个实体并重新添加它以得到新的列或数据类型变化,这样会让你失去任何你做出的自定义信息。另外,使用模板允许你排除不想要的表、存储过程和视图,其通过运用过滤器表达式实现;自动的剥离和清理实体和属性的名称,如数据库结构可能使用的前缀和后缀(比如:tbl_Customer 变为 Customer)
  • 业务逻辑引擎运行你执行诸如属性长度规则、必需字段规则、正则表达式数据验证规则以及其他包括授权规则在内的内置规则等事情。数据上下文对象中的 SubmitChanges 方法将针对你变更集合中任何实体自动运行这些规则。如果不是所有规则都满足,那么一个包含了违反规则列表的 BrokenRulesException 异常将被抛出。
  • 每个实体都生成了一个管理类,其封装了一个实体能完成的所有动作。已知的通用动作,如通过主键、索引和外键检索实体的动作都会被生成。任何自定义的动作也可以被添加,并在重新生成期间将被保留。虽然 LINQ 让你实现贯穿整个应用程序的数据访问逻辑变得很容易,我们仍认为它的设计是比较差的,所以这就是我们包含进管理类的原因。

这个模板能工作于 CodeSmith 4.0+ 版本(参看 InfoQ 相关报道),也能工作在安装了 CodeSmith4.1 的 VS2008 中。未来的版本,CodeSmith 打算添加单元测试、UI 生成和 Web Serice 的生成支持。Paul Welter 是这个模板的领头开发人员。Eric 同时提到模板正在逐步完善当中,任何反馈都欢迎。我们将欢迎任何反馈和想法。可以查看CodePlex 上的项目Quick Start

PLINQO 是一个优秀的例子,它体现了我们所期望的那样——CodeSmith 和其他第三方能为微软的 LINQ 技术添加额外的价值。往往就是如此,供应商在看到能为一个基础性技术进行加强的领域后,就为开发人员工作更轻松迈出了步伐。PLINQO 就是为将来更多的工作走出的非常好的第一步。

查看英文原文:CodeSmith's PLINQO: Replace & Extend LINQ to SQL