欢迎访问博客 Http://Lordz.CN
posts - 17,  comments - 22,  trackbacks - 3
  2010年7月10日

为什么要SOA?

一、问:为什么要SOA? 

答:因为SOA出现前,世界上有Corba组件模型、JAVA组件模型、COM+组件模型、.NET组件模型。其中,CORBA组件模型和JAVA组件模型属于IBM为首那一类阵营(一伙的还有BEA、ORACLE、HP、SUN之类的),而COM+组件模型和.NET组件模型属于微软这独个一家的,自古两个阵营是表面同行、暗地互掐。
IBM当然需要四海一家的解决之道。因为JAVA组件模型老受SUN的牵绊,而且江湖风传EJB已死。CORBA组件模型呢,一直没有当过老大主流流行过。其他两个组件模型都在微软封闭的圈子里,IBM就想在在这四大组件模型之上再加一层组件模型,这样就天下大同了,这就是SCA。
有了SCA组件模型,各个异构组件模型现在都被包装成一样的组件了,怎么数据传递?当然就是SDO来帮忙。


二、问:听说SOA主要优势是整合,但是我们既然有webService了,要SOA干吗? 

答:WebService是整合包装统一成WebService协议族的很好的规范,但WebService又不是组件模型。有人问了,你管我是组件不是组件,我给你包装一层webservice,咱们俩能调用就OK了。
这就涉及到咱们国家的计算机发展阶段了。因为咱们国家的开发界,N多程序员还停留在双击一下按钮,IDE自动给生成一个onclick事件,然后在里面写东西。很多程序员根本没有意识去主动写函数,程序里的函数都是IDE自动生成的事件处理函数,并非程序员写的自己的函数。连函数都没有主动意识的,怎么会有主动意识去自己编写类,自己编写组件类,大多数程序员在使用系统提供的类库,系统提供的可视化组件。所以,N多程序员就不明白为什么要有SOA组件模型了。
世界主流代码开发都已经是编写组件类了,这是业界的发展需求,但我们国内代码开发水平和需求还没有到这个层次,还在onclick。所以我们不理解。
如果我们也平时很自然的自己编写组件类,那么我们现在很自然的希望有支持SOA的组件模型,因为这样的组件模型,就可以很通畅的和过去的CORBA组件模型、JAVA组件模型、COM+组件模型、.NET组件模型交互了。如果我们现在还不用SOA组件模型,还在用四大组件模型,以后想异构组件之间交互,还得再开发一层SCA。


三、问:那SOA就这么简单?就是SCA+SDO? 

答:目前国际SOA标准推出的就是这两大标准,SCA和组件SDO。和SOA关联的还有两个东西,一个是BPEL,一个是ESB。SCA是有了统一的组件,SDO是有了统一的组件数据交互,BPEL是让组件之间串联在一起,然后自动运行,就如同我们把一个个的鞭炮拧在一起,然后点燃捻子,鞭炮就全都自己串联着爆炸了,BPEL就是干这个用的。而ESB呢,就如同各个组件,都需要在一个容器中执行,号称组件容器服务器,JBOSS最初的功能就是EJB组件的容器服务器。而ESB呢,当然就是SOA组件的容器服务器了。


四、问:SOA就这么简单吗?我怎么看书看网站,说是让业务人员和技术人员更好的结合,要用业务角度去看技术,这个话不理解? 

答:这是给SOA组件设计师一个设计指导。也就是说,当你要设计一个SOA组件,你要暴露出什么功能,要多达粒度的,可能你这个组件类可以围绕一个主题完成10个功能,但10个功能编写实现比较复杂,你最后内部写代码的时候写成了函数嵌套函数,那么你内部有许多函数了,你到底要暴露出哪些。咱们设计组件类的接口,往往不容易把握粒度的问题。就如同你如果刚刚一开始写面向对象的代码,很容易会滥用对象,设计的对象很多,如果还没有过面向对象开发的程序员,你可能想像不出来为什么会有这种过度使用对象的现象。人就是这样,用的爽了,就容易过度使用。所以什么粒度合适,给指导了,面向业务。从组件类的消费者角度来看,需要暴露出哪些功能。这就有了一方是功能消费调用者,一方是功能输出产生者,那么这个功能输出,用行话就是输出的是服务。


五、问:SOA就这么简单吗?我看书看网站说,SOA可以使软件灵活,我们现在就是软件代码越来越复杂,功能越来越多,客户需求提出来,我们很难下手修改,修改起来费时间,而且还不知道这块修改了会影响哪块,让软件质量无法稳定,我们正需要SOA,但是SOA是怎么做到这点了,我不理解呀? 

