67、书店应用程序:中间层开发实战

书店中间层开发实战

书店应用程序:中间层开发实战

1. 目标概述

在本次实践中,我们将聚焦于构建书店应用程序的中间层。具体目标如下:
- 运用 Visual Basic 代码编写中间层的功能。
- 修改 Web 应用程序中的代码隐藏文件。
- 利用会话处理在 ASPX 页面之间传递信息。
- 实现部分页面更新。

2. 书店 Web 应用程序回顾

在之前的操作中,我们已经对三层架构的书店 Web 应用程序进行了测试驱动,创建了网页和数据库组件。现在,我们要编写代码来明确该应用程序的功能。在开始创建中间层之前,需要回顾应用程序的伪代码和 ACE 表。

2.1 伪代码逻辑

操作场景 具体操作
当请求 Books 页面时 从数据库中检索书籍标题,并在 ListBox 中显示。
用户从 ListBox 中选择书籍标题时 在 ListBox 下方的 Image 控件中显示该书的封面图像。
用户点击“查看信息”按钮时 - 若用户未从 ListBox 中选择书籍,显示错误消息。
- 否则,存储所选书籍的产品 ID,并将浏览器重定向到 BookInformation 页面。
当请求 BookInformation 页面时 从数据库中检索所选书籍的信息,在 Label 中显示书籍标题和作者,在 Image 中显示封面艺术,在 DetailsView 中显示其余信息。
用户在 BookInformation 页面点击“返回书籍列表”按钮时 将浏览器重定向回 Books 页面。

2.2 ACE 表

操作 控件/对象 事件
标记 Books 页面 availableLabel, instructionsLabel Page Load (for Books.aspx)
从数据库中检索书籍标题 linqDataSource -
在 ListBox 中显示书籍标题 bookTitlesListBox bookTitlesListBox SelectedIndex-Changed
在 Image 中显示书籍封面图像 bookTitlesListBox, db (an object class Book-InformationDBData-Context), coverImage informationButton Click
若用户未从 ListBox 中选择书籍 bookTitlesListBox -
显示错误消息 bookRequiredField-Validator -
否则,存储所选书籍的产品 ID 到会话变量 bookTitlesListBox, Session -
将浏览器重定向到 BookInformation 页面 Response -
当 BookInformation 页面加载时 db (an object of class BookInformationDB-DataContext), Session Page Load (for Book-Information.aspx)
在 Label 中显示书籍标题 bookTitleLabel -
在 Label 中显示作者 authorsLabel -
在 Image 中显示封面艺术 bookImage -
在 DetailsView 中显示其余信息 linqDataSource, bookDetailsView -
用户点击“返回书籍列表”按钮 bookListButton Click
将客户端浏览器重定向回 Books 页面 Response -

3. 编写 Books 页面的代码隐藏文件

3.1 更改 Books.aspx.vb 中的类名

3.1.1 打开项目
  • 打开 Visual Web Developer,选择“文件”>“打开网站…”,在弹出的“打开网站”对话框中,点击“文件系统”,选择 C:\SimplyVB2008 目录下的 Bookstore 文件夹,然后点击“打开”按钮打开书店 Web 应用程序。
3.1.2 显示代码隐藏文件
  • 每个在 Visual Web Developer 中创建的 ASPX 页面都有一个用 .NET 语言(如 Visual Basic)编写的对应类。包含这个类的 Visual Basic 文件称为代码隐藏文件,其扩展名为 .aspx.vb。若未选中,点击解决方案资源管理器工具栏中的“嵌套相关文件”按钮,展开 Books.aspx 节点以显示代码隐藏文件 Books.aspx.vb。
3.1.3 查看代码隐藏文件
  • 双击解决方案资源管理器窗口中的 Books.aspx.vb 查看该文件。由于尚未开始编写事件处理程序,此文件中目前没有命令。
3.1.4 修改类名和属性
  • 删除类定义上方的空行,将 Books.aspx.vb 第 1 行的类名从 _Default 更改为 Books。
  • 在 Books.aspx 的源视图中,将第 2 行 Page 指令中的 Inherits 属性从 Inherits=”_Default” 更改为 Inherits=”Books”,确保 ASPX 页面标记中的代码成为代码隐藏文件中 Books 类的一部分。
  • 选择“文件”>“全部保存”保存修改后的代码。

3.2 定义“查看信息”按钮的 Click 事件处理程序

3.2.1 创建事件处理程序
  • 切换到 Books.aspx 的设计视图,双击“查看信息”按钮,在 Books.aspx.vb 文件中创建事件处理程序 informationButton_Click。
3.2.2 添加代码到事件处理程序
  • 向事件处理程序中添加以下代码:
