ASP.NET 里的支架:Dynamic Data Support

  • Hartmut Wilms
  • 张海龙

2007 年 12 月 23 日

话题:.NETWeb框架Ruby on Rails语言 & 开发

ASP.NET Dynamic Data Support 是上周已发布的ASP.NET 3.5 Extensions CTP 版的一部分,它提供了一个支架(Scaffolding,译者注:在建筑界称为脚手架)框架,通过使用这一框架,开发者可以基于 ASP.NET 进行快速应用开发。

“支架”的概念起源于建筑和建造领域,是指一个临时的框架,用在建造或修复建筑物时的早期阶段。在编程领域里,支架代码被用来提供临时的支撑结构,直到找到永久的解决方案。其实支架方法在Rails的 MVC Web 框架中已经开始流行了。

Scott Guthrie的博客中,他这样描述ASP.NET Dynamic Data Support

简单地说,ASP.NET Dynamic Data 可以让你非常快速地创建基于 LINQ to SQL(以及未来的 LINQ to Entities)对象模型工作的数据驱动型网站,使用它,你甚至可以在无须手动创建任何页面的情况下完成工作。

David Ebbo还发布了一个视频演示,“从头到尾展示了在创建使用 Northwind 数据库的简单站点的过程中,应用 ASP.NET Dynamic Data 的基本场景”。在对 Dynamic Data 的介绍中,他概括性地给出了快速开发一个 ASP.NET 应用的基本步骤:

  • 定义你的模型:这一步不是特别针对 Dynamic Data 的,但这是一切的起点。你有一个数据库,就需要为它创建一个模型,现在,这一步可以由 LINQ to SQL 来完成,不久后 LINQ to ENtities 也可以完成同样的工作。
  • 测试应用的支架版本:无需额外的工作量,Dynamic Data 就可以让你的支架版本的 Web 应用运行在你的数据方案之上。尽管这个支架版本只有一些简单“标准”的 UI,但是已足够让你对数据表进行所有 CRUD 的操作(译者注:C 即创建 -Create,R 即读取 -Read,U 即更新 -Update,D 即删除 -Delete),而且它全面支持数据表关系。以 Northwind 为例,假设在产品页中可能允许你浏览产品的类别信息,而编辑产品类别名称可能会是在一个下拉框中进行,那么它将显示类别名称,而不是 ID。
  • 定制共享页面视图:接下来就可以修改显示支架视图的页面模板,你所做的改变将会影响到所有与此表相关联的视图。
  • 定制详细的页面:下一步就是对一些具体的页面进行相应的制定,例如,你可以让一个页面显示产品,而用另一个页面来显示类别。在这一步,你可以按照你自己的步调来创建具体的页面,以保证每个点都能体现应用功能。
  • 注解你的模型:可以通过为你的模型增加属性的方式来为某些字段增加一些额外的信息。例如,你可以为产品的 UintInStock 字段设置一个取值范围,只允许该字段取值在 0 至 50 之间,UI 就会自动获取这一信息,并对输入进行校验。这一点的好处就在于你只需要将这些信息保存在你的模型中,而无需让你的页面为此变得杂乱。
  • 创建定制的字段模板:Dynamic Data 中的所有字段都是通过字段模板提供的,一般是一些基础的用户控件,你也可以创建定制的模板,这一功能非常强大,例如,在前面的例子中,你可以创建一个字段模板,通过一个限定取值范围的 Slider 控件来替文本框,页面会自动提取并呈现这一变化,而无需自己去打开 aspx 文件定制 UI。
  • ASP.NET 3.5 Extensions CTP版为 Dynamic Data Web 站点和 Web 应用项目提供 Visual Studio 2008 的模板。在创建了一个基于模板的 Web 站点或 Web 应用后,简单地添加LINQ to SQL数据模型,你就可以运行这个项目,并开始浏览和编辑数据模型中的实体。如果你对此似曾相识,那可能是因为你对那个已中止、曾为支持 ASP.NET Dynamic Data 而努力的Blinq项目还有些印像。

    Quickstart论坛和 David Ebbo 的FAQ提供了更多的帮助和指导。FAQ 上的第一个问题就是:“它能与 ASP.NET 的 MVC 一起工作吗?”,答案是肯定的,但你要下载MVC-Toolkit并仔细查看其中打包的 Blog 示例。

    为了定制 ASP.NET Dynamic Data 应用的行为,你还必须为所建立的数据模型提供元数据,现在的 CTP 提供了一种使用.NET 属性来直接在数据模型中添加格式限定或取值范围校验的方法。Marcin Dobosz展示了如何在 ASP.NET 3.5 Extension 预览版中定制元数据提供者的方法:

    在最近发布的 ASP.NET 3.5 Extensions 预览版中,这种注解是通过在类中宣布代表模型实体的元数据属性的方式实现的,在最初的实现中有一些限制,但不管用怎样的方法,元数据都只能使用 CLR 支持的属性,并且这些属性只能通过类来宣布(即便他们是类的属性也一样)。

    Marcin 解释了为什么说 MVC-Tookit“含有一个可选实现”的原因:

    这个实现有如下改进:
    • 一个基于提供者的插入式元数据模型。
    • 新的元数据属性,它可以通过特定元数据的"buddy"类的特性来声明。
    • 一个基于 XML 文件的可选参考提供者实现。

    ASP.NET Dynamic Data 提供了一个富支架框架,让开发应用的原型变成得非常快速,这些原型可以很容易地通过添加元数据来进行定制。支架是可以被“真实的解决方案”替换的,当它是与 ASP.NET MVC 框架一起使用时,这种替换就更容易了,并且,ASP.NET 网页和 Dynamic Data 网页可以在同一个 ASP.NET 应用中共存。

    查看英文原文Scaffolding in ASP.NET: Dynamic Data Support
    .NETWeb框架Ruby on Rails语言 & 开发