Navigation 是一个库,通过将 CRUD[1] 逻辑从后置代码文件中分离出来,从而使得 ASP.NET Web 窗体更易测试。Graham Mendick 的文章“用 Navigation 进行单元测试”介绍了一些相关功能、以及如何编写单元测试。
这个库是做什么的?它使得
- 控件将被绑定到位于单独类中的控制器方法上。
- 导航绑定(Navigational binding)
所有位于 aspx 页面的标记。例如,用于将 FormView 控件绑定到其控制器方法(controller method)的标记将如下所示——
<big></big><p><asp:FormView ID="Question" runat="server" DataSourceID="QuestionDataSource" DefaultMode="Edit"><br></br> <EditItemTemplate><br></br> </EditItemTemplate><br></br> </asp:FormView> <br></br> <asp:ObjectDataSource ID="QuestionDataSource" runat="server" SelectMethod="GetQuestion" UpdateMethod="UpdateQuestion" TypeName="Survey.SurveyController" DataObjectTypeName="Survey.Question" /></p>
其中GetQuestion
和UpdateQuestion
是在名为SurveyController
的外部类中实现的控制器方法——它们不能直接访问控件,而是通过 Navigation 库将数据传递给它们。Survey.Question
引用一个在本示例中使用的视图模型(ViewModel)来传输数据。
为何说它可以简化单元测试?因为现在,业务逻辑位于单独的、无任何 web 特定行为的 POCO[2] 类中。所以说它使得测试变得更容易。更多详细信息请参阅此文。
尽管我们已在InfoQ 上提到过, WebForms 4.5 获得 model binders(模型联编程序)开箱即用(out-of-the-box)——然而这个库允许将控制器方法放置到单独的类中,从而取代后置代码文件,这对于可测试性和可重用性似乎更好。如果您有兴趣,可以下载 Navigation NerdDinner 演练代码。
译注
[1] CRUD,即 Create, Read, Update, Delete 的首字母缩写,指数据库操作中的创建、读取、更新、删除。
[2] POCO,即 Plain Old CLR Object 的缩写,简单传统 CLR(公共语言运行库)对象,更多详细信息请参阅维基百科。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论