LINQ To SQL有很多值得学习的地方,这里我们主要介绍LINQ To SQL N-Tier,包括介绍.NET Framework 3.5下的N-Tier等方面。
当初,LINQ之所以会吸引我目光的原因有二,一是其与语言整合的奇想,让我觉得相当的新鲜且有创意,二则是ORM的诱惑,多年来,我一直对 ORM有着相当高的兴趣,从研究ORM概念到使用ORM产品,乃至于自行开发ORM Framework,对于这个技术,我有着深入的研究及无限的渴望。
做为Microsoft第一个公开的ORM实作体,LINQ To SQL不管是于效率还是易用性上,都有着不俗的表现,但在N-Tier应用上,LINQ To SQL却一直处于相当不明确的状态,即使到了Visual Studio 2008正式上市的今天,仍然没有一个完整的文件及范例,告诉我们如何将LINQ To SQL应用于N-Tier系统架构中,本系列文章将以一个小型的N-Tier范例做为结尾,为读者们演示,如何将LINQ To SQL应用于以WPF做为UI层的N-Tier系统架构上。
LINQ To SQL N-Tier应用
在开始讨论LINQ To SQL N-Tier之前,我们得先定位出什么是N-Tier应用程式,说穿了,LINQ To SQL N-Tier系统架构就是于传统的Client/Server架构中添加一台架设应用程式伺服器的电脑,做为桥接Client端与Server端(也就是架设资料库系统的那台电脑)的中介者。那为何要这么做呢?主要原因有两个,一是扩充性的考量:在传统的Client/Server架构中,Server端必须负担服务所有客户端的重责大任,一旦客户端增多,Server端电脑的等级也必须随之提升,否则效能会因大量的客户端而降低,架设中介伺服器可以分担原本由Server端一手包办的工作。
在面对大量使用者同时操作系统的情况下,中介伺服器可以快取部份常用的资料,以暂存方式来取代真正的资料库操作,进而减轻Server端的负担。在N-Tier架构中,中介伺服器并不仅限于一台电脑,这意味着我们可以架设多台中介伺服器,然后让Client端连往主控的中介伺服器,再由此中介伺服器决定该Client端是要连往那一台中介伺服器,这也是N-Tier用语中常见的『负载平衡』。
二是安全性的考量:原本在Client/Server架构中,Client端是直接与Server端沟通的,这意味着如果应用程式需要透过网际网路来连结Server时,该Server就必须曝露于网际网路上才行,但这个Server端通常是一个架设资料库系统的电脑,将整个公司重要的资料曝露于众人可及的网路上,相信没有几家公司有这个勇气或胆识吧。
借助于中介伺服器的架设,可让后端资料库免除于曝露于网路上的危机。而Client端与中介伺服器间的沟通立基于有限的通讯规格,所以即使中介伺服器需曝露于网际网路上,有心人士透过中介伺服器来伤害后端资料库的机会及层次也降低了不少,何况通讯加密是所有N-Tier应用程式必须实作的部份,比起简单的资料库通讯协定,专为N-Tier应用程式所设计的安全通讯协定如Web Services,自然安全许多。
.NET Framework 3.5下的N-Tier
当决定采用N-Tier架构时,Client端与中介伺服器间的通讯协定便成了第一个得做出的选择,从.NET Framework 3.0开始,Microsoft便致力于打造新一代可用于N-Tier架构的通讯协定:Windows Communication Foundation,简称WCF。在原始的设计概念中,WCF必须解决两个问题,一是效率的问题,以往的N-Tier程式可分成两大阵营,一是使用公开的标准规格:Web Services做为通讯协定,二是使用封闭的规格:Remoting。由于可使用Binary(二进位)协定来封装讯息,所以Remoting在效能上有着相当耀眼的表现,但Remoting是封闭的协定,所以失去了与其它平台互通的可能性。使用Web Services虽然可以得到了平台互通的特色,但却必须以效率做为交换条件。
WCF在讯息封装层做了一个抽象化的设计,可以让WCF应用程式于执行时期切换使用的通讯协定,这也就是说,当在网路环境良好,且没有平台互通性考量的情况下,我们可以在不重新编译应用程式的状态下,仅修改组态档就能将架构于WCF的应用程式之通讯层换成Binary格式,当需要互通性时,也只要修改组态档就能改为Web Services格式,此项设计让WCF应用程式可以轻松游走于两种通讯协定间,不像以往般,一旦选择了Remoting后,要改成Web Services就很难了。
WCF出现的第二个目的是要实作更多的Web Services规格,这几年来Web Services的规格铺天盖地的出现,能支援更多的规格代表着与其它平台的互通性也就越高,WCF中支援了如WS-Security、WS- ReliableMessage、WS-Coordation、WS-Address等新规格。因此,在.NET Framework 3.5中,不管是依据效能或是互通性的考量,WCF都是最好的选择。
【编辑推荐】