答:当然COM+、EJB成为风潮的时候,都说过这个话。你想啊,软件都是一个个封装密闭的组件,把组件连接起来,这当然灵活了。你想想你现在,.NET给你提供了许多可视化组件,也提供了许多非可视化组件,人家就是用组件做成了,你现在开发起来,把组件拖拽下来,设置一下属性,编程一下方法,你现在开发速度快多了吧,如果没有这么多组件,你想你多累。这就是组件的好处与灵活性。SOA组件也是组件,只不过是包装的更高一层的组件,是为了让四大组件模型能统一顺畅调用的,所以你把SOA组件当成.net组件来看待就很明白了。


六、问:中国现在好多企业都还没有信息化,即使一些很赚钱的行业或垄断国企做了信息化,但都自己封闭起来,和其他企业之间老死不相往来,SOA在中国有用处吗? 

答:你用不用SOA组件模型,就如同你用不用.NET组件一样,管整合什么事。你如果只想整合,webservice就可以了。用不用组件式开发,是你自己的事情,如果你想让你的程序变的灵活。你看.net里面那么多组件,给你的开发带来了很多的轻松啊。


七、问:现在SOA成熟吗?该到应用的时候了吗?

答:成熟不成熟,你得看支持SOA标准的开发工具成熟没成熟,做SOA应用就需要成熟的开发工具。有了能很顺手的SOA组件开发工具,那就看看有没有成熟的SOA组件容器服务器。如果这两项都不错了,就可以开发了。我们当年开发COM+的时候,COM+不成熟,COM+开发工具不成熟,COM容器不成熟,造成线程死锁、并发排队、缓冲池崩溃、内存泄露很多问题,搞的我们很是头疼,最后找来开发工具厂商的人,找来微软,才算弄清问题,原来一方面是微软COM+有问题,一方面开发工具也有问题,白耽误了我们许多时间。不过福兮祸兮,倒是让我对组件模型、WINDOWS基础核心技术思想倒是精进不少。


八、问:我看你有点误导人。现在企业级开发,实际主流标准就两个,一个是.NET,一个是JAVA。.NET本来就似乎支持WebService第一类的技术,而JAVA是后来才加入WebService的,所以算不得原生结合。况且微软自己自成一套体系,.NET组件模型也很好,我为什么要用SOA组件模型呢? 

答:确实这里面也有些商业目的。虽然IBM现在是JAVA领域的领头羊,也在JAVA上建立了一整套产品体系,投资颇大,但毕竟JAVA是出自SUN,所以SUN为了保护自己的利益当然要不让IBM自己主导的很爽了,所以JAVA要推出一项特性,往往时间很慢,而且总需要兼顾各方利益,所以大家都看到,近几年出来的JAVA新特性标准都不尽人意,就是各方利益拉锯的产物,谁也不得罪,就形成了中庸的东西。IBM早就想甩开SUN了,但IBM在JAVA上也投资巨大,如果另起炉灶也不太可能,所以想到这个移花接木的方法,把JAVA架空。出了一个SOA模型,各种语言都可以实现,不仅仅限于JAVA平台上,在SOA的统一架构技术至上,就没有JAVA痕迹了,那就轮到IBM大显身手了,所以OSOA组织,SUN是很靠后才参加的。因为SUN知道,不参加会被甩的更远,现在参加,还能捞点残余。反正最终的命运是要被扫走。
SUN的JAVA被IBM正在一步步边缘化,当然投入过深,想抽出来也不容易,但IBM有这个财力也有这个耐心。IBM不断宣称开源,ECLIPSE,IBM支持了很多,让大家在开源世界接纳了IBM,而且IBM近几年一直在推动web2.0,也就是轻巧化的开发。企业级开发,大家一想就头疼,都是大框架大平台很复杂,IBM也知道顾客烦了,现在全世界的IT巨头都在宣称简化IT。呵呵,这些家伙,把东西搞复杂故意建造竞争壁垒的是他们,现在简化IT的还是他们,正反都能卖。
而大家要注意到,OSOA推出了SOA标准后,推出了三种实现,一种是JAVA,一种是C/C++,另一种是什么呢?大家猜一猜。
对,它就是PHP。
posted @ 2010-07-10 20:08 Lordz 阅读(18) 评论(0) 编辑
  2008年7月1日
前段时间在网上下了很多教程,文件名都是以这段字符开头“跟我一起来学XXX”,看着很是碍眼,因为文件名很长导致在文件夹里浏览的时候后面都是省略号,手动改又嫌太麻烦,有100多个文件,还是让电脑自动帮我改吧,自己动手丰衣足食,就用C#写个简单的小工具。



列目录函数
        private void listDirectory(string path)
        
