??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美不卡激情三级在线观看,在线播放的av,一区二区三区韩国免费中文网站http://www.aygfsteel.com/martin/category/11636.html为梦惛_?/description>zh-cnWed, 28 Feb 2007 19:08:46 GMTWed, 28 Feb 2007 19:08:46 GMT60架构之web framework- strutshttp://www.aygfsteel.com/martin/archive/2006/06/07/51201.html有梦?/dc:creator>有梦?/author>Wed, 07 Jun 2006 11:29:00 GMThttp://www.aygfsteel.com/martin/archive/2006/06/07/51201.htmlhttp://www.aygfsteel.com/martin/comments/51201.htmlhttp://www.aygfsteel.com/martin/archive/2006/06/07/51201.html#Feedback3http://www.aygfsteel.com/martin/comments/commentRss/51201.htmlhttp://www.aygfsteel.com/martin/services/trackbacks/51201.html [] 

Martin.guo

 

J2ee 架构中一般都要考虑 Web Framework 的选择。很多h选择比较行?/span> Struts 。项目组中遇到过q样的情况,有些Z熟悉 Struts Q而有些h又对 Struts 青睐有加。有没有一个折中的办法来满x有的人呢Q?/span>

 

我是q样设计的:

通过拦截提交?/span> ActionServlet 上的 http hQ经q?/span> Http Parse 来收集请求参敎ͼ?/span> Name-Value 的Ş式存放ؓh值对象,q且攑֜hU程相关的上下文中。这个时候你可以在 Action 执行l束前的M地方拿到q些h数据了?/span>

 