' 以下为示例代码结构,实际代码需根据图 31.6 中的 8 - 12 行添加
' 利用会话跟踪功能,在不同 ASPX 页面间共享用户数据
Session("productID") = bookTitlesListBox.SelectedValue
Response.Redirect("BookInformation.aspx")
  • 通常,Web 应用程序是无状态的,但可以使用 ASP.NET 的会话跟踪功能在页面间共享用户数据。上述代码通过向 Session 对象添加键值对来实现这一点,然后使用 Response 对象的 Redirect 方法将浏览器重定向到 BookInformation 页面。
3.2.3 保存项目
  • 选择“文件”>“全部保存”保存修改后的代码。

3.3 显示所选书籍的封面图像

3.3.1 放置图像文件
  • 使用 Windows 资源管理器定位到 C:\Examples\Tutorial31\images 目录,该目录包含书籍封面图像。
  • 将 images 目录复制到 C:\SimplyVB2008\Bookstore 目录,点击解决方案资源管理器工具栏中的“刷新”按钮,确保 images 目录出现在解决方案资源管理器中。也可以直接从 Windows 资源管理器将 images 文件夹拖到 Visual Web Developer 解决方案资源管理器顶部的 C:\SimplyVB2008\Bookstore 目录。
3.3.2 定义 ListBox 的 SelectedIndexChanged 事件处理程序
  • 在设计视图中双击 bookTitlesListBox,创建其 SelectedIndexChanged 事件处理程序,并添加以下代码:
' 以下为示例代码结构,实际代码需根据图 31.7 中的 20 - 30 行添加
Dim db As New BookInformationDBDataContext()
Dim coverFile = (From b In db.Books Where b.ProductID = bookTitlesListBox.SelectedValue Select b.Coverart).Single()
coverImage.ImageUrl = coverFile
coverImage.Visible = True
  • 上述代码通过 LINQ 查询从数据库中检索所选书籍的封面图像文件名,并将其赋值给 Image 控件的 ImageUrl 属性,然后使 Image 控件可见。
3.3.3 启用 ListBox 的 AutoPostBack
  • 切换到设计视图,选择 bookTitlesListBox,点击 ListBox 右上角的小黑色三角形,打开 ListBox 任务菜单,点击“启用 AutoPostBack”复选框。当所选索引更改时,浏览器会自动重新请求页面,服务器会响应 SelectedIndexChanged 事件,确定所选图像并将页面重新发送回客户端。
3.3.4 保存项目
  • 选择“文件”>“全部保存”保存修改后的代码。

3.4 自测问题

  1. 哪个类定义了 ASPX 页面的基本功能?(答案:c)
    • a) Form
    • b) WebForm
    • c) Page
    • d) None of the above
  2. 哪个属性会强制浏览器自动重新加载 ASPX 页面以响应控件的事件?(答案:a)
    • a) AutoPostBack
    • b) Reload
    • c) RePost
    • d) ForcePostBack

4. 编码 BookInformation 页面的代码隐藏文件并绑定数据到 DetailsView

4.1 定义 BookInformation.aspx 的 Page_Load 事件处理程序

4.1.1 查看代码隐藏文件
  • 在解决方案资源管理器中右键单击 BookInformation.aspx,选择“查看代码”查看代码隐藏文件 BookInformation.aspx.vb。注意类名是 BookInformation,删除类定义上方的空行。
4.1.2 插入 Page_Load 事件处理程序
  • 从“类名”下拉列表中选择 (Page Events),然后从“方法名”下拉列表中选择 Load,在 BookInformation 类中插入 Page_Load 事件处理程序。
4.1.3 从数据库中检索所选书籍
  • 向 Page_Load 事件处理程序中添加以下代码:
' 以下为示例代码结构,实际代码需根据图 31.11 中的 8 - 25 行添加
Dim db As New BookInformationDBDataContext()
Dim productID As Integer = CInt(Session("productID"))
Dim selectedBook = (From b In db.Books Where b.ProductID = productID Select b).Single()
bookTitleLabel.Text = selectedBook.Title
authorsLabel.Text = selectedBook.Authors
bookImage.ImageUrl = selectedBook.Coverart
  • 上述代码创建了一个 DataContext 对象用于从数据库中检索信息,从会话对象中获取产品 ID,使用 LINQ 查询检索所选书籍,并在相应的控件中显示书籍信息。
4.1.4 保存项目
  • 选择“文件”>“全部保存”保存修改后的代码。

4.2 定义 bookListButton_Click 事件处理程序

4.2.1 创建事件处理程序
  • 在设计视图中双击“返回书籍列表”按钮,创建 bookListButton_Click 事件处理程序。该按钮用于将客户端浏览器重定向回 Books.aspx 页面。