{
            DirectoryInfo dir 
= new DirectoryInfo(path);            
            FileInfo[] files
=dir.GetFiles();
            
string extension=getExtension();

            fileList.Items.Clear(); 

            
foreach (FileInfo file in files)
            
{
                
if (extension != string.Empty)
                
{
                    
if (extension.IndexOf(file.Extension.ToUpper()) >= -1 && file.Extension != string.Empty)
                    
{
                        fileList.Items.Add(file.Name);
                    }

                }

                
else
                
{
                    fileList.Items.Add(file.Name);
                }

            }
            
        }

获取扩展名
        private string getExtension()
        
{
            StringBuilder sb 
= new StringBuilder(50);
            
foreach (Control control in this.groupBox1.Controls)
            
{
                
if (control.Tag.ToString().Equals("tagExtension"))
                
{
                    
if ((control as CheckBox).Checked)
                    
{
                        sb.Append(control.Text
+";");
                    }


                }

            }

            
return sb.ToString();
        }

重命名方法
        private void btnRename_Click(object sender, EventArgs e)
        
{
            
if (MessageBox.Show("这个操作是不可逆的,确定要继续吗?""询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                
return;
            FileInfo file;
            
string preName = this.txtPreName.Text.Trim();
            
string pre=preName;
            
int preLen = (int)this.preLength.Value;

            
try
            
{
                
for (int i = 0; i < fileList.Items.Count; i++)
                
{
                    file 
= new FileInfo(fbd.SelectedPath + "\\" + fileList.Items[i].ToString());

                    
if (this.chkAuto.Checked) pre = i.ToString() + "." + preName;
                    
if (fileList.Items[i].ToString().Length >= preLen)
                    
{
                        file.MoveTo(fbd.SelectedPath 
+ "\\"+pre + fileList.Items[i].ToString().Substring(preLen));
                    }

                    
else
                    
{
                        file.MoveTo(fbd.SelectedPath 
+ "\\"+pre + fileList.Items[i].ToString());
                    }

                }

                MessageBox.Show(
"重命名完成""提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                listDirectory(fbd.SelectedPath);
            }

            
catch
            
{
                MessageBox.Show(
"重命名发生错误""提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

    }



RenameTool.rar
posted @ 2008-07-01 15:07 Lordz 阅读(181) 评论(1) 编辑
  2008年6月6日

这是一本让人着迷的书!
这本书定会广受欢迎:

1)它符合当前大量求职人员的需求,毕竟于他们而言,谁不想知道微软亚洲研究院在招人时候问些什么问题呢。
2) 把考察软件技术人员专业知识和相应技能的各种手段加以归纳和整理,这本身也是对业界的贡献,其影响将是深远的。
翻开这本书,按照这样的方式阅读:
随便挑选几个问题,认真思考,尝试解答,再看看作者的思路,在其启发下更进一步思考,尝试给出更多更好的解决方案,甚至更进一步,提出书中都没有提出的问题,把问题想透,把程序实现出来,验证自己的想法。毫无疑问这样的阅读方法是相当吃功夫的,但通过这样的方式,不但能够最大程度地获得本书的价值,也能够实实在在提高读者的基本功、思考力和创造力。毫无疑问,这些能力的意义要远比任何具体知识和技能的获得都更重要。对系统与平台的理解也好,对领域知识的掌握也好,产品的设计、架构的选择也好,所有这些算法之外的技能,不都需要强悍的思考能力的支撑才能获得吗?事实上,在这个知识开放共享的时代,头脑和思维才是唯一核心的竞争力,从这个意义上讲,这本书是直接面向核心竞争力发展的,其意义何其大也!

阅读起来。有些题目的内容会引起强烈的共鸣,尤其是那些自己非常熟悉并且又深知解答的题目;也有一些题目让我异常惊诧,原来除了我所知道的解答思路之外,还有更好的解答以及更深层次的原因。还有一些题目是从来没想到过的。阅读过程是一次愉快的享受,也是脑细胞持续活跃的过程。 --潘爱民

自计算机与软件出现以来,在近半个世纪里,软件开发所能衍生出的无限创意,深深吸引着全世界的青年。在二进制的世界里,这帮年轻的程序员充分发挥自己的热情和想像力,仅仅通过对“1”和“0”的互换操作,他们辟地开天,恣意汪洋地创造出一个又一个的奇迹。今天,前几代“青年”积累构建的虚拟世界正在深刻地改变我们的现实生活。软件开发过程的复杂程度已经足以媲美传统的工业生产。前人堆积如山的开发经验和规则,令象牙塔里的学子们望而生畏。今天软件学院的学生们站在巨人的肩膀上,用最流行的语言和工具武装到了牙齿,但似乎缺少了前辈们的热情,也忘记了编程的乐趣所在——发现问题,分析问题,解决问题,寻找更优的解法,总结规律,抽象出算法的过程以及由此产生的成就感。本书收集了大约60道微软技术面试题,作者试图通过书中妙趣横生的问题和详细的解说以及面试者的各种小故事,告诉读者微软需要什么样的技术人才,重视什么样的能力,如何甄别人才。但它更深层的意义在于引导读者思考,帮助读者重拾通过编程探索未知世界的乐趣。
下载地址:《编程之美》.rar
posted @ 2008-06-06 10:41 Lordz 阅读(61) 评论(0) 编辑
  2008年4月30日
说起AJAX仿佛是什么新东西,其实这已经是老掉牙的技术了,只是最近两年得到了广泛的应用(GoogleMap、Gmail、网易邮箱……),又回到了人们的视野中来,维讲究用户体验的设计师和技术员们所津津乐道。

在ASP.NET下有很多实现AJAX的方法,有一大堆的框架。比如Ajax.Net、MagicAjax、AjaxPro等都是大名鼎鼎,使用起来也是 非常方便,但是一向习惯和主张实用,够用就好的我不太喜欢这些框架,因为有很多东西被封装起来我不知道他们里面到底在做什么,而且还有很多不需要用到的东 西,所以前段时间就特别喜欢Prototype.js这个轻量级框架,很多方法可以自己写,实现起来也很灵活。不过今天要介绍的是ASP.NET 2.0中内置的回调接口,用他就可以方便实现调用后台方法。

参考了网上很多资料,总结了一个实现起来最简单的方法,具体大家就看例子吧。

下载地址
posted @ 2008-04-30 20:56 Lordz 阅读(40) 评论(0) 编辑
  2008年4月9日

看到网易邮箱有很多漂亮的DIV提示效果,就照着它模仿做了一个例子。
包含方法有:

messageBox:function(_width,_height,_title,_message)

alertBox:function(_title,_message)

confirmBox:function(_title,_message)

使用了一些Prototype.js的方法,由于是第一次写javascript类,所以感觉看代码一点都不像是在写javascript。

写的挺难看的,如果你有兴趣可以帮我修正一下,呵呵。

因为本人比较懒,所以总是想写一些“万能”方法,来适应以后不同的应用,但是总是写不好,所以将就这用吧。

本来还想加入AJAX更新模块,感觉到时候可能要写成和AjaxTemplate差不多了,所以就先搁下了,以后有用到再补充吧!

压缩包下载

posted @ 2008-04-09 22:53 Lordz 阅读(170) 评论(0) 编辑
  2008年1月12日
摘要: 1. Stop complaining! 别发牢骚! 2. You make me sick! 你真让我恶心! 3. What’s wrong with you? 你怎么回事? 4. You shouldn’t have done that! 你真不应该那样做! 5. You’re a jerk! 你是个废物/混球! 6. Don’t ta...阅读全文
posted @ 2008-01-12 22:58 Lordz 阅读(46) 评论(0) 编辑
  2007年11月3日
摘要: 本文转载自http://www.ayssss.cn/?p=86,感谢原作者。aysMH是我自己编写的一款新型的maphack,特点是小巧、简洁,主程序无界面、无窗体,所以基本能够躲过各种平台的反作弊措施(BN除外)。除了拥有基本的mh功能外,aysMH还将加入其他常用的魔兽辅助功能,目前已集成了防秒退功能。这次更新的1.0版是aysMH的第一个正式版本,加入了图形化的配置界面,更加方便修改设置项。...阅读全文
posted @ 2007-11-03 13:45 Lordz 阅读(300) 评论(1) 编辑
  2007年10月31日
摘要: MSProject改进功能: 增加代码着色 增加.NET下图像上传,并自动缩放、转存为JPEG格式图片 FCKeditor已经具有的功能: 新建、预览编辑的文章,支持根据模板创建内容 复制、拷贝、从word文档粘贴内容 打印、查找、替换文本 字体选择、加粗、斜体及下划线等 文字添加上下标 项目列表自动添加 左中右段落对齐 文字样式、格式、字体及字体大小设定 字体前景、背景颜色设定 插入表格 插入链...阅读全文
posted @ 2007-10-31 22:39 Lordz 阅读(3200) 评论(13) 编辑
  2007年10月26日
摘要: publicpartialclassTest:System.Web.UI.Page,ICallbackEventHandler{publicstringstrVal="";protectedvoidPage_Load(objectsender,EventArgse){ClientScriptManagercs=Page.ClientScript;stringcallback=cs.GetCallb...阅读全文
posted @ 2007-10-26 00:33 Lordz 阅读(186) 评论(0) 编辑
  2007年10月19日
摘要: #include <iostream.h>int len(0);//检验是几进制int Check(char b[100]){ for(int i=0;i<10;i++) { if(b[i]=='\0') { len=i; break; } } if(b[0]=='0') { if(b[1]=='x') { if(b[len-1]=='b') return 2; els...阅读全文
posted @ 2007-10-19 23:49 Lordz 阅读(222) 评论(0) 编辑
Http://Lordz.CN