使用Visual Studio .NET 创建基于 Web 的 ASP.NET 应用程序的第一步是制定基本的应用程序规划 (AP)。制定规划不仅对于由多个开发人员建立的大型解决方案而言是必不可少的,而且即使对于最小的应用程序,一个完善的 AP 也是非常重要的。创建 AP 有助于您在开始编码“之前”就能仔细考虑一些常见问题。这样,您可以在应用程序生命周期的早期便完全了解挑战和解决方案,而不是在完全陷入窘境之后才发现问题。在《Software Project Survival Guide》一书中,作者 Steve McConnell 指出:在软件项目后期纠正错误所花的成本与在早期阶段发现并纠正这些错误所花的成本相比,前者可能是后者的 50 - 200 倍。
一个完善的项目规划包含哪些内容?可以包含许多内容,但最基本的是要包含目标声明和一系列用户方案。还有其他很多有用的资料,包括需求文档、编码标准、交付进度、测试过程等。对于我们要建立的简单示例解决方案,将主要介绍简单的应用程序声明和一些用户方案。同时还将解决一些其他问题。
应用程序声明
此系列文章要建立的项目(称为 DotNetKB)是一个简单的知识库 Web 站点,在这个站点中,用户可以提各种问题,并可以得到授权“专家”的回答。这样,以后访问者在查找常见 ASP.NET 问题的解决方案时,可以对得到的结果数据进行搜索和过滤。
这是对我们的 DotNetKB 项目的一个基本目标声明。DotNetKB 是一个基于 Web 的应用程序,它可以列出访问者提出的一系列问题,并显示授权专家对这些问题作出的回复。访问者可以向系统添加新问题,并可以按照问题的主题、问题和/或回答中的关键字来搜索和过滤这些问题。访问者还可以按主题或按添加到系统中的日期来对问题列表进行排序。
授权专家可以登录到应用程序中已设置安全机制的部分,审阅问题,添加、编辑和删除对一个问题的一个或多个回答。应用程序管理员还可以建立专家登录权限和登录配置文件,以及添加、编辑和删除问题主题。
此外,还提供了一些基本统计信息,包括系统中问题和回答的数量,以及每个专家的回复数量和至今已被访问的页面数量。
正如您从上面的声明中看到的那样,该解决方案非常简单。在阅读目标声明时,您可能会开始考虑可以添加到这个应用程序的许多其他功能,以使应用程序更加强大。这说明了项目目标声明的一个主要依据,即避免“功能蔓延”。我们都清楚,如果更改最终结果本来基于的概念,简单的想法将导致非常庞大且歪曲的结果。有句老格言:“如果不知道要去往何方,你可能会在某个地方停下来”,它原本揭示的是夏季公路旅行,其道理同样可用于软件项目。
一些项目的目标声明中可能需要包含更多的信息。而对于我们的使用,上面的目标声明就符合要求。现在我们对于要完成的应用程序有了一个清晰的认识,接下来需要一些详细的信息来描述用户如何与系统交互以及用户需要执行哪些任务来完成目标。我们需要一系列用户方案。
文档化用户方案
用户方案没有什么令人惊异之处。通常,它们只是描述用户如何与应用程序交互。用户方案的关键价值在于记录了关于每个人对用户希望系统如何运行以及应用程序应如何响应的设想。通过完成这个过程,您将可以完全了解处理各种用户与系统的交互时所需的数据点和函数。换句话说,编写完善的用户方案将有助于您确定完成解决方案需要实现的数据库、中间件和用户界面元素。
注意:Visual Studio .NET Enterprise Architect 有一项非常不错的功能,即允许您使用 Microsoft Visio? 通过 UML(统一建模语言)创建用户方案,然后生成这些方案的基本代码。在这里,我不打算深入探讨这些细节,但是您可以在 MSDN? Academic Alliance 站点找到一篇关于这一主题的好文章《Generating .NET Code Using Visio Enterprise Architect's UML》,作者是 Sreedhar Koganti。有了上一节的目标声明后,下面是 DotNetKB 项目的几个示例用户方案。
搜索知识库
匿名用户可以输入一个或多个关键字并执行搜索,搜索将返回包含这些关键字的问题和/或回答列表。用户可以将关键字搜索锁定在仅搜索问题、仅搜索回答或者二者都搜索。返回的列表将显示问题及其回复数和被其他用户访问的次数。单击链接将返回以时间先后逆序排列的回复(纯文本)列表。
将新问题输入到知识库中
匿名用户可以浏览用于向数据库输入新问题以供授权专家审阅和回复的屏幕。用户可以输入问题的标题和内容,并可以选择在一系列主题中的某个主题下记录该问题。用户还可以输入他们的名字和相关的 URL(电子邮件、Web 地址等)。输入将被验证,以确保包含必需的数据并确保所有输入数据不会受到脚本攻击等。一旦数据经过验证并被保存到数据库中,用户将看到一个响应屏幕,感谢用户的支持并将用户直接连接到主页。此外,用户还可以选择让该站点“记住”他们的姓名和 URL 以备以后访问该站点时使用。
您已经了解它的工作原理了,对吗?每一个方案都尝试细化用户交互的重要方面。例如,上面列出的两个方案表明用户为“anonymous”(匿名用户),这表示这类用户不需要登录或进行其他方式的授权。第二个示例还标识了若干输入值、验证步骤和可选操作。
当然,这只是两个示例;完整的系统需要更多的方案。此外,需要特别注意的是,“用户”不仅仅可以是人,也可以是您的程序需要与其通信的其他应用程序,甚至还可以是您的应用程序的其他部分。例如,一个方案描述主页如何列出最近添加到知识库中的内容,以供任何人查看。此例中的“用户”将是主页自身。还有一些方案描述专家如何查找和回复新问题以及管理员如何更新主题列表并管理系统的其他部分。我已为讨论这个简单的应用程序标识了 20 多种方案。您可以在 DotNetKB 中找到当前列表(以及与此项目相关的所有其他资料)。
至此我们就有了目标声明和一些用户方案。现在,是时候稍憩一下,然后学学一些技术了。我们需要定义应用程序体系结构,这可以帮助我们以“鲜活有效的代码”实际实现方案。