技术开发 频道

.Net设计模式之MVC模式

MVC设计模式的扩展

  通过在ASP.NET中的MVC模式编写的,具有极其良好的可扩展性。它可以轻松实现以下功能:
 
  ①实现一个模型的多个视图;
 
  ②采用多个控制器;
 
  ③当模型改变时,所有视图将自动刷新;
 
  ④所有的控制器将相互独立工作。
 
  这就是MVC模式的好处,只需在以前的程序上稍作修改或增加新的类,即可轻松增加许多程序功能。以前开发的许多类可以重用,而程序结构根本不再需要改变,各类之间相互独立,便于团体开发,提高开发效率。下面讨论如何实现一个模型、两个视图和一个控制器的程序。其中模型类及视图类根本不需要改变,与前面的完全一样,这就是面向对象编程的好处。对于控制器中的类,只需要增加另一个视图,并与模型发生关联即可。
 
  同样也可以实现其它形式的MVC例如:一个模型、两个视图和两个控制器。从上面可以看出,通过MVC模式实现的应用程序具有极其良好的可扩展性,是ASP.NET面向对象编程的未来方向。
 
  MVC设计模式的优点及不足之处
 
  MVC的优点
 
  MVC的优点体现在以下几个方面:
 
  (1) 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
 
  (2) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
 
  (3) 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
 
  (4) 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
 
  MVC的不足之处
 
  MVC的不足体现在以下几个方面:
 
  (1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
 
  (2)视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
 
  (3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
 
  (4) 目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
 
  结束语
 
  与软件所处理问题的内在模型相比较,用户界面是需要经常发生变化的,采用MVC设计模式可以在满足对界面要求的同时,使软件的计算模型独立于界面的构成。也可以基于此模型建立大型分布式应用程序框架。本文介绍了MVC设计模式的原理;MVC设计模式三个组成构件(模型部件、视图部件和控制部件)以及在ASP.NET环境下实现基于MVC的应用需要完成的工作;MVC设计模式的扩展;最后对MVC的优点及不足之处进行了分析。
 
  逻辑体系结构
 
  从逻辑上讲,您需要规划解决方案以标识数据存储、数据访问、业务规则、用户界面等之间的边界。通常,Web 开发人员会选择一个两阶段模型,并用 Web 窗体存储用于访问现有数据存储系统(例如 Microsoft SQL Server)的所有代码。一个更有效的方法是创建一个位于 Web 窗体用户界面与 SQL Server 数据存储系统之间的中间层组件库。这种三层方法(Web 窗体、组件、数据库)通常是大多数应用程序所需的。但是,在某些情况下,可能需要一个其他层来处理服务器之间传输的数据。这个传输层可以使用独立于平台的协议(例如 XML-SOAP)来实现。但是,如果您从头到尾都使用 Microsoft .NET 技术,则可以使用 .NET 远程协议的二进制版来完成这一任务,而且速度比使用 XML-SOAP 要快得多。对于我们的示例,我们将定义三个逻辑边界:用户界面(Web 窗体)、中间层(一个 .NET 组件程序集)和数据层(SQL Server 数据库)。
 
  物理体系结构
 
  确定逻辑层后,考虑物理层也很重要。例如,您可以在同时安装有 SQL Server、Internet Information Server、ASP.NET 和 .NET 运行时的单个实际计算机上实现这个应用程序。这将是一个物理层。但更可靠且可扩展的方法是:在由三个 Web 服务器组成的簇上部署 Web 窗体,在两个应用服务器上部署 .NET 组件程序集,在两个故障恢复模式的 SQL Server 上部署数据库。这样产生的物理体系结构将七个 Windows 服务器包含在三个主要组中:Web 簇、组件簇和数据库簇。如果您了解系统的不同逻辑部件可以位于不同的计算机上,您可能会实现不同的代码。
 
  对于我们的示例,我们采用一个有效且强大的两层模型:Web 服务器托管用户界面和组件,数据库服务器托管 SQL Server 数据存储。如果通信量非常大,这个模型使我们可以灵活地在簇中添加更多的服务器,并使其保持足够的简洁以便于处理。
 
  安全规划
 
  Microsoft 有一个关于安全性与软件这一主题的歌诀:Secure by design, secure by default, and secure by deployment(设计安全,默认安全和部署安全)。即,在安全中设计,期待系统在默认情况下是安全的,以及创建可以在安全环境中成功部署的解决方案。安全始终是重要的。既然越来越多的软件要在公用的 Internet 上生存,编写安全的软件就更加关键。对于我们而言,幸运的是,.NET 运行时和 Windows 操作系统提供广泛的安全选项和功能,我们可以轻松地将其包含在我们的应用程序中。无需过分注重标识和消除联机解决方案中安全漏洞的细节,我们可以指出其中一些最常见的漏洞并指出我们的应用程序规划如何进行处理。
 
  缓冲区溢出
 
  这可能是已编译应用程序中最常见的安全漏洞。由于我们将使用 .NET 运行时,而它是设计用来在内存中安全运行的,因此不太可能发生缓冲区溢出。此外,我们使用 Microsoft Visual Basic® .NET 对解决方案进行编码,而 Microsoft Visual Basic® .NET 不像 C 或 C++ 那样容易受到缓冲区溢出问题的影响。但是,即使我们打算用 C++ 创建组件,我们还可以使用编译程序的特殊功能,GS 转换,来保护我们免受大多数缓冲区溢出的攻击。
 
  数据库攻击
 
  另一种常见的安全漏洞可能会使恶意用户获得访问存储在数据库中的原始数据的权限。为了防止黑客获得数据的控制权,我们仅使用 SQL Server 存储过程,而不使用内联查询。这样可以大大减少试图在输入流中插入其他 SQL 命令的攻击。我们还在程序中多个位置处使用输入验证,以确保所有输入仅包含有效的字符。
 
  交叉站点脚本攻击

  对 Web 应用程序进行的常见攻击还有一种,它涉及到用户在输入流中添加客户方脚本,这类攻击将执行附加的对话并诱骗用户将个人数据发送到黑客自己的 Web 站点。要解决这个问题,我们使用 ASP.NET 的一个功能,过滤出这种恶意代码的所有输入,防止将它置入系统中。显示屏幕上还包含附加代码,它将自动禁用任何脚本或显示可能会插入到数据存储中的标记。

0
相关文章