4.2.2 添加代码到事件处理程序
  • 向事件处理程序中添加以下代码:
Response.Redirect("Books.aspx")
  • 选择“文件”>“全部保存”保存修改后的代码。

4.3 使用 LinqDataSource 创建数据绑定的 DetailsView

4.3.1 使 DetailsView 数据绑定
  • 切换到 BookInformation.aspx 的设计视图,选择 bookDetailsView 控件,点击其右上角的小黑色箭头,打开 DetailsView 任务菜单,选择 ,在“选择数据源类型”对话框中选择 LINQ 数据源类型,并将其命名为 linqDataSource,点击“确定”。
4.3.2 配置 LinqDataSource 的数据字段
  • 在出现的“配置数据选择”对话框中,选择之前创建的 BookInformationDBDataContext 对象,然后点击“下一步 >”。确保在“表”组合框中选择 Products 表,勾选 Copyright、Edition、ISBN 和 Description 复选框,使 LinqDataSource 包含 Products 表中所选字段的信息。
4.3.3 配置 LinqDataSource 的 Where 表达式
  • 点击“Where…”按钮,在“配置 Where 表达式”对话框中,从“列”组合框中选择 ProductID,从“运算符”组合框中选择 ==,从“源”组合框中选择 Session。在“参数属性”组框的“会话字段”文本框中输入 productID,点击“添加”按钮。此表达式表示 LinqDataSource 仅从数据库中检索包含与 productID 会话项中值匹配的 ProductID 的条目。点击“确定”关闭“配置 Where 表达式”对话框,点击“完成”关闭“配置数据源”对话框。
4.3.4 检查数据绑定的 DetailsView
  • 此时 bookDetailsView 已绑定到 linqDataSource 中的信息,字段已更新以显示在“配置数据源”对话框中选择的列名。可以重新排序 DetailsView 中的字段,打开 DetailsView 任务菜单,选择“编辑字段…”,在“字段”对话框中选择字段并使用上下箭头按钮移动字段,也可以添加和删除字段。按照图 31.16 排列字段后点击“确定”关闭“字段”对话框。
4.3.5 保存项目
  • 选择“文件”>“全部保存”保存修改后的代码。

至此,我们完成了书店 Web 应用程序的中间层开发,并对其进行了全面的配置和测试。通过上述步骤,我们实现了页面间的数据传递、数据库信息的检索和显示,以及用户交互的处理。在实际应用中,还可以根据需求进一步优化和扩展该应用程序,例如添加更多的功能页面、优化数据库查询性能等。

5. 测试书店 Web 应用程序

在完成书店 Web 应用程序的中间层开发后,需要对其进行测试,以确保各项功能正常运行。以下是测试该应用程序的具体步骤:

5.1 启动应用程序

  • 打开 Visual Web Developer 中的书店 Web 应用程序。
  • 选择“调试”>“开始调试”(或按 F5 键)启动应用程序。

5.2 测试 Books 页面功能

5.2.1 检查书籍标题显示
  • 应用程序启动后,应显示 Books 页面。确认页面上的 ListBox 中显示了从数据库中检索到的书籍标题。
5.2.2 测试书籍封面图像显示
  • 点击 ListBox 中的某个书籍标题,查看该书籍的封面图像是否显示在 ListBox 下方的 Image 控件中。这是通过 ListBox 的 SelectedIndexChanged 事件触发的,确保该功能正常工作。
5.2.3 测试“查看信息”按钮功能
  • 不选择 ListBox 中的任何书籍,直接点击“查看信息”按钮,应弹出错误消息,提示用户选择一本书籍。
  • 选择 ListBox 中的一本书籍,然后点击“查看信息”按钮,浏览器应重定向到 BookInformation 页面,并且 Session 中应正确存储了所选书籍的产品 ID。

5.3 测试 BookInformation 页面功能

5.3.1 检查书籍信息显示
  • 在 BookInformation 页面加载后,确认页面上的 Label 控件中显示了所选书籍的标题和作者,Image 控件中显示了封面艺术,DetailsView 控件中显示了书籍的 ISBN、版本、版权和描述等信息。
5.3.2 测试“返回书籍列表”按钮功能
  • 点击“返回书籍列表”按钮,浏览器应重定向回 Books 页面。

5.4 测试数据绑定功能

  • 在 BookInformation 页面中,检查 DetailsView 控件是否正确显示了从数据库中检索到的书籍信息。可以通过修改数据库中的书籍信息,然后重新加载页面,查看 DetailsView 控件中的信息是否相应更新。

5.5 测试会话状态功能

  • 在测试过程中,确保会话状态正常工作。例如,在从 Books 页面重定向到 BookInformation 页面时,Session 中存储的产品 ID 应正确传递,并且在 BookInformation 页面中可以正确使用该 ID 从数据库中检索书籍信息。

