技术开发 频道

架构与模式(Architecture & Patterns)

    架构和模式的关系

    因为架构(Architecture)和模式(Pattern)在当前的软件开发中经常地被提及,可是很多人容易混淆这两个术语,而对此,学术界也没有一个非常统一的定义。

    架构和模式应该是一个属于相互涵盖的过程,但是总体来说Architecture更加关注的是所谓的High-Level Design,而模式关注的重点在于通过经验提取的“准则或指导方案”在设计中的应用,因此在不同层面考虑问题的时候就形成了不同问题域上的Pattern。相对于系统分析而言,架构是在提出解决问题的方案,而系统分析则是解决这些问题,这两者都会运用到模式,只是侧重的角度略有不同,架构方面倾向于架构模式,而系统分析更多的是采用设计模式和具体语言的实现模式。架构强调的是软件系统的结构及其各个元素之间的关系,而模式则是抽象各个层次上的关系,比如在架构设计时,设计模式是经过经验抽象过后的一些“准则”,而利用这些模式,有助于在架构设计中更好的分离系统元素(elements)和组织系统元素之间的关系。

    模式是一个经验提取的“准则”,并且在一次一次的实践中得到验证,在不同的层次有不同的模式,小到语言实现(如Singleton)大到架构。在不同的层面上,模式提供不同层面的指导,比如架构设计方面,三层应用程序,分布式应用程序等等这些技术架构模式为架构设计提供了理论的参考,而在程序设计领域,设计模式则是提供了描述各个元素(在面向对象领域,更多的是指Class)之间的关系,GOF95的《设计模式---可复用面向对象软件的基础 》就是这个层次上的经典巨作,而在语言的实现过程中,也出现了同样的实现模式,如.NET
中的delegate(委托)的Observer(观察者)模式实现。

    相对于系统分析或者设计模式来说,体系结构从更高的层面去考虑问题,所以关注的问题就体现在“不变”因素上,比如系统部署中,更加关心应用程序的分层分级设计,而在这个基础之上提出的部署方案,才是架构考虑的重点。体系结构关心应用程序模式,更加体现在通过技术去解决这些业务差异带来的影响,关心是否是分布式应用程序,关心系统分层是如何设计,也关心性能和安全,因此在这样的情况之下,会考虑集群,负载平衡,故障迁移等等一系列技术。

    希望通过定义的方式来区分架构和模式是不太可能的,因为本来就是交互交叉和提供服务的,比如著名的MVC(Model-View-Controll)就是一个例子,在设计模式中是一个非常经典的模式,在架构中同样适用。对于熟悉架构设计的系统架构师而言,似乎可以用如下来解释架构和模式之间的关系:架构是Hight-Level Design,着眼于不同业务中共性的解决方案,而模式是General Principle(通用原理)。

    模式用来指导架构设计,同时架构设计选择模式

    关于Microsoft .Net Framework

    .NET Framework是一种新的计算平台,它简化了在高度分布式Internet环境中的应用程序开发。.NET Framework旨在实现下列目标:
 
    ●提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在Internet上分布,或者是在远程执行的。
    ●提供一个将软件部署和版本控制冲突最小化的代码执行环境。
    ●提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)安全执行的代码执行环境。
    ●提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。
    ●使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。
    ●按照工业标准生成所有通信,以确保基于.NET Framework的代码可与任何其他代码集成。

    .NET Framework具有两个主要组件:公共语言运行库和.NET Framework类库。公共语言运行库是.NET Framework的基础。您可以将运行库看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。.NET Framework的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI)应用程序,也包括基于ASP.NET所提供的最新创新的应用程序(如Web窗体和XML Web services)。

    .NET Framework可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。

0
相关文章