??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩成人一级片,加勒比av一区二区,爱爱精品视频http://www.aygfsteel.com/nighty/category/31270.html折腾的年?/description>zh-cnSat, 28 Apr 2012 04:07:04 GMTSat, 28 Apr 2012 04:07:04 GMT60Flex在企业应用中关于单元试的一U设计思\http://www.aygfsteel.com/nighty/archive/2012/04/28/376941.html寒武U?/dc:creator>寒武U?/author>Sat, 28 Apr 2012 04:03:00 GMThttp://www.aygfsteel.com/nighty/archive/2012/04/28/376941.htmlhttp://www.aygfsteel.com/nighty/comments/376941.htmlhttp://www.aygfsteel.com/nighty/archive/2012/04/28/376941.html#Feedback0http://www.aygfsteel.com/nighty/comments/commentRss/376941.htmlhttp://www.aygfsteel.com/nighty/services/trackbacks/376941.html      用Flex做企业应用将q有一q时间了Q这个过E很累,在国内这斚w的积累不多,真正有参考意义的资料的确非常。经q一D长旉的摸索后Q多也U篏了一点经验,最q的关于单元试的想法做一ҎȝQ由于涉及的知识较多Q这里也只是l出个h的一U思\?/span>
     众所周知QFlex的缺Ҏ开发调试效率较低,而且它只是表现层的一U解x案。在企业应用中最需要解决的是编译生成的swf体积问题Q我想Q何客户都很难接受一个企业应用全部打包在一个swf里,几MB甚至几十MB的初始化q程谁都无法接受Q所以都必不可少地采用Module的加载方式,把不同的业务功能~译成独立的swfQ需要用的时候再d载。把核心功能、通信机制、公q件设计成库项目,~译成swc做ؓRSL让业务模块共享调用,辑ֈ量减少业务模块~译体积的目的。在q方面如果用心优化的话,基本上可以控制到每个swf体积大概?00KB以内Q这样就是互联|方式部|Ԍ客户讉K仍是可以接受的?/span>
    

     该结构图l出了一U整体的设计ҎQFlex的启动肯定得有ApplicationQ这个是用户初登录后W一个加载的swfQ登录就不要用flex了,用jsp或是模板实现吧)。所以它负责加蝲你设计的整个框架Q包含模块加载机制、通信代理方式、基库初始化{等Q而和Java端的通信目前比较有效的仍然是blazedsQ这个技术需要的介绍内容不在本文的范围之内。关于通信接口的实现有一U非常有用的方式是借用Java的动态代理理念,Spring有一个flex的扩展子目叫做springactionscriptQ而这个项目又引用了as3commons的库Q类gapache commons的一些公qӞ。ؓ什么提及这个,因ؓflex本n的反功能api非常隄Q所以as3commons做了扩展,它大大简化了反射的用,而且提供了一个bytecode的工L于操作字节码Q它是实现动态代理的关键。至于ؓ什么要动态代理?目的是辑ֈ在写和JavaҎ的接口时Q可以只声明接口Q不需要实现类Q得减少多少重复代码呀Q)Q而和JavaҎ接口我们又可以开发一个工兯java code 自动转成 as codeQ如果懂得Eclipse插g开发的话还可以q一步做一个插Ӟ辑ֈJava只写一ơ就可以自动生成对应的flex接口Q提高开发效率?/span>
     转入正题Q关于单元测试的概念QFlash Builder?.5已经把flex unit作ؓ内置库了Q这点和Eclipse把junit内置cMQ而flex unit的用网上有大量的资料介l,q里也不多说。flex unit在测试as代码q是不错的,和junit试一P提供了一些简单的Assert断言Q但是你最痛苦的却不是as的测试。企业开发的特点是数据量不大,但是需求坑爹,l常变来变去Q而且l构复杂Q往往一张表很多字段Q关联子表,层属性多。而你如果选择了Flex做了展示层的技术,那必定是看中它比HTML + CSS + JS更强的界面交互功能。的,q点不容质疑QFlex Spark的皮肤机制的提供了很多优秀的特点,不过如果你想U熟掌握它的整个机制Q恐怕得花很多时间阅L代码才行Q而皮肤的制作整对别想让美工独自实玎ͼ它同h需要技术积累的Q介l它需要用几个幅才够。Q何技术方案都一PBS、CS、AIR在实现复杂界面时Q对于开发h员来_最痛苦的莫q于界面的单元测试?/span>
     痛苦在哪里?回看上面那幅架构图,业务功能界面实现在FlexQ业务逻辑在后台JavaQ那么当二个团队同时q行工作的时候,沟通就是最大的成本。解x通的问题必d先前设计时约定好接口和数据结构,那是会媄响双方团队协调的关键因素。当双方同时q行开发的时候,势必存在前台依赖后台的情况,因ؓ它能到达界面的前提得在整个框架蝲入后Qƈ且可以初始化一堆数据,发生了通信Q,Java后台q好_依赖于spring和junit可以做到很好的单元测试。而flexq苦了Q我没有通讯啥都做不了呀Q?/span>
     如何设计单元试Q最大的出发点就是如何切掉和后台通信q接Q看下面的简单结构图

     实现思\介绍Q?/span>
     1.  化Application加蝲q程   --   可以套用你主E序中的加蝲q程Q但是不需要你的主界面其它多余的元素,辑ֈ减少到达试界面的多余步骤(可能少地减鼠标和键盘操作Q?/span>
     2.  定义试配置   --   试哪个模块Q哪个工作流E?你得通过配置的方式来定义Q而不是每ơ都手写代码Q才能方便你的成员用你q个工具
     3.  模拟后台接口实现  --  记得上面说的动态代理吗Q其实是为接口动态生成一个实现类Q然后注入真正通信的实C码,例如WebService、HTTPQ既然可以注入这些通信渠道Q当然就可以注入本地实现cd
     4.  对象查看?nbsp;   --   q个是神马?因ؓ你都不要Java后台了,每次操作一个界面后得提交数据吧Q没有后CQ提交到哪里Q你得必L你的提交对象用界面展C出来吧Q好吧,q个可是个难点!

     我想q四个方面的原则无非是Q减单元测试需要进行的步骤Q最快到达测试界面)Q脱dC赖(自己单模拟后台实玎ͼ可惜flex没有cMjava的mock库,悲剧Q)Q如何查看提交到后台的结果?单元试的目标:界面能正常加载、提交数据正常,如果二者都没问题,那么联调的时候就可以非常Ҏ定位到是Flex的问题还是Java的问题!辑ֈ介分责Q的目标,当然Q如果你所在团队是按模块分的,也就是说flex和java都是同一个h做,那么׃存在责Q问题?/span>

     怎么实现上面的四个步骤呢Q简要地介绍一下吧?/span>
     W?化application加蝲Q其实你可以把第一张图中的application加蝲机制拯q来Q只是主界面可以做得非常单,比如不需要多余的控gQ比如过长的菜单、当前登录h、时间、一陀讄按钮{)Q只留下最核心的能到达你测试界面的入口Q至于怎么设计q个化版的applicationQ那得发挥你本h的创造力Q另外还得看具体的业务?br />
    W?定义试配置。模块如何加载?通信接口本地模拟实现cd义?通过配置昄在appliation做ؓ触发控gQ这些你都得自定义一套xml之类的文件来配置吧,q个需要技巧了Q不能设计得太复杂,因ؓ你的开发h员需要沿用你定义的规范来定义它需要测试的模块Q关于这斚w的知识,可以参考spring加蝲配置文g方式、struts2加蝲定义文g{理念,有一个概忉|比较推荐Q就是struts2中的include配置文gQ允讔R|文件分散,让大家提供代码和文g时减冲H,又可以套用你正常的加载机制?br />
    W?模拟后台接口实现。这个是比较烦的Q模拟机制本w通过动态代理倒是不难实现Q恶心的是你得自己动手用flex单实Cơ后台生成数据、处理数据的逻辑。这里我有个实践的ȝl验分nQ在前期你调试完的后台接口证明是没有问题的,那么可以混合使用Q一部分调试q的接口可以直接用后収ͼ而新接口才本地模拟。一个原则就是后台有的,已经证明E_的就用后収ͼ没有的或是后台还没有完成的你p己模拟?br />
    W?对象查看器。想想flex不能操作数据库、由于安全限制不允许直接操作文g、无法读取本地文件目录。而你的测试数据也怼有关联(特别是在工作方面)Q所以你得想一个方案来保存你的对象l果Q而且得以一Uh性化的方式查看对象内宏V且抛开数据存储的问题,q个对象查看器如何设计就够你头疼的了Q首先是对象得定义成一U格式,一Uh可以看得懂的格式Q比如xmlQ可以支持序列化和反序列化,你得L多余的无用属性和讉K器。又得回到反机制上了,序列化其实不难,隄是反序列化时如何正确地{成原来的对象。列一U本计的l构Q?/span>
     <xxx   type="com.xx.oo.XXClass">
          <aa type="String">aaa</aa>
          <bb type="Boolean">true</bb>
          <list type="mx.collection.ArrayCollenction">
              ....
          </list>
     </xxx>
     对象分简单对象、复杂对象、动态对象等Q如何表达这U结构和保证序列化时不丢失数据需要细心考虑。那么最后如何实现查看器呢?其实有一个参考的范例Q就是Eclipse?#8220;大纲”视图Q经q实늚扩展Q把树视图换成表格树Q这U控件原生没有,有第三方的可以拿来修改)Q看个样囑֐Q?/span>
 
     因ؓ你关注的对象内容无法是q三个方面,属性名、倹{和cdQ又支持以树方式D对象Q已l够你人眼分辩内容了。至于如何有效的保存试数据Qƈ且组l好l构Q这个方面我目前也仍在思考中Q未有较好的思\?/span>
     以上内容仅是Z本h的一U方案,也许有更好的实现ҎQ只是水q不以过q种认识Q希望后l能q一步思考能实现更加完美的单元测试框架?/span>
     ST试更关注的界面的自动化试Q这斚w涉及的知识更多,一般公司是很难有胦力和技术去支持做自动化试Q属于比较高端的范围Q实现是很多回归都靠试团队在实现?/span>


]]>
B/SQC/S架构混合使用http://www.aygfsteel.com/nighty/archive/2008/05/06/198669.html寒武U?/dc:creator>寒武U?/author>Tue, 06 May 2008 04:43:00 GMThttp://www.aygfsteel.com/nighty/archive/2008/05/06/198669.htmlhttp://www.aygfsteel.com/nighty/comments/198669.htmlhttp://www.aygfsteel.com/nighty/archive/2008/05/06/198669.html#Feedback21http://www.aygfsteel.com/nighty/comments/commentRss/198669.htmlhttp://www.aygfsteel.com/nighty/services/trackbacks/198669.html    一般而言Q我们^常接触的大多数项目都应该是单U用B/S或是C/SQ除非在Ҏ场合Q否则比较少混合使用B/SQC/S架构。首先说一下对q二U架构特点的一些个人理解。B/S应该是目前很多项目都应用的架构,览器的方式使得用户的用十分方便,用户可以何时何地通过Internet讉KURL而进行相应的工作Q升U维护也能比较集中,~点是览器的表现能力受限以及常常受非议的安全性问题,如果软g的应用范围区域不集中Q而且用户l常变换地点q行讉KQ那么这U架构是非常适合的。C/S架构的C端有非常强的处理能力Q所以在交互表现和安全方面可以做得比览器强Q但是缺点也是非常明昄Q安装部|Ӏ升U维护、版本兼定w是比较头大的事情Q一般的适用场景是集中的办公室场所Q用户用范围相对稳定,以及一些对业务处理非常复杂的场合,Z降低服务器的负荷Q同样需要C模式的支持?br />     以前接触q的电信领域Q就有过混合架构的Y件。但是都是非常宠大,一直都对其实现Ҏ比较感兴,但是都没有机会进一步了解。最q搜索了一下相关的资料Qȝ一下؜合应用的一些想法(只针对Java方向Q?br />     ①؜合架构的问题集中炏V服务端׃nQ客L采用不同的表现方式,׃n的应该是业务层接口,持久层应该是屏蔽的。应用层的消息传递就是整个应用的关键所在,虽然像Jakarta提供的httpClientq种模仿览器的lgQ但是毕竟是模仿Q在很多斚w的功能还是缺q?br />     ②最传统的方式是采用EJB做ؓ服务Q这个宠然大物容易让人害怕,不过在分布式的系l中它还是有应用优势的,像电信和金融q种行业应用q是比较q的Q而且现成的中间g和应用服务器商都比较多,像Oracel、BEA、IBM、Sun都有成熟的应用品,当然开发的成本和h力投入也是恐龙数据的?br />     ③有|友说在C端直接访问数据库QB/Sl构不变Q也是通过数据库进行共享。这U方式是不可取的Q二个缺点:把服务器的业务逻辑搬到了C端上Q严g讲是不安全的Q升U维护也非常ȝQƈ发控制的压力都在数据库上?br />     ④采用RMIQ这个老古董相信应该很多h都不使用了,因ؓ它的使用要一q串的手l,比如服务接口定义必须实现Remote接口Q服务Server在实现时必须l承UnicastRemoteobjectc,必须使用rmic指o产生stub和skeleton{,讄上繁杂?br />     ⑤Spring q程服务。这个应该说是比较可取的Q大安比较喜欢轻量U的东西。就如第一Ҏ说的Q通过q程服务Q我们可以在客户直接调用服务端的服务接口Q就像本地调用一PSpring对远E服务提供了好几U实现方案?br />     ⑥WebService。适合异构环境Q但是WSDL的这U方式相Ҏ说会比较耗费资料Q因为标准定义除了业务内容外Q还有许多另外的说明内容?br />     Springq程服务实现Ҏ介绍Q?br />     ⑴Spring + RMI。Spring把传l的RMI方式的繁杂设|去掉,只要配置Bean文g和定义服务接口可以。RMI的服务启动和理都交lSpring来处理。RMI讉K的缺点就是对防火墙的IK力比较差?br />     ⑵Spring + Caucho的Hessian、Burlap。Hessian使用Http对象以中性的二进制消息进行传送,而不像RMI使用Java的序列化格式Q这U序列化是专制的Q不是Sun提供的序列化机制Q,׃是二q制消息Q所以不受限于某U实现语aQ传输时所需要的带宽较小是其优点。Burlap是以XML文g格式传送对象,XML文g有较高可L,应用E序只要能解释XMLp接收消息Q当然也不限于某U语aQ但是组装XML和解释XML都需要消耗资源,当传输大数据时性能应该存在问题?br />     ⑶Spring + Http Invoker。由于Hessian的序列化机制不是正统的Java序列化机Ӟ所以当遇到传输复杂的业务模型时Q就会存在各U问题,为此QSpring又提供了Http InvokerQ同h使用Http传送对象,而且是用Java的序列化机制。相比RMIQHttp寚w火墙的穿透力要强?br />     后来试了最后的q种Http Invoker方式Q是在Spring2.0版本下尝试的Q开发非常简单,|上也有大量的资料介l。应该说从这里入口可以做一些尝试。目前遇到的一个项目就需要؜合架构,B/S采用Spring2 + Struts2 + Hiberntae3Q浏览器只提供一些查询功能和数据展现QC端采用Eclipse的RCPq_Q共享服务器的业务接口,调用采用Http Invokerq程服务Q复杂的业务功能都集中在C端上?/p>

]]>
վ֩ģ壺 | | ¬| ۽| | ʮ| | Խ| | | | | ƽ| | Ϋ| | Ϫ| | ĵ| | ͻȪ| | | | | | | | | ¡| | ̽| Ӷ| | | | | Ԫ| | α| |