实际项目中对SOA的困惑

 
   | |

导读:实际项目中对SOA的困惑,本来在程序中应用Web Service层是为了可以支持多种的前端技术。并且在前期使用soapUI来POST数据的时候确实节省了一部分的开发时间。

关键词:SOA 程序 Web Service soapUI POST数据

 
正在加载数据...

  最近项目里需要兼写一些Asp.NET的管理后台,才发现自己有一段时间没有碰过Asp.NET的开发了。前一段时间一直在做BizTalk的项目和开发,做起来有些手生。不过今天要谈的不是Asp.NET Coding的问题。而讨论一下在Asp.NET开发过程中的一些应用“SOA”思想的困惑。

  开发BizTalk的时候一般的场景是各个应用系统已经将服务定义和发布好了。不管是以什么形式提供的,也不管是什么接口类型的。由于BizTalk支持多种协议和以XML Schema为基础的消息架构。因此可以轻而易举的将消息在不同的系统之间做路由和映射。带着这种思想我也在管理后台里应用了"SOA"起来。其实这个管理后台是很典型的几个表的数据库操作。例如我们有A,B,C三个表,其中C表与B表外键关联,B表与A表外键关联。对A表的操作是直接添加记录即可。对表B的操作是要将表A的主键ID与B的数据一起写到表B中。对表C的操作主要是将表B中的主键ID与C的数据一起写入表C中。

  好的我们大概知道了对数据库表的操作。由于项目需求不明确,还不知道用户是希望使用C/S还是B/S来访问管理后台。所以我的想法是应用“SOA”的思想将数据库的操作通过Web Service的方式暴露出来。供前端的Winform或者Web Application来访问。由于后台比较简单我就使用代码生成器生成了对这些表的操作代码。并且通过Web Service将这些接口(比如每个表的查询、添加、删除、修改操作)暴露出来。这样一来我们就可以看到这个管理后台的一些功能了。由于第一阶段需要给客户演示,时间比较紧,我就使用soapUI来调用Web Service。主要的目的是让客户看到管理后台的功能和操作。通过在soapUI中来回拷贝和粘贴ID与其他数值,成功实现了对表的操作。由于使用这种方法在开发上节省了一些时间使我当时感觉到了应用“SOA”思想的甜头。同时也觉得我直接在这个基础上再加一层Web控制页面就可以了。

  客户在看了演示之后对管理后台的功能比较认可,但由于soapUI毕竟不适合于用户的使用,所以客户希望能够开发一个Asp.NET的Web Application来提供给用户操作。有了前面的基础我觉得开发应该快就可以完成了。但是实际做的过程中我才发现“SOA”把我整得很恼火。由于前期开放的Web Service只有查询,添加,删除,修改四个单表的操作。但在做Web开发的时候需要考虑到用户的体验,比如在显示C表数据的时候为了给客户直观的效果我们要显示表B与表A的相应记录的名称而不是ID,还有我们在往C表里插入数据的时候我们还要提供可以供用户选择的A表与B表的数据。那这样一来我还得花时间去完善之前发布出来的Web Service方法以及操作数据库的SQL语句等。由于在开发过程中是采用前端往后端推的过程所以造成了代码没有进行很好的规划经常会出现“补了西墙,拆了东墙”的情况。还有由于Web Service与Web Application不在一个项目,不在一台机器上所以Web Service的调试也给开发带来了一定的麻烦。

  最后,通过整理了一下思路。决定不采用Web Service层了。直接Web层就连接数据库操作层。而且把原来的项目合并在一个解决方案里。很快就把这个管理后台给开发出来了。

  虽然程序已经开发完成了,但我还是有一些困惑没有明白。本来在程序中应用Web Service层是为了可以支持多种的前端技术。并且在前期使用soapUI来POST数据的时候确实节省了一部分的开发时间。但是在后期当客户需求有变动的时候Web Service却给开发带来了麻烦。个人感觉问题应该是出自于对接口的设计方面,前期的时候由于soapUI直接调用接口和专业人员的操作,基本的数据库的操作方法就可以满足需求了,因此开发很快。但是接口没有考虑到用户的体验所以没有暴露出相应的接口或者暴露的方法提供的数据不能满足需求。因此靠在实际的开发过程中使用反向的往上面一层去构造方法。给开发带来了很大的麻烦。

  可见不同的需求对于希望暴露的接口和得到的数据是不同的。由于在这个开发过程中我可以通过创建或修改方法来满足我的需求。但是复杂系统的SOA又应该如何设计各系统接口和提供的信息以满足不同的业务需求呢?我们知道在SOA思想里服务是一种高级别的封装,我们该如何在整合开始前就把接口设计好,并且如果遇到新的需求的时候我们怎么提供更好的方式可以添加或修改接口?

  当然SOA还有很多不明白有地方,而且也不知道在项目中这样使用是否叫作应用“SOA”。虚心听大家的教诲。


提高J2EE技术与.NET之间的互操作性
 提高J2EE技术与.NET之间的互操作性(三)
 改善J2EE与.NET之间的互操作性(二)
 提高J2EE技术和.NET之间的互操作性(一)
 与XML语言协同运用的.NET工具
 实际项目中对SOA的困惑
 是什么把主机级别事务处理与Java或者.NET服务级别事物处理区别开来?
 .NET和J2EE该相互学习什么
 微软准备.NET 4.0——框架改进REST和MVC 支持JQuery
 浅析ASP.NET的五大数据控件
 .Net的精髓:XML和SOAP
 .NET平台的轻量级脚本引擎:NanoScript
 Bobby Woolf 谈J2EE体系结构和设计
 ASP.NET未来:简化开发 HTML5及性能提升
 J2EE的MVC体系结构及其设计模式

原文出处:http://tech.it168.com/a2009/0226/266/000000266943.shtml
 
来源:BLOG    
 
 
 
 
 

.NET Web服务

 
Mono Project本周发布Moonlight 2,Silverlight的开源Linux实施。微软回应Adobe Flash,Silverlight是创建在线和离线的富应用的框架……
 
这一整年,我们发布了许多技巧来协助您创建更好的面向服务架构。为此我们认真筛选推荐一下5条技巧给您。希望可以起到查漏补缺的作用。
 
就像脱离浏览器运行Silverlight应用这个功能一样酷,微软通过推出运行离线OOB应用的功能而略胜一筹。这里对OOB离线的Silverlight应用……
 
UML从一开始就收到了很多批评。有些观察员认为UML语言有些臃肿,因为许多关系图很少使用,而有些关系图的功能又相互重叠……
 
统一建模语言(UML)是标准的可视化标注,可以用来表示软件工程的各个阶段。这个标准化的语言考虑到为使用它的不同组织和公司之间提供更广泛……

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录