好像改版变形后,经过了瘦身,已经看不到WCF板块了。。
.net 3.0框架出来的时候,就一直听说 WPF WCF WwF,那个时候基础不好,基本上没啥机会研究这些新技术。随着跟上了老师的教学进度,慢慢的感觉,这些新技术的出现,往往是为了解决旧有技术不能或者不便于解决的问题。(像泛型就是典型个案)WPF总算在使用vs2010的时候稍微体验了一把,而wf则是比较专业的领域,工作流的提出则是提现了 现代软件技术 向规模化、专业化和规则化的方向演变。
而经过OA项目的洗礼,以及之后 WebService 和 AJAX 两个课程的学习,越发感觉自己对于 WCF(异步通信领域的集大成者)有着非常美好的憧憬。
WebService虽然只有一天的课程,但是这个技术在AJAX的时候时常被用到。由于在同一台计算机上,我们调用内存中的方法也好数据也罢,都显得是那么 天经地义 和 轻而易举 。计算机的历史告诉我们,那么多语言的出现,其实正是应验了 抽象 的概念(语言,从机器到汇编,再到高级——典型如c/c++,直至现在的二次编译语言java和c#,其本身就体现了一种 抽象 思维)在计算机世界 无处不在。用c#来实现,在同一台计算机的内存中(不论是否是托管堆,今天才知道,原来c#也可以操纵unsafe代码,直接操作指针)进行不同的方法调用,看起来是一件如此 自然而然 的事情。
像我们在OA项目中见到的那样,3层架构的思想,主要有3层的模块,每个模块只要调用别的模块中的方法即可。但是,深入的想一想,我们便会发现,这种调用之所以那么简单,其实是由于底层提供的服务使得我们对于复杂的通信逻辑‘一无所知’(这正是软件设计的思想——面向对象设计中,要求我们‘不要与陌生人说话’)。UI模块(宿主在IIS中的进程)调用BIZ模块(单独的进程),完成相应的业务算法,根据MVC模式,前台只负责显示,由BIZ充当控制器,由它负责转发信息,如果需要进行数据库的 增删改查 ,则另外调用 DAL模块(也是独立进程)。从数据库中返回的数据,再由BIZ层进行包装,最后以MODEL的形式交还给UI,UI(作为View)要show出来的数据则是根据Model加以展现。
这一整个流程中,我们可以想到,每一层其实都持有下一层的一个引用。我们给UI层添加了BIZ层的引用,给BIZ层添加了DAL层的引用(这中间,BIZ层持有的都是DAL层的接口,具体的Implementation,我们‘打断继承’,目的是为了符合设计模式中提到的最高原则,即OCP,通过反射以便于对 扩展开放,对 修改封闭。)这些被添加的引用,其底层逻辑(这个逻辑我不懂,但是可以猜)一定是由操作系统外加.net framework的CLR帮我们维护的。由于大家都在同一个机器内存中,因此这种维护变得相对容易。(c++当年应该是允许程序员自己动手——对于高手,当然是自己动手丰衣足食——维护底层的内存指针,但考虑到安全性——其实不是所有程序员都对底层有兴趣钻研,当然是不是容易出错,java和C#语言引入了 虚拟机 机制,让程序员编写代码的工作变得更抽象)
但是,万一随着 云计算 的到来,有朝一日我们的各个DLL文件,并不再被部署在同一台计算机上,而是通过 分布式 进行部署。这时候会不会遇到些麻烦呢?我指的麻烦是指,可能你要用的那个 程序集 是在 linux机器上的(更夸张的是,如果 手持设备 也能成为一个计算的云端,那么可能 某个 dll 就在手机上),这样的话,我们怎么才能得到或者自己来维护那个‘引用’呢?也许 WCF 会给出一个答案。
在轻量级的分布式(轻量是指,这是由客户端——browser 到服务端的一个分布和异步,但是如果考虑到服务端都在 云端 ,那恐怕是比较重量级的)方案中,AJAX和WebService已经给我们很不错的解决方案。
复习近期课程的同时,十分期待老师能带来类似 WCF 这些新技术的课程。。当然,对于这些老技术尤其感谢老师带我们入门。谢谢!