注重: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 中找到当前列表(以及与此项目相关的所有其他资料)。至此我们就有了目标声明和一些用户方案。现在,是时候稍憩一下,然后学学一些技术了。我们需要定义应用程序体系结构,这可以帮助我们以“鲜活有效的代码”实际实现方案。定义应用程序体系结构 有了基本的目的和为解决方案开发的用户方案列表后,您需要开始筹划整体的体系结构。主要目标是标识应用程序的逻辑方面和物理方面,即如何将应用程序拆分为各种有用的部分。在本节中还添加了安全性方面的内容。安全是在规划的“一开始”您就需要考虑的问题,而不是在开发周期中“最后添加”的内容。我们稍后会在本节中具体讨论这个问题。
注重:有关可用选项的具体信息,请参阅 Microsoft Security Developer Center。缓冲区溢出这可能是已编译应用程序中最常见的安全漏洞。由于我们将使用 .NET 运行时,而它是设计用来在内存中安全运行的,因此不太可能发生缓冲区溢出。此外,我们使用 Microsoft Visual Basic® .NET 对解决方案进行编码,而 Microsoft Visual Basic® .NET 不像 C 或 C++ 那样轻易受到缓冲区溢出问题的影响。但是,即使我们打算用 C++ 创建组件,我们还可以使用编译程序的非凡功能,GS 转换,来保护我们免受大多数缓冲区溢出的攻击。数据库攻击另一种常见的安全漏洞可能会使恶意用户获得访问存储在数据库中的原始数据的权限。为了防止黑客获得数据的控制权,我们仅使用 SQL Server 存储过程,而不使用“内联查询”。这样可以大大减少试图在输入流中插入其他 SQL 命令的攻击。我们还在程序中多个位置处使用输入验证,以确保所有输入仅包含有效的字符。交叉站点脚本攻击对 Web 应用程序进行的常见攻击还有一种,它涉及到用户在输入流中添加客户方脚本,这类攻击将执行附加的对话并诱骗用户将个人数据发送到黑客自己的 Web 站点。要解决这个问题,我们使用 ASP.NET 1.1 的一个新功能,过滤出这种恶意代码的所有输入,防止将它置入系统中。显示屏幕上还包含附加代码,它将自动禁用任何脚本或显示可能会插入到数据存储中的标记。至此,我们已获得了应用程序的逻辑模型和物理模型,以及确保实现方案包含的安全功能清单。拥有了这些以及目标声明和用户方案,我们可以开始这次“编码前”探险的最后一部分了。完成设计文档
注重:假如留心的话,您可能会注重到我们未提及将专家数据存储在数据库中。只是为了使项目更加有趣(同时给我们一个机会使用直接 XML 数据存储),我们将专家信息存储在一个 XML 数据文件中。
注重:假如您已尝试过面向消息的设计,便会了解我们想要使这些消息类系列化,以便在应用程序图层之间轻松地往返发送。幸运的是,.NET 运行时知道如何进行这项操作,而无需我们做过多的工作。但是,当我们学习创建消息的文章时,我们将具体讨论 .NET 运行时如何系列化类,以及我们如何进行操作以使代码中的过程最优化。在后面实现消息组件和数据访问组件时,文章中将介绍此方法的细节。设计文档将包含一个由所有信息及其属性与数据类型组成的列表。现在,我们只是考虑如何使用此消息方法来封装图层间的数据传输,如何创建一种与本地方案和远程方案配合使用的常规数据服务。数据访问组件
新闻热点
疑难解答