5.6 测试流程图

graph LR
    A[启动应用程序] --> B[显示 Books 页面]
    B --> C{点击 ListBox 标题}
    C -- 是 --> D[显示书籍封面图像]
    C -- 否 --> E{点击“查看信息”按钮}
    E -- 未选书籍 --> F[显示错误消息]
    E -- 已选书籍 --> G[重定向到 BookInformation 页面]
    G --> H[显示书籍信息]
    H --> I{点击“返回书籍列表”按钮}
    I --> J[重定向回 Books 页面]

6. 总结与扩展

6.1 总结

通过本次开发,我们成功完成了书店 Web 应用程序的中间层开发,实现了以下主要功能:
- 使用 Visual Basic 代码编写了中间层的功能,包括事件处理程序和数据库查询。
- 修改了代码隐藏文件,确保 ASPX 页面与代码逻辑的正确关联。
- 利用会话处理在 ASPX 页面之间传递信息,实现了用户选择书籍信息的传递。
- 使用 LinqDataSource 进行数据绑定,自动显示数据库中的书籍信息。
- 通过测试,确保了应用程序的各项功能正常运行。

6.2 扩展建议

在实际应用中,可以根据需求对该应用程序进行进一步的扩展和优化,以下是一些建议:

6.2.1 增加用户交互功能
  • 可以添加搜索功能,让用户能够根据关键词搜索书籍。
  • 增加用户评价和评论功能,让用户可以对书籍进行评价和发表评论。
6.2.2 优化数据库查询性能
  • 可以对数据库查询进行优化,例如使用索引、缓存等技术,提高查询效率。
6.2.3 增加安全性
  • 可以添加用户认证和授权功能,确保只有授权用户才能访问某些页面和功能。
  • 对用户输入进行验证和过滤,防止 SQL 注入等安全漏洞。
6.2.4 扩展功能列表
扩展功能 实现思路
搜索功能 在 Books 页面添加搜索框,根据用户输入的关键词在数据库中进行模糊查询,并将结果显示在 ListBox 中。
用户评价和评论功能 在 BookInformation 页面添加评价和评论输入框,用户提交后将数据存储到数据库中,并在页面上显示。
用户认证和授权 使用 ASP.NET 的身份验证和授权机制,创建用户登录和注册页面,对不同用户角色进行权限管理。
输入验证和过滤 在用户输入表单中添加验证控件,对用户输入进行验证,防止恶意输入。

6.3 未来展望

随着 Web 技术的不断发展,我们可以进一步改进该应用程序,例如使用更先进的前端框架(如 React、Vue.js)来提升用户体验,使用云计算技术来提高应用程序的可扩展性和可靠性。同时,还可以结合大数据和人工智能技术,为用户提供更个性化的书籍推荐服务。

通过本次开发和扩展,我们不仅掌握了 ASP.NET 开发的基本技能,还了解了如何根据实际需求对应用程序进行优化和扩展,为今后的 Web 开发工作打下了坚实的基础。

内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
内容概要:文章围绕智能汽车新一代传感器的发展趋势,重点阐述了BEV(鸟瞰图视角)端到端感知融合架构如何成为智能驾驶感知系统的新范式。传统后融合与前融合方案因信息丢失或算力需求过高难以满足高阶智驾需求,而基于Transformer的BEV融合方案通过统一坐标系下的多源传感器特征融合,在保证感知精度的同时兼顾算力可行性,显著提升复杂场景下的鲁棒性与系统可靠性。此外,文章指出BEV模型落地面临大算力依赖与高数据成本的挑战,提出“数据采集-模型训练-算法迭代-数据反哺”的高效数据闭环体系,通过自动化标注与长尾数据反馈实现算法持续进化,降低对人工标注的依赖,提升数据利用效率。典型企业案例进一步验证了该路径的技术可行性与经济价值。; 适合人群:从事汽车电子、智能驾驶感知算法研发的工程师,以及关注自动驾驶技术趋势的产品经理和技术管理者;具备一定自动驾驶基础知识,希望深入了解BEV架构与数据闭环机制的专业人士。; 使用场景及目标:①理解BEV+Transformer为何成为当前感知融合的主流技术路线;②掌握数据闭环在BEV模型迭代中的关键作用及其工程实现逻辑;③为智能驾驶系统架构设计、传感器选型与算法优化提供决策参考; 阅读建议:本文侧重技术趋势分析与系统级思考,建议结合实际项目背景阅读,重点关注BEV融合逻辑与数据闭环构建方法,并可延伸研究相关企业在舱泊一体等场景的应用实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值