在这个基上,我们保留?/span> Struts ?/span> Action Qƈ且规?/span> Action ?/span> execute Ҏ里不能出CQ何跟业务相关的代?/span> , 仅仅是负责页面的{?/span>

 

那么业务怎么办呢Q我们定义了一个接?/span> Command, 它也只有一个方?/span> , 我们也取名字?/span> execute, q且没有M参数和返回数倹{该Ҏ的职责就是执行业务逻辑。这个时候你p问了?/span> Action 里抽M务逻辑Q怎么调用 Command 呢?h提交的数据怎么l?/span> Command ?/span> ?Command 执行完后的业务数据怎么q回Q?/span>

 

我们设计了一个业务执行器Q它的功能就是执?/span> Command 的业务逻辑实现 . 而把执行器的执行写到?/span> Action 里面。这样就隔离了页面流转和业务执行?/span> Action 的代码显的很l和模板化?/span>

 

׃h数据是放在请求线E相关的上下文中Q所以可以很方便的拿到。同?/span> Command 执行完毕的返回数据也是通过q个上下文返回给 Action 或者其他跟此请求线E相关的lgQ说白一点就是此U程能够跑到的Q何代码处都可以去跟上下文交互Q存取线E相关的数据和服务?/span>

 

设计到此为止Q已l可以回{开头的问题了?/span>

 

对于熟悉 Struts 的h呢,可以U极攑ֿ的?/span> Struts 标签Q?/span> Formbean, 但有一点就是自p?/span> FormBean 攑ֈU程相关的上下文中,q样你就可以?/span> Command 里面L出来工作了,同时 Command 执行完毕后,你就可以手把返回数据填充到q个 FormBean 里面M。跟你^时用没有太大区别?/span>

 

而对于不熟悉的h呢,你可能不喜欢?/span> Struts 标签Q也可能不喜Ƣ死板的 Formbean, 那么 OK Q你完全不用兛_q些Q你只要直接?/span> Command 里面d逻辑代码可以了。但有一点就是要Q你要手工把q回的数据集合放?/span> request 里面去,然后到流转的 JSP 里面取出来展C?/span>

 

OK Q皆大欢喜?/span>

 

 

msn:gdq123@hotmail.com



]]>
软g架构师之架构q程概要http://www.aygfsteel.com/martin/archive/2006/06/01/49505.html有梦?/dc:creator>有梦?/author>Thu, 01 Jun 2006 03:34:00 GMThttp://www.aygfsteel.com/martin/archive/2006/06/01/49505.htmlhttp://www.aygfsteel.com/martin/comments/49505.htmlhttp://www.aygfsteel.com/martin/archive/2006/06/01/49505.html#Feedback5http://www.aygfsteel.com/martin/comments/commentRss/49505.htmlhttp://www.aygfsteel.com/martin/services/trackbacks/49505.html软g架构是Y件系l一个高层次的结构体玎ͼ昄了系l分解后lg的布局和组件之间的关系。好的架构描q应该包含架构的多个视角Q组件的设计和扩展描qͼ以及为满_能性需求和非功能性需求的设计原则?br />一般说QY件架构分?个步骤,
1.建立架构的Q务ƈ且Ş成架构团队?br />2.建立q且文档化架构需求?br />3.设计架构
4.验证架构是否辑ֈ需?br />5.发布架构到开发团?br />
然后我们l说q五步骤
W一Q架构是需要有目标的,一般是Z满长期的业务需求。然后去制定dq且明确里程。让架构l的每个人都明确架构的目标以及Q务的q行和Q务之间的关系。M架构设想q个时候需要出来了。关键组件设想也应该有了?br />W二Q这个时候就需要按照目标去分开整理架构的需求了。开始可能是很多的需求烦引,每个索引是一两句话的表达。对于烦引要l出单的描述。烦引评审之后需要细化需求,是一个更l的需求整理,除了文字描述Q还可以配置囑Ş{。然后要做的是建立use case去覆盖这些需求?br />W三Q设计架构可以分为概要设计和详细设计阶段。概要设计需要给Z个比较轮廓性的设计说明Q能够比较简要的通过q些设计元素去阐quse caseQ在M上把故事讲完整。然后评审,q入详细设计阶段Q细化的设计更ؓ完整和脓q实现。同样需要一个说故事的过E,把use case通过详细设计的元素说的更为生动和形象。然后去实现和整合?br />W四Q验证的q程是测试的一个过E,在需求阶D会立很多试计划和用例。对需求进行一个扫荡,看实现是否到达了承诺?br />W五Q不断测试ƈ且反馈修改之后,E_版本可以发布到开发团队了?br />

个h观点Q请大家多讨论?br />

架构的设计部?
1。更应该侧重l徏的分解以及组件之间的接口关系。比一般的软g设计q程Q更H出lg的接口特性和使用描述。组件的功能列表Q生命周期,q发情况说明Q通讯消息格式{?
2。架构中的组件是有统一的架构思想和原则。组件是要被U束的?
3。组仉要提供事例代码,典型应用场景Q异总及测试说明?
4。组件有时候是要映到物理视图中的q程?
5。侧重架构系l的动态特性,lg之间的协作关pR?



msn:gdq123@hotmail.com



]]>
软g架构?/title><link>http://www.aygfsteel.com/martin/archive/2006/05/30/48953.html</link><dc:creator>有梦?/dc:creator><author>有梦?/author><pubDate>Tue, 30 May 2006 05:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/martin/archive/2006/05/30/48953.html</guid><wfw:comment>http://www.aygfsteel.com/martin/comments/48953.html</wfw:comment><comments>http://www.aygfsteel.com/martin/archive/2006/05/30/48953.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/martin/comments/commentRss/48953.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/martin/services/trackbacks/48953.html</trackback:ping><description><![CDATA[ <p>软g架构师是什么?需要什么样的知识体p?如何成ؓ优秀的Y件架构师呢?<br /><br />W一个问题:<br />软g架构师一词应该是对应pȝ架构师,都是架构师,但侧重不同。在4+1视图中,我觉得如果把架构师分两种的话QY件架构师应该是站在逻辑视图和开发视囄角度Q而系l架构师则更多的是过E视囑֒物理视图。当Ӟq两个角色就象是人的两个眼睛Q缺一个都会定位不准确Q容易是pȝ目标偏离?br /><br />当然了,现实世界中,一般这两中角色集中在一个hw上体现出来Q或者一个小l。很多公叔R不设|此c职位;有的公司则分工很l?br /><br />W二个问题:<br />知识体系不好_只说重点的吧?br />软g架构师的职责是把需求{换ؓ软g世界的模型?+1视图中以use case作ؓ核心Q其中功能性需求以及部分非功能性需求会被Y件架构师通过分析和设计,映射为各UY件设计模型。从OOA/OOD角度_use case 在这个过E中是要转换为各UUMLQ其中类图,序列图,状态图是最常用到的。这个{换过E是需要智慧的Quse case是目的,各种OO的原则是指导Q设计模式是l验Q灵z运用是能力。里面蕴涵了设计的美感,我觉得这个过E是衡量一个Y件架构师的最重要的指标?br /><br />当然q个q程是P代和反馈的,我觉得概要设计和详细设计只是思考同一个问题的_度不同而已?br /><br />另外是我们要熟悉语aQ详l设计是要{换ؓ代码的,而且跟语a是有关系的。语a比如java/c++{,详细设计的模型是有很多不同的。就需要Y件架构师有过q个q程Qƈ且是非常良好的映?br /><br />除了语言是要熟悉某个技术领域,比如J2EE/DOTnet.从J2ee来说Q可能需要了解比如jsp/servlet/ejb/jndi/jta/jdbc{。还需要了解各Uweb framework,o/rmapping,ioc/aop容器{等。还有的是一些技术组件和业务lgQ不如workflow,rules engine{等。另外比如各Udatabase.熟悉q些东西的目的,是把q些软g和组件合理ƈ且有机的l织h成ؓ一个开发的架构。这个过E是需要创造力和想象力的。可能很多h认ؓq个地方正是软g架构师体现能力的地方?br /><br />W三个问题:<br />我不是很清楚Q但我认为意志和惌力能够每个有目标的到彼岸?/p> <br /> <p> <br /> </p> <br /> <p> </p>msn:gdq123@hotmail.com<br /><img src ="http://www.aygfsteel.com/martin/aggbug/48953.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/martin/" target="_blank">有梦?/a> 2006-05-30 13:31 <a href="http://www.aygfsteel.com/martin/archive/2006/05/30/48953.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">̽</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ν</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">״</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank">ϰ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³ƶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">廪</a>| <a href="http://" target="_blank">ʯɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͼƬ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>