写点什么

ASP.NET 里的支架:Dynamic Data Support

  • 2007-12-23
  • 本文字数:1997 字

    阅读完需:约 7 分钟

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 应用的基本步骤:

  1. 定义你的模型:这一步不是特别针对 Dynamic Data 的,但这是一切的起点。你有一个数据库,就需要为它创建一个模型,现在,这一步可以由 LINQ to SQL 来完成,不久后 LINQ to ENtities 也可以完成同样的工作。
  2. 测试应用的支架版本:无需额外的工作量,Dynamic Data 就可以让你的支架版本的 Web 应用运行在你的数据方案之上。尽管这个支架版本只有一些简单“标准”的 UI,但是已足够让你对数据表进行所有 CRUD 的操作(译者注:C 即创建 -Create,R 即读取 -Read,U 即更新 -Update,D 即删除 -Delete),而且它全面支持数据表关系。以 Northwind 为例,假设在产品页中可能允许你浏览产品的类别信息,而编辑产品类别名称可能会是在一个下拉框中进行,那么它将显示类别名称,而不是 ID。
  3. 定制共享页面视图:接下来就可以修改显示支架视图的页面模板,你所做的改变将会影响到所有与此表相关联的视图。
  4. 定制详细的页面:下一步就是对一些具体的页面进行相应的制定,例如,你可以让一个页面显示产品,而用另一个页面来显示类别。在这一步,你可以按照你自己的步调来创建具体的页面,以保证每个点都能体现应用功能。
  5. 注解你的模型:可以通过为你的模型增加属性的方式来为某些字段增加一些额外的信息。例如,你可以为产品的 UintInStock 字段设置一个取值范围,只允许该字段取值在 0 至 50 之间,UI 就会自动获取这一信息,并对输入进行校验。这一点的好处就在于你只需要将这些信息保存在你的模型中,而无需让你的页面为此变得杂乱。
  6. 创建定制的字段模板: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

2007-12-23 22:442865
用户头像

发布了 90 篇内容, 共 15.5 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

如何使用 taosKeeper 做好监控工作,时序数据库 TDengine 3.0 监控工具详解

TDengine

大数据 tdengine 物联网 时序数据库 数据监控

vivo全球商城:电商交易平台设计

vivo互联网技术

分布式事务 订单管理 架构设计 多租户 交易平台

C生万物 | 反汇编深挖【函数栈帧】的创建和销毁

Fire_Shield

C语言 汇编 三周年连更 函数栈帧

数据库原理及MySQL应用 | 约束

TiAmo

数据库 MySQL数据库 三周年连更 数据库约束

成都.NET线下技术沙龙倒计时一天

MASA技术团队

.net 开发者 MASA Stack

不要过于吹捧ChatGPT:人工智能生成文字还有很大提升空间

石头IT视角

Java程序控制结构

timerring

Java

平安证券与易观千帆达成合作,拓宽用户服务新路径

易观分析

金融 证券 经济

程序员如何保住自己的饭碗?| 社区征文

liuzhen007

程序员 三周年征文

ContentProvider介绍

芯动大师

ContextClassLoader 三周年连更

kubernetes delta_fifo源码解析

欢乐的阿苏

golang DevOps 后端 源码阅读 #Kubernetes#

Java数组、排序和查找

timerring

Java

安全沙箱技术的原理、应用程序的安全性和稳定性

没有用户名丶

一定是疯了!在M1的Mac上玩OpenVINO,让Intel怎么看我?

IT蜗壳-Tango

OpenVINO Stable Diffusion 三周年连更

从ReentrantLock角度解析AQS

Java AQS 并发

【Linux】之【磁盘】相关的命令及解析[df、du、iostat、iotop]

A-刘晨阳

Linux 三周年连更 磁盘空间

有史以来最完整包SpringBoot学习笔记整合,该有的应有尽有

会踢球的程序源

Java 后端 Spring Boot CLI

2023最新版Java面试八股文大全PDF版限时分享,含700道高频面试题

会踢球的程序源

Java 架构 java面试 Java工程师 八股文

kubernetes fifo源码解析

欢乐的阿苏

golang DevOps 后端 源码阅读 #Kubernetes#

AI日课@20230412:Prompt Engineering

无人之路

ChatGPT

Spider实战-抓取视频

浅辄

三周年连更

Java开发人员必知的常用类库,这些你都知道吗?

会踢球的程序源

#java

openEuler、龙蜥Anolis、统信UOS系统下编译GreatSQL二进制包

GreatSQL

专注写作:Ulysses for Mac中文版

真大的脸盆

Mac markdown编辑器 Mac 软件 文本编辑 文本管理工具

Vue.js 数据双向绑定的实现

格斗家不爱在外太空沉思

Vue ES6 三周年连更

RocketMQ入门:(整合springboot)单机部署&集群部署

Java你猿哥

Java RocketMQ Spring Boot 架构师

Go语言开发小技巧&易错点100例(三)

闫同学

Go 三周年连更

kubernetes indexer源码解析

欢乐的阿苏

golang DevOps cache 源码阅读 #Kubernetes#

Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例

陈言必行

Unity 三周年连更

Golang并发编程实战:使用ring buffer实现高效的阻塞队列

Jack

跨平台应用开发进阶(四十三)一文走近网络层抓包工具:WhireShark

No Silver Bullet

网络层 抓包工具 三周年连更

ASP.NET里的支架:Dynamic Data Support_.NET_Hartmut Wilms_InfoQ精选文章