??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲线精品一区二区三区,亚洲日本香蕉视频,亚洲七久久之综合七久久http://www.tkk7.com/BlueDavy/category/1911.html不懂理论只懂实战的粗人?lt;br> &nbsp;&nbsp; <a ><b><font color=red>共有<script src=http://fastonlineusers.com/online.php?d=bluedavy.blogjava.net></script>人在同时阅读此Blog</font></b></a>zh-cnTue, 27 Feb 2007 08:43:18 GMTTue, 27 Feb 2007 08:43:18 GMT60四类设计人员http://www.tkk7.com/BlueDavy/archive/2006/09/16/69699.htmlBlueDavyBlueDavySat, 16 Sep 2006 04:15:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/09/16/69699.htmlhttp://www.tkk7.com/BlueDavy/comments/69699.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/09/16/69699.html#Feedback1http://www.tkk7.com/BlueDavy/comments/commentRss/69699.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/69699.html阅读全文

BlueDavy 2006-09-16 12:15 发表评论
]]>
l一、动态的理pȝ配置属?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/08/24/65621.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 24 Aug 2006 12:18:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/08/24/65621.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/65621.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/08/24/65621.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/65621.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/65621.html</trackback:ping><description><![CDATA[     摘要: 每个pȝ中都会有需要配|的属性,而通常q些属性的配置都会是分散式的管理,而且很多时候都是不支持动态,在实现这些属性的理(新增、编辑、删除、保存等)时L要不断的做重复的工作Q如果框架中能提供一个这L基础设施那么对于pȝ的配|属性管理来说就会比较好了,q样的话pȝ中所有的属性配|就可以采用l一的方式进行配|、获取、管理和动态的更新了,如果能动态的理pȝ配置属性的话,单的动态改变系l行Zp然的可以实现了?nbsp; <a href='http://www.tkk7.com/BlueDavy/archive/2006/08/24/65621.html'>阅读全文</a><img src ="http://www.tkk7.com/BlueDavy/aggbug/65621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-08-24 20:18 <a href="http://www.tkk7.com/BlueDavy/archive/2006/08/24/65621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增强C/Sl构软g的可理?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/08/15/63763.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 15 Aug 2006 12:35:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/08/15/63763.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/63763.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/08/15/63763.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/63763.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/63763.html</trackback:ping><description><![CDATA[     摘要: C/Sl构的Y件的可维护性一直就认ؓ是较大的问题Q当Ӟ在引入了自动升q样的小功能好很多了,q里谈谈C/Sl构软g的可理性,意思就是指Server对Client端的理Q在大多数C/Sl构的Y件中Qƈ没有很强的管理性的概念Q更多的面都是关注Server的业务处理、数据存储这些功能,当然Q不一定所有的C/Sl构软g都强调Server对Client的管理功能,来说说自q法中的Server对Client的管理功能吧?nbsp; <a href='http://www.tkk7.com/BlueDavy/archive/2006/08/15/63763.html'>阅读全文</a><img src ="http://www.tkk7.com/BlueDavy/aggbug/63763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-08-15 20:35 <a href="http://www.tkk7.com/BlueDavy/archive/2006/08/15/63763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pȝ设计基本原则Q-输入、输Z及扩?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/07/18/58718.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 18 Jul 2006 03:49:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/07/18/58718.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/58718.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/07/18/58718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/58718.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/58718.html</trackback:ping><description><![CDATA[     摘要: 在进行系l设计时Q采取的通常都是逐分解的策略,无论是分层、分模块都是典型的分而治之的{略Q而系l在通过逐步分解形成架构、详l设计时Q输入、输Z及扩展都是考虑的重炏V?nbsp; <a href='http://www.tkk7.com/BlueDavy/archive/2006/07/18/58718.html'>阅读全文</a><img src ="http://www.tkk7.com/BlueDavy/aggbug/58718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-07-18 11:49 <a href="http://www.tkk7.com/BlueDavy/archive/2006/07/18/58718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户评h(hun)pȝ的观?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/04/28/43727.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Fri, 28 Apr 2006 02:37:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/04/28/43727.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/43727.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/04/28/43727.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/43727.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/43727.html</trackback:ping><description><![CDATA[ <p>早上上班Q就听闻用户评h(hun)pȝ代码写的很烂Q作为programmerQ听到这句话估计都有很不服的心理Q但从用戯Ll的观点ȝQ就可以表示理解Q在q个目中尤其突出,用户最为看重的是系l漂不漂亮,操作h是否方便Q最后才是系l功能实现是否和需求一P而事实证明,很多时候其实系l功能是已经实现了的Qؓ什么他们还觉得和他们的需求不一样呢Q问题出现在交互上,操作上他们按照他们的x去进行,发现没法用,在这U情况下Q他们就认ؓpȝ是不可用的,在系l设计的可用性上要引赯够的重视Q这U看h的小事往往Ҏ(gu)造成客户对于pȝ的不信Q和抵触?br />programmer的思想通常锁定在如何将需求{化ؓ代码Q而由于过于在乎功能的实现Q往往忽略了交互的改善Q其实我们把自己作ؓ用户来想Qؓ什么要那么的在乎界面和交互呢,例如作ؓ外行Q我们去买DVQ估计除了功能外大家更在乎的会是DV的样子,另外一斚w也是一LQ在操作DV的时候,当不方便的时候那功能其实往往׃用的很少Q而且用v来也会觉得很不方便,q个时候我们的x也是一LQ这pȝ真烂Q还有一个例子就是用手机Q手机的交互其实非常的频J,它的操作的方便与否很大程度决定了手机的可用性,可以惛_Q如果打个电(sh)话就需要你?0几次的那U交互你能接受吗Q你能不骂这套系l烂吗,^_^Qprogrammer通常都认UI集成和交互都不是什么重要的事,因ؓ在programmer的思想中沉着Ҏ(gu)术的q求Q但当我们以一个外行的观点ȝ的时候我们就会发玎ͼ外行评h(hun)pȝ的观点就是这么的单,其实像SOA的思想一Ppȝ提供的是服务Q不好的服务用户怎么接受的了呢,而这U服务很大层面就来源于界面以及UIQ当Ӟqƈ不是说功能不重要....</p> <img src ="http://www.tkk7.com/BlueDavy/aggbug/43727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-04-28 10:37 <a href="http://www.tkk7.com/BlueDavy/archive/2006/04/28/43727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>讨论Q动态生的持久模型和数据存储的设计模式http://www.tkk7.com/BlueDavy/archive/2006/04/26/43224.htmlBlueDavyBlueDavyWed, 26 Apr 2006 03:19:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/04/26/43224.htmlhttp://www.tkk7.com/BlueDavy/comments/43224.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/04/26/43224.html#Feedback4http://www.tkk7.com/BlueDavy/comments/commentRss/43224.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/43224.html例如在一个简单的考试pȝ中,出题人在pȝ中出题,{题行相应的{题?
希望能发赯论,ȝZ个这L设计模式Q^_^Q顺便还发v对于另外一个场景的设计模式的讨论,需要动态的扩展目前已有的PO或表Q不知道在这个场景中大家会采用什么样的解x案,预留字段Q动态修改表Q关联属性扩展表Q抑或别?.........  阅读全文

BlueDavy 2006-04-26 11:19 发表评论
]]>
接口实现与配|实?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/03/15/35490.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Wed, 15 Mar 2006 14:48:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/03/15/35490.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/35490.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/03/15/35490.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/35490.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/35490.html</trackback:ping><description><![CDATA[<P>在实现系l功能的时候,通常会首先定义好功能的接口,在系l功能不断被实现的过E中Q慢慢的发现有些接口的实现很cMQ这个时候通常会开始做一ơ抽象,形成一个共同的部分Q^_^Q慢慢的pȝ形成了一个抽象的层次Q而ؓ了通用Q通常是通过定义接口QŞ成一个抽象类Q抽象类中暴露出一些抽象方法供外部扩展实现Q逐步的积累抽象类后慢慢Ş成一个基框架Q而外部在使用旉常可通过l承抽象cȝ方式来复用、扩展和实现自己的功能?BR>通常在一些品的开发^C׃提出配置的方式去复用、扩展和实现自己的功能,而不是通过~写代码的方式,其实是在上面的基础框架上再做了一U抽象,也就是提供了对于基于基框架的抽象类的抽象方法的实现再做了次共性的分析QŞ成了一U通用的实玎ͼ然后实现部分暴露一些可配置点,其实也可以想象这个时候同样可以暴露一些抽象方法,呵呵Q只是配|让人感觉不是写代码Q很舒服Q而且更有利于x生效的实现?BR>再深入的xQ其实觉得ؓ什么MDA是可行的Q但又是难推q的觉得是同L道理QMDA模型经q一U一U的抽象Q最后Ş成的模型固然是一个非常灵zȝ模型Q可通过配置形成多种多样的系l功能,但它带来了在抽象层次的难度,q个通常来说不是那么Ҏ(gu)做到?...而且其实在做一U一U的抽象的时候如果做的不够的话,通常会导致基于抽象无法完成特定的功能Q这个时候对于框架来讲通常会变得比较的ȝ<BR><BR>pȝ功能---->(一ơ抽象后)-----通用pȝ功能------>(二次抽象?-----基础框架----->(三次抽象?----->开发^?---->......     一直这么抽象下去,最后系l会变成什么呢Q那个模型又有什么h懂呢Q灵zL、扩展性、简易性、可l护性,都是值得深思的问题.....</P><img src ="http://www.tkk7.com/BlueDavy/aggbug/35490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-03-15 22:48 <a href="http://www.tkk7.com/BlueDavy/archive/2006/03/15/35490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计杂谈http://www.tkk7.com/BlueDavy/archive/2006/02/20/31691.htmlBlueDavyBlueDavyMon, 20 Feb 2006 12:11:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/02/20/31691.htmlhttp://www.tkk7.com/BlueDavy/comments/31691.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/02/20/31691.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/31691.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/31691.html其实xQ觉得这两种在设计上又是一LQ需要的都是业务的抽象能力以及技术的实现设计能力Q对于框架产品的设计来Ԍ业务的抽象能力即Y件行业的业务的抽象,而技术的实现设计能力在两者都是相同的Q即当出现技术难Ҏ(gu)都应选择先进行spikeQspike后再q行相应的设计,否则做出来的设计是没什么意义的?BR>现在l手了一个东西就是先l过设计Q再q行开发的Q典型的瀑布方式Q设计要做的非常的细Q觉得这U方式挺依赖pȝ设计师的Q也真正的感觉到一ơ完整做设计的过E,应该_q个时候会发现自己的很多不Ipȝ设计师都l历一个这Lq程Q从架构到概要到详细Q要详细到够编码的E度Q觉得挺Ҏ(gu)出现矛盾的时候,因ؓ象框架的品来讲最l的详细设计可能是经qNơ抽象的具体实现的设计,如果真的惌其他的h仅凭文档p懂,我觉得还是挺隄Q同时由于框架的品通常会面临不的技术难点,q个时候的设计更是不好把握,因ؓ会有一些风险点的出玎ͼq个时候设计做的过l就昑־不是那么得有意义QM而言Q我q是更喜Ƣ先做初步设计,在实现过E不断重构最lŞ成设计的方式Q觉得那Lq程非常的好Q在q样的过E中详细、架构都是在不断的被重构Q设计慢慢的׃变得非常的不错,不过q个要根据团队而定Q只有实力较强的团队才可q么做,否则会出现无设计和不可控制的现象?BR>q是信奉自己的一句话Q“不要求高质量的实现代码Q但要求高质量的试代码”,我相信一个具有优U习惯和掌握够重构技巧、OO思想{的开发h员很Ҏ(gu)可以将不是高质量的实现代码变魔术般的变为高质量Q但依赖于高质量的测试代码?img src ="http://www.tkk7.com/BlueDavy/aggbug/31691.html" width = "1" height = "1" />

BlueDavy 2006-02-20 20:11 发表评论
]]>
Acegi实现对象实例U权限控制的Ҏ(gu)http://www.tkk7.com/BlueDavy/archive/2006/02/13/30461.htmlBlueDavyBlueDavyMon, 13 Feb 2006 07:38:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/02/13/30461.htmlhttp://www.tkk7.com/BlueDavy/comments/30461.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/02/13/30461.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/30461.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/30461.html一直以来对于Acegi实现Domain Object Instance的权限控制就比较感兴,今天抽空大致的看了一下,感觉和我以前提出的数据权限那部分的实现是大致相同的?BR>Acegi在Domain Object Instance上采用的是ACL的实玎ͼACL在实现实例别的权限控制上确实是非常好的Ҏ(gu)Q按照ACL的思想我们很容易知道Domain Object Instance的控刉要的是user--->Domain Object Instance的一个列表的l护Q这点在Acegi上可以看到采用的是通过acl_object_identity以及acl_permissionq两张表来实现的Q看acl_object_identity表惊喜的发现acegi也是考虑Cdomain object instance的权限承的实现的,acl_object_identity记录的是需要控制权限的domain object instance的相关信息,acl_permission记录的即为用户对于domain object instance的权限,Acegi做到的其实就是将q些通用的部分做了一个实玎ͼ在存储domain object时它帮忙做了相关的权限信息的存储Q应该说acegiq样的实现确实是可以做到domain object instance的权限控Ӟ不过感觉在acegi中要d现对象实例权限控制q是不那么的方便Q配|v来非常的J琐Q应该基于它做一U提升,在易用性方面?BR>而且q种做法在R入性上仍然是无法避免的Q比如需要分获取数据时Q必然是要在现在的Dao层次做一个R入的Q尽这点经q一定的Ҏ(gu)(Template Pattern)是可以实现无侵入性的...
目前感觉在对象实例别的权限控制上还是没有非常好的方?..
曄考虑q是否可以采用AOP的weaver来实?..
q有是在对象实例别是否ؓ权限控制q是业务规则定义斚w是有一定的区分隑ֺ的,很多时候很难明白的L识哪个是数据权限、哪个是业务规则Q感觉在q两点上挺容易发生؜淆的现象?/P>

BlueDavy 2006-02-13 15:38 发表评论
]]>
用户才是上帝http://www.tkk7.com/BlueDavy/archive/2006/02/12/30371.htmlBlueDavyBlueDavySun, 12 Feb 2006 10:29:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/02/12/30371.htmlhttp://www.tkk7.com/BlueDavy/comments/30371.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/02/12/30371.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/30371.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/30371.html一直以来,各种行业都宣传要本着用户是上帝来服务Q确实,真正做的成功的企业其实都取胜于这个原则上QY件行业其实同样如此,要把用户真正的当成上帝才行,像MSQMS从很多方面都是在为用戯虑Q不论是面向最l用戯是面向开发h员的产品?BR>感觉软g技术设计h员、技术h员都很容易陷入误区,是L会从技术上去评价一个Y件的好坏Q尽这实是一斚wQ但对于用户而言q点其实是没什么意义的Q虽然在软g界一直强调着的需求驱动的开发原则,但觉得真正诏d的也不多Q而且即贯彻的好也只是在需求上做到和用L一个脓(chung)q?BR>要想真正的把用户当成上帝Q只能尽量的d做换位思考,可以x自己在用一个系l的时候会是怎么LQ觉得一个系l对于用戯言Q其实要求就两方面,一是功能上的,二是界面上,功能上的OKQ我们都LI但是界面上的呢,实是现在忽略最多的Q当Ӟq好的是现在也是引v了业界够的重视Q界面上有两块,一是界面的UI设计Q二是界面的UI交互Q这是我们现在迫切需要提高的Q在加强了这两方面后才能真正的把用户当成上帝Q从UI设计以及UI交互上ؓ用户q行充分的考虑Q或者说从这两方面提升框架的支撑能力Q但x现在的框ӞN多都是在q求一U技术上的,在设?开发中通常我们需要选择哪种框架的时候我们太多的陷入了技术的角度去观察,仍然是把自己当ؓ上帝?BR>在技术的提升上业界都做了非常多的努力Q但在把用户当成上帝q点上做的仍然是多么的不IxMS很多时候不一定是在技术上做非帔R要的改进Q它对于交互的重视是它成功的重要因素?/P>

BlueDavy 2006-02-12 18:29 发表评论
]]>
惊叹奛_造hQ-ppȝ设计http://www.tkk7.com/BlueDavy/archive/2006/02/11/30282.htmlBlueDavyBlueDavySat, 11 Feb 2006 10:44:00 GMThttp://www.tkk7.com/BlueDavy/archive/2006/02/11/30282.htmlhttp://www.tkk7.com/BlueDavy/comments/30282.htmlhttp://www.tkk7.com/BlueDavy/archive/2006/02/11/30282.html#Feedback8http://www.tkk7.com/BlueDavy/comments/commentRss/30282.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/30282.html对于么复杂的pȝQ女娲肯定得x楚h到底是怎么LQ这个她当然是按照她自己来构思的Q这个时候她要做的就是将q个庞大的系l进行分解,划分如头、n体、上肢、下肢这L子系l,定每个子系l的职责Q如头部负责思考以及其他的一些职责,同时q需要ؓ每个子系l定义相关的接口Q如头和w体的接口、上肢和w体的接口,最后她q需要确定各子系l之间的通讯是怎么d现的Q如通过血、神l等Q在做完q部后还只是完成了一部分而已Q她需要l的不断的按照这U方法进行分解,如将头又分解、头颅等{部分,直到最后分解ؓl胞(yu)部分Q才完成了整个pȝ的详l设计,此时才能开始做人的实现Q女娲对于一个如此复杂的pȝ却能够做到合理的划分各子pȝ的职责、定义各子系l的接口以及通讯方式Q得各个子pȝ能够如此的协作,不得不o人惊叹,不如把女娲称为系l设计的宗师Q呵?..
以上a论纯属娱乐化的观点,呵呵Q只是表辑և了系l设计的一个通常q程Q简要表明系l设计采用的最基础的方?--分解Q系l设计的产物--子系l的职责定义、接口定义以及通讯定义?img src ="http://www.tkk7.com/BlueDavy/aggbug/30282.html" width = "1" height = "1" />

BlueDavy 2006-02-11 18:44 发表评论
]]>
界面对象?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/26/29238.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 26 Jan 2006 03:59:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/26/29238.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/29238.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/26/29238.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/29238.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/29238.html</trackback:ping><description><![CDATA[<P><FONT color=#008000 size=4><STRONG>概述<BR></STRONG></FONT>界面对象化是指以对象的思想Lq页面元素以完成UI的集成和开发,以UI原型能够映射或{化ؓ可运行的pȝ原型Q提升系l开发的效率Q避免大量的p旉在UI的集成、维护上?BR><FONT color=#008000 size=4><STRONG>产生的原?/STRONG></FONT><BR>在传l的开发过E中Q特别是Web开发过E中Q从UI原型转化为系l原型的q程L要耗费特别长的旉Q在pȝ的整个开发过E中通常在UI集成和维护上往往是耗费最长的旉Q而很多时候更是由于UI集成了动态性质而导致了UI修改、代码调试的困难?BR>Z么会出现q样的现象呢Q这L现象产生的原因无非是UI原型和系l原型之间存在的差异造成的,UI原型是一U静态原型,pȝ原型是一U动态原型,在UI原型q种静态的原型中只描述了系l的静态结构、显C和行ؓ(html、css、js)Q而对于系l原型来说它需要的是一U动态结构,q个时候要做的无疑是怎么栯UI原型中的静态结构、显C和行ؓ变ؓ动态的Q造成q个的原因主要是因ؓhtml的结构元素是无法表达出其动态性质的,当然Q这不能LHtmlQ它本来只负责静态的?BR>但对于开发h员来_q个时候其实要做的是就是让面的元素能够动态化Q界面对象化是解决它的一U不错的办法Q对象化使得界面中的所有元素都可以作ؓ对象来看Q从OO角度ȝQ可以得出界面中的Q何元素在动态方面拥有两个特性,是动态的l构和动态的行ؓQ动态的l构是指q个元素会改变或增加原有Html界面的结构,如一个用户列表的表格Q这是一个典型的动态结构,表格中的l构会随着用户列表信息的不同而不断的增加tr/tdq样的结构元素;动态的行ؓ是指界面元素的一U动态交互行为,单的比如在下拉选择用户所在部门的时候就是一U下拉的动态交互行?q个也可以视为静态的)Q另外一个更典型的例子是表单提交后与后台交互的此U交互行为?BR><FONT color=#008000 size=4><STRONG>实现的方?/STRONG></FONT><BR>如今Web开发框枉在重视这斚wQ都在想办法让html静态过E{化ؓ动态过E变得更为简单的Ҏ(gu)Q应该说象jsf、tapestryq些的东襉K在这斚w做出了努力,jsf来说视图更ؓ开发视角,但在UI集成斚w仍然是非帔R烦;tapestry来说则表现的更ؓ好一些,它更为注重避免对于html静态结构的侵入?BR>Z让html静态结构能表现出动态结构的展现和交互的Ҏ(gu),q个时候设计模式中的decorator模式显得很适合了,要做的无非就是把一U静态的l构重新装修一把,xdecorator模式Q它不会对原有的对象产生什么媄响,而同时又可表辑և更ؓ丰富的行为?BR>既然是decoratorQ那么实现界面对象化的方法也Q现出来了Q在采用界面对象化的思想上,界面所有元素都可以视ؓ对象Q只是这些对象又有可能是由其他的对象l合而成Q如table是一个对象,其中的tr、td也是对象Q这个在js中深有体现?BR>界面的结构、显CZ及行为分ȝ方式无疑是非常值得学习的,在描qC个界面对象的动态特性的时候这点也是同样需要保持的Q界面对象的动态特性主要就是动态结构和动态行为,对于动态结构可以采用类加模板的方式来实玎ͼ而对于动态行为在现在我们则可以采用js来完全达?前台交互js本来可做到Q后C互则可通过ajax的方式来实现)?BR>说的可能不是很清楚,举例如下Q?BR>如一个用L列表的html可能是这P<BR><table id="userstable"><BR></table><BR>在真实的pȝ中这个部分必然是动态的展现Q需要改变原有的l构Q这个时候采用界面对象化的方法我们可以这么去做:<BR>在一个独立的xml文g中进行这L描述Q?BR><element id="userstable"<BR>               bindhql="from User u where u.id desc"<BR>               showstyle="userstablestyle"/><BR><component id="userstablestyle"<BR>                    ref-component="table"<BR>                    showcolumns="user.id=序号;user.name=用户?/><BR>q是动态结构的实现Ҏ(gu)的一个示例,可以看到在这L情况下对原有的html是没有Q何的侵入的?BR>再D一个动态行为的例子Q?BR>如一个新增用戯单中有一个保存的按钮Q需要提交到后台执行动作QƈҎ(gu)动作执行的结果来控制面的流转,html中可能是q样Q?BR><button id="saveBtn" name="saveBtn" value="保存"><BR>同样的,在一个独立的xml中进行这L描述Q?BR><element id="saveBtn"<BR>               actionType="pageflow"<BR>               action="saveUser"/><BR><action id="saveUser"<BR>            ref-action="DataSave"><BR>      <result name="success">userstable</result><BR>      <result name="error">saveusererror</result><BR></action><BR>q样完成了html中静态元素decorator成一U具备动态特性的元素的过E?BR>界面对象化后界面lg化自然也可以Ş成了Q也是如今行的UI ComponentQ在q样的一U实现方法下我们甚至可以惌在UIq行大变动的情况下根据无需开发h员做M改动pȝ׃然可以运转,q必然会大大的减UI集成和维护的工作量;但UI Component在目前也是会带来一些问题的Q就是在如今很容易将UI设计图{为html的情况下Q反而因Z用了UI Component造成了很难达到UI设计的效果,像是CSl构一PCSl构中的元素Z做到和UI设计一L效果无疑是要付出很大的努力的Q不q在web上的UI Componentq是比CS占有更多的优势,因ؓ它可以通过css来控制显C,仍然看好Web的开发方式,虽然Web的交互方式现在离cs的交互方式还有一定的差距Q但显C效果来讲Web是更Ҏ(gu)做的比csl构好的?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/29238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-26 11:59 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/26/29238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回顾两个目看设计阶D?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/18/28580.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Wed, 18 Jan 2006 15:22:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/18/28580.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/28580.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/18/28580.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/28580.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/28580.html</trackback:ping><description><![CDATA[<P>回顾自己所l历的两个项目,来对设计阶段q行了ȝQ自׃是个XPerQ经历过的这两个目也基本都是采用XP的方式进展,大家都知道,XP在设计阶D|崇的是群体设计,通过CRC来完成,在这里就对两个项目执行的情况做做ȝ?BR><STRONG>目A<BR></STRONG>一个大型项目,当时的团队相当于是两个设计师加上三个高程l成QP代会议完成用h事分解、CRC设计以及d分配Q典型的XP方式Q项目开展过E中应该是整个过E都执行的不错,管现在回想当时的CRC做的q不是很好,但应该说在整个项目开展过E中q没有出现多问题,目需求的实现都还正常,整个团队的提高也是非常的不错Q共同进步?BR><STRONG>目B</STRONG><BR>一个框架型目Q团队成员是一个设计师、一个高E加上四个初E,同样的XP方式的设计,目开展过E中出现了不问题,设计师不得不花大量的旉在技术支持上Q而且最后项目的l果无论是需求上q是设计上都产生了不的偏差Q整个团队的提高也没辑ֈ期望的效果,而由于设计师q多的投入在技术支持上Q得架构的完善一直存在偏R?BR><BR>Z么同Lq程在两个不同的目、不同的团队中执行的效果会相差这么远呢?<BR>首先从项目类型分析,目A属于实际目Q项目B属于研发目Q两个项目的x点不同,目A的关注点是客户需求,目B的关注点则更多的是扩展性和二次开发的易用性,在这两类目中设计几乎是完全不同的,目A更多的是业务的复杂度Q而项目B更多的却是技术的复杂度,从这个方面分析下来得出的l果其实是目A更重人员的业务能力,而项目B更重人员的技术能力,当时目A团队中的人员对该目的业务应该说都属于熟(zhn)的那种Q觉得这也是成功的原因之一Q而项目B团队中的人员技术相寚w目要求来讲是不的?BR>接着从项目成员本w分析,目A中的几个成员基本都属于能够独当一面的人,而项目B中的成员水^参差不齐Q觉得这也是在两个项目中执行效果不同的原因之一?BR>而最重要的一炚w题我认ؓ出在设计阶段上了QXP在设计阶D|多的是发挥群体智慧,在设计时基本是群体参与,而Ş成的CRC管已经详细Q但通常都没有一个良好的记录Q在目A中由于团队成员个人的能力即在实现的q程中出C些问题也能独立解冻I所以没有暴露出什么问题,同时׃团队成员能力的相当,在CRC设计讨论的时候大家基本能做到充分的交,对于大家的提升都很明显,而在目B中则׃团队成员能力的参差不齐,D在CRC设计时基本没有讨论,都是设计师主|而且最l由于没形成_的文档,在实现时团队成员仍然是出C的问题Q而需要设计师不断的去指导Q最l导致设计师在架构上投入的不I同时也导致团队成员在实现时仍然出C问题;在设计阶D늚W二个问题则是由于在XP中实行简单设计,当然Q简单不{于陋,但这个时候的设计更多的其实是需要通过重构M断完善的Q在目A的团队中成员在完成Q务后都会对自qdq行一定的重构完善设计Q而在目B中却没法做到q一点,D最后的实现在设计上出现q多不完善的地方?BR><BR>在这L分析下,认ؓ设计阶段需要充分结合团队情况而考虑开展方式,对于水^都相当ƈ且具有一定设计能力的团队而言Q群体设计的方式无疑会大大超q个体设计,对于整个团队的协作、水qx升都会v到极佳的作用Q而且q时我觉得也没必要在设计上过多的q求Q而应该采用能惛_的最单的解决Ҏ(gu)Q在成员实现解决Ҏ(gu)的过E中成员可根据经验不断的q行重构完善设计Q在q样的情况下没必要开始Ş成规范的设计文档Q可在一定的阶段如P代完成前的设计稳定时形成规范的设计文档,其实同样Q在q样的团队中没有明显的设计师和开发h员的区别Q在q样的团队中对于需求的变化是可以快速进行响应的Q不用纠~于规范的文档格式,而可以通过代码来表辑և_的设计思想Q而对于水q_差不齐的团队而言Q个为团队中的系l设计师q时要充分担当设计师的职责,对于d提供l的设计文档Q通常来说Qؓ了方便整个团队的理解Q需要Ş成规范性质的文档,而且在做设计Ӟ设计师应该尽量的考虑齐全Q不能过多的M赖后期的重构来完善设计,同时Q在设计交由开发h员进行实现时要加强Code Review以及开发指|在这样Ş式的团队中,自动生成代码的Ş式以及开发代码的模板会v到很好的帮助Q或者设计师可以通过依赖设计工具如rose{的强大支持Q将设计模型转化为开发模型,从一定程度上限定和规范开发h员的开发,当然Q最佳的是提供框架和框架的IDEQ在q样的方式下Q就要求设计师对于设计有充分的把握能力和预见能力Q否则在需求出现变化时会难以应付,呵呵Q就仅仅在规范的文档格式斚w都要投入不少旉Q在q样的情况下Q设计师和开发h员的职责一定要界定清楚Q设计师需要首先对架构q行完善Q在完善后开始详l设计ƈ交由开发h员实玎ͼ在这个过E中设计人员更多的是需要承担v开发指导和设计Review的角艌Ӏ?BR><BR>by the wayQ其实也可以看出Q需要充分的对团队成员进行了解来制定相应的Y件过E,惛_到流水线式的开发是要付出巨大的前期努力的?BR><BR><EM>psQ后l一文:pȝ设计Ҏ(gu)和工?争取在年前完?Q^_^</EM></P><img src ="http://www.tkk7.com/BlueDavy/aggbug/28580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-18 23:22 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/18/28580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计文档Q?/title><link>http://www.tkk7.com/BlueDavy/archive/2006/01/06/26939.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Fri, 06 Jan 2006 13:19:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2006/01/06/26939.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/26939.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2006/01/06/26939.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/26939.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/26939.html</trackback:ping><description><![CDATA[<P>做Y件以来,q个话题一直是自己很郁L一个地方,我们来看看Y件开发的q程QY件开发的q程无论是采用传l的瀑布、如今的q代{方式都是一个需?->设计-->实现的过E,在这整个q程当中Q每个环节都要有个完成的标识Qƈ且需要成Z一环节的前|条件、参考依据,q个时候通常的做法都是通过提供文档的方式,但是在我所l历的开发当中,我最郁闷的也是这点,需求这部我没什么疑问,我觉得生需求文档是必须的,但其实就我所l历的开发来看,我认为需求文档对于用例最好不是仅仅依赖于描述Q描q是没h会仔l去看的Q而最好是UI原型图,q样对于用例的表达会清晰些,当然Q有些复杂的部分仍然需要通过描述的方式?BR>来看设计部分Q在q个部分我一直就觉得有些疑问Q一直以来都不是很认同在设计的输出就是要提供一份详l、规范的设计文档Q在我看来,设计实是进行实现的前提条gQ这毫无疑问Q但真的׃定要通过一份详l的设计文档来做到这点吗Q我觉得设计中最重要的设计理늚表达Q而对于设计理忉|觉得最佳的表达方式仍然是图形,而这个图形一定要采用规范的象UMLq些来表C吗Q我q不是那么的认同Q我觉得设计图最重要的就是要表现q意思,至于你用什么图形来表示我不觉得有什么重要,只要设计人员认ؓ那是他最擅长表达自己设计意图的工具就行,没必要在工具qg事上费设计人员太多的时_q且造成了限Ӟ设计的评审我觉得是有必要做的Q这时我觉得大家可能会问Q没有文档怎么办,怎么评审Q我觉得评审的h是ؓ了让同行的设计h员能够根据目前设计h员对囑Ş的一个解释来准备的了解设计h员的设计意图Qƈ且根据自ql验相应的给设计人员一些徏议;其次Q从单设计角度上来讲Q我觉得设计是一个不断充实和完善的过E,设计是一个典型的求解q程Q就象一道数学题Q通常来说Q也怼有N中解法,每个不同E度的h看到的解法也许是不一LQ但首先能解出来q就是一个成功,其次才是看这个解法有什么可以改q的地方Q我现在做设计的时候就是首先采用自q前能惛_的最单的解决Ҏ(gu)Q在做同行评审的时候也许有些同行能l出些徏议,如果没有的话Q通常来说我会先按照这个简单的解决Ҏ(gu)先做Q在实现后其实就会发现目前这个实现方案的一些问题,即当时没发玎ͼ在添加新功能的时候也会发玎ͼq个时候依赖重构开始进行调_其实我觉得只有这样一个设计才能慢慢的被完善、被诞生Q应该说Q不同程度的设计师的区别在于设计出来的东西所被完善时投入的精力和造成的媄响,我相信没有哪个设计出来就是那么好的,在这U情况下Q通常׃出现一个问题,是最后实现Ş成的设计和最初的设计有很多的不同Q这个时候是不是意味着在开发的q程中应该一直去更新、维护设计文档呢Q所以我觉得最初的设计文档不需要ؓ了规范投入那么大的精力, 但不意味着不要Q需要的是一份能够表达设计意囄文档Q最重要的是囑Ş化的表达Q大家认为呢Q或者说大家都是怎么做的呢?q有是q种时候正规的设计文档什么时候出呢?^_^Q缺文档时有的一个问题是怎么样将设计意图准确的表辄开发h员,q部的做法在XP中通常不存在,因ؓXP中设计是大家一起做的,在传l的情况下我觉得更多的是依赖设计人员和开发h员的频繁交流以及对于代码的code review?BR>但缺设计文档在公司的运作中通常会出C个问题,是领导们的不放心,领导们会觉得怎么l过了这个阶D|啥正式的产物Q领g会认计图q些是不以证明q个阶段的完善的Q郁P造成L和领导Ş成矛盾,q也怪自己在安排d旉常~少q个正规的设计文档的~写q程Q这个过E真的有q么必要吗?疑问?.....<BR><BR>psQ顺便说下现在自׃设计到实现的一个步骤,在设计时首先我会Ҏ(gu)目前的需求得出问题域Q这个时候开始进行设计,寚w题域q行求解Q这个时候会l一个自p惛_的最单的解决Ҏ(gu)Q注意,既然是解x案就以ؓ着首先要能解决问题Q简单的解决Ҏ(gu)不等于简陋的解决Ҏ(gu)Q在提供q个解决Ҏ(gu)后开发h员实现后我会对codeq行reviewQ而这个时候reviewl常会发现设计中值得改善的地方,q个时候开始对设计q行重构Q详l设计一般要在P代完成时才能最lŞ?....觉得q样的方法挺好的Q^_^Q自己在做实现的时候现在的做法都是先把试代码写完后,写设计的时候会先随意的写,写完在通过试后开始对代码q行重构Q这个时候开始把之初的长Ҏ(gu)首先q行重构为小Ҏ(gu)Q重构完后开始做装的考虑QŞ成对象模型,在对象模型Ş成后开始考虑l承、多态的引入Q最后开始考虑设计模式的引入,一般这个时候最l的详细设计才得以Ş成,我觉得这个时候是体现一个设计师水^的时候,一个优U的设计师在设计之初就能想到很多,预见的很q,使得设计在设计之初就能够的完善Q而不需要通过太多的重构Ş成最l的设计Q而一个普通的设计师也许最初只是能l出一个解x案,但毕竟是可行的解x案,在设计实现的q程时才逐渐的发现设计的不Q这个时候通过重构q行的完善,对设计师来讲也是一U很好的U篏Q所以来_在完成设计后最好是能多找h交流交流Q^_^Q喜Ƣ这个方?......</P><img src ="http://www.tkk7.com/BlueDavy/aggbug/26939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-06 21:19 <a href="http://www.tkk7.com/BlueDavy/archive/2006/01/06/26939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据集表现层lg之接口控?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/12/24/25300.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 24 Dec 2005 06:07:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/12/24/25300.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/25300.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/12/24/25300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/25300.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/25300.html</trackback:ping><description><![CDATA[<P>数据集表现层lg暴露对外的接口,lg可通过参数讄{方式来辑ֈ对组件的如下控制Q?/P> <LI><STRONG>数据集的讉K控制</STRONG><BR>讉K哪个数据?BR>讉K数据集的参数<BR> <LI><STRONG>昄控制</STRONG><BR>昄的Ş?树、表根{Grid、列表等{?<BR>昄的样式控?html、css)<BR>昄的字D?BR>昄字段的字D名<BR>昄字段的列?BR>昄字段的顺?BR>昄字段的权限控?BR> <LI><STRONG>操作控制</STRONG><BR>对于能否新增、编辑、删除、查询的控制<BR>自定义新?~辑面的控?BR>Ҏ(gu)权限Ҏ(gu)作的控制<BR>对于是否分页昄的控?/LI><img src ="http://www.tkk7.com/BlueDavy/aggbug/25300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-12-24 14:07 <a href="http://www.tkk7.com/BlueDavy/archive/2005/12/24/25300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计生一qȝhttp://www.tkk7.com/BlueDavy/archive/2005/12/20/24701.htmlBlueDavyBlueDavyMon, 19 Dec 2005 16:42:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/12/20/24701.htmlhttp://www.tkk7.com/BlueDavy/comments/24701.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/12/20/24701.html#Feedback5http://www.tkk7.com/BlueDavy/comments/commentRss/24701.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/24701.html?/STRONG>
担Qpȝ设计师的职位一q了Q尽自己到现在为止仍然是个不合格的设计师,虽然q一q以来也不是完全从事设计的工作,但毕竟站在这个岗位上Q主要从事的q是pȝ设计斚w的工作,加上自己也有志于在这个方向发展,所以做一个年度ȝ是有必要的,也希望能对希望进入设计岗位的朋友们有些帮助,同时也希望得到在设计岗位上有l验的同行们的指炏V?BR>q也是自q正担ȝl设计师q个岗位的第一q_管在以前的工作中也曄负责q设计部分,但现在回v来,觉得如果不在q个职位上,很多时候是无法了解到这个职位应该做的事的,自然也就无法d了,在整个一q的工作中学C很多的东西,同时也暴露了自己很多的不I但M而言自己是觉得已l踏入了pȝ设计的大门,但还需要不断的提高?BR>学到的东?BR>概述
一q以来作为系l设计师主要参与了公司的一个C/Sl构的品的研发、工作流pȝ研发的规划、一个办公应用系l的目以及现在手头上的一个开发框架中?BR>详细
在从事C/Sl构的品的研发上,此品的pȝ架构主要为插件体pL构,不过在实际实现过E中做的不够好,不过一直到现在插g体系架构仍然是我最为关注的Q而且自己也在做这斚w的事情,从设计角度的考虑上来说完成了q程调用、增量缓存等的设计实现方案,同时也根据场景运用了合适的模式。在q个产品中远E调用角度引入了同步、异步的机制Q尽后来异步一直没搞定Q不q毕竟去摸烦了,呵呵Q现在倒是有解x案了Q增量缓存方面则是ؓ了提升客L与服务端的数据交互效率;模式斚wq用的主要有命o模式、责任链模式、Template模式、Observer模式。这是自q一ơ作为系l设计师负责整个产品的设计,现在回顾h自己在那个阶D做的是不够的好Q主要是在整体系l的设计上做的不够的周全Q系l全貌的体现仍然不够Q其实从一定程度上来讲是架构不够完善Q而且在架构的实现上做的也不到位?BR>在从事工作流pȝ研发的规划上Q自׃要是作ؓ规划人员Ҏ(gu)个工作流pȝ的研发进行规划,同时也作为系l设计师Ҏ(gu)个工作流pȝq行设计Q工作流pȝ一直是工作以来的重点,相对来说在这斚w的经验比较的多,整个工作系l研发的规划做的比较利Q可惜后来由于公司的某些原因Q无疾而终?BR>在办公应用系l的目上自׃为项目经理和pȝ架构师双重角Ԍq里主要讲系l设计方面的工作Q在q个目上根据自׃往的经验完成了一个办公类应用pȝ的架构设计,同时完成了一个完整的权限pȝ以及一个基本的CMS的设计工作上Q收获不的目。权限系l的设计也是在blog上曾l专门写了一个系列,而在CMS中的话主要是完成了缓存、模板机制、CMS模型的设计工作?BR>目前手头上则是一个开发框架的东西Q这个东西则让自己开始真正的做框架的设计,和实际项目的那种感觉是不一LQ难度大大增加,现在主要是做数据集的表现层组件、代码、配|文件的自动生成、缓存策略、通用子系l部分的设计和实现工作?BR>
一q以来觉得自己在pȝ设计斚w学到的最多的是产品的规划、设计、需求驱动的设计方式(需求到设计的映?、领域模型的q用以及模式的适当q用?BR>最大的q步在于逐渐的学会了从系l全局d析系l,形成一个系l需求分?-->设计--->实现的步骤,对于pȝ的架构设计、概要设计以及详l设计也能够更加清楚的了解,设计的目的就是ؓ了需求的实现Q所以设计需要根据需求来产生?BR>架构设计中最重要的是Ҏ(gu)寚w求共性的分析形成pȝ的骨Ӟ架构中考评的重Ҏ(gu)对于pȝ实现的支?BR>、扩展以及对非功能性需求的满Q同时还需要考虑架构中具体引入的技术或者框Ӟq个更多的是需要根据team、项目的大小、时间紧急等因素来决定,q也是架构设计中最为困隄一步,目前在做架构设计时更多的是参考业界内已有的架构体p,只是有些时候需要考虑Ҏ(gu)业务需求的实现Ҏ(gu)Q最后根据职责单一、内聚和松耦合的重要原则Ş成系l模块的划分以及接口的定义?BR>概要设计最重要的在于根据模块的划分以及接口的定义Ş成模块的设计和接口的实现设计Q模块的设计受架构的U束形成?BR>详细设计则是具体的模块的设计的实C及对象接口的定义?BR>关于架构、概要、详l设计将专门写blog来阐q?BR>另外一Ҏ(gu)说就是在一个公司而言通常来说面对的往往是同cd的项目占多,q个时候架构的重用是非常明昄Q在q种情况下ؓ了保证公司的目技术结构的l一以及技术h员的l一Q通常会有框架的需求,q点以后也将专门写blog来阐q?BR>最后一点就是这一q来真正在架构体pȝ接触上来说应该就是插件架构体p,其他斚w则主要是些系l方面的模型设计Q如Q自己在q个斚w也是投入了巨大的xQ目前也在做q方面的东西Q这个在我完成目前手上的东西后将专门来阐q插件架构体pM及其应用模式?BR>
在一q来各个目的自己所做的设计来看Q最大的不在于自己~Z一套系l的、理论的pȝ设计q程的指|个h觉得即ɘq套理论不是很优U也没关系Q这个可以根据自q实践l验来调_但需要的是一个系l的q程Q这Ҏ(gu)觉得是自q在最大的不?BR>在自q不上,主要列了以下几点Q?BR>1、系l的、理论的pȝ设计q程的学?BR>      需要有个清晰的pȝ设计q程的体玎ͼq能以明确的说明其形成的过E?BR>2、需求驱动以及领域驱动的深入实践和改q?BR>      设计对于需求的满性以及符合性的体现?BR>      领域模型驱动的体C及徏模的体现?BR>3、加强技术基本功
      作ؓ架构设计师,最重要的是设计合适的架构Q特别是作ؓ国内目前大部分的中小企业来说Q面对的pȝ其实在业界内都是有成熟的架构体系的,关键是要Ҏ(gu)team、时间等斚w因素来做出选择Q这个时候就要求架构师对于各U技术的选择、框架的选择需要有个准的判断?BR>4、架构的合理?BR>      q点?中说的有重复Q就是如何做Z个适合一定背景的架构Q?BR>5、模式的合理q用
      对于模式的运用需要更加的U熟Q包括分析模式、架构模式和设计模式?img src ="http://www.tkk7.com/BlueDavy/aggbug/24701.html" width = "1" height = "1" />

BlueDavy 2005-12-20 00:42 发表评论
]]>
l箋侃数据驱动和模型驱动http://www.tkk7.com/BlueDavy/archive/2005/11/25/21457.htmlBlueDavyBlueDavyFri, 25 Nov 2005 13:47:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/11/25/21457.htmlhttp://www.tkk7.com/BlueDavy/comments/21457.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/11/25/21457.html#Feedback3http://www.tkk7.com/BlueDavy/comments/commentRss/21457.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/21457.html前天那篇blog更多的是讲了下数据驱动、模型驱动的大致概念Q今天更多的是讲数据驱动以及模型驱动在进行系l实现时的方法以及过E?BR>数据驱动
采用数据驱动q行pȝ实现旉常采用的是一个这Lq程Q徏立数据源(DataSource)Q同时根据业务对象模型进行数据库表设计,在数据库表设计完成后Ҏ(gu)业务场景构成数据?DataSet)Q通常q个时候DataSet本n是一U业务场景所需的业务数据,在简单的情况下有可能是Ҏ(gu)张表的操作,复杂的情况下则是对于多张表的操作Q在DataSet构成后将此DataSetl定到页面即可进行数据的展现了,如需Ҏ(gu)据进行增加、编辑、删除同样通过DataSet方式来进行,q个q程基本上就是一个基于数据驱动进行系l实现的q程了?BR>模型驱动
采用模型驱动q行pȝ实现旉常采用的是一个这Lq程Q根据业务场景徏立业务对象,在进行持久时持久业务对象中需要持久的属性,对于业务场景的实现通过Facade模式对外提供l一接口Q此接口通过与持久层q行交互以及操作业务对象(或领域对?来完成业务场景的实现Q而页面则通过此领域对象或昄对象来进行数据的展现Q如需Ҏ(gu)据进行操作按照显C对?-->Service Facade来完成?BR>
从上面关于实现的q程的描qC来说Q会觉得好像模型驱动更ؓ复杂Q但模型驱动较之数据驱动的优Ҏ(gu)想不用多,q里更重要的是我觉得是对于数据驱动和模型驱动的一个理解,其实数据驱动同样是模型驱动,呵呵Q数据驱动中的业务对象模型我们可以认为和模型驱动中的业务对象模型一_其和模型驱动的不同点在于数据驱动采用DataSet的方式来实现业务场景Q而模型驱动通常采用Service Facade调用各领域对象来实现业务场景Q这里有一炚w常明显,数据驱动只适合一U简单的业务场景Q那是通过数据兌或简单的数据逻辑处理可以来实现的业务场景Q而Service Facade其实对于两者均通用Q通过构徏cMDataSet的数据关联或单的数据逻辑处理通过和持久层交互卛_栯C如此的目的,^_^Q而且q种方式对于复杂的业务场景同样可以实玎ͼ通过领域对象的交互即可完成,而在DataSet方式中这个步骤是比较手的,虽然也可以处理,但会带来的问题就是重复代码的增多以及可维护性的降低Q其实关键的问题是其没有Ş成对象,内聚性不够强?BR>我的观点仍然是数据驱动是一U退化的模型驱动或者说变相的模型驱动,数据驱动中根据业务对象模型进行数据库表设计的q个q程可以映射为在模型驱动中进行业务对象模型实现的q程Q而徏立数据集的过E则和模型驱动中的Service Facade颇ؓ怼Q只是其Service Facade中的Ҏ(gu)比较单,至于DataSetl定到页面这个过E其实和模型驱动中将领域对象或显C对象和面l定是相同的概念?BR>模型驱动思想才是王道Q?IMG height=20 src="http://www.tkk7.com/Emoticons/QQ/14.gif" width=20 border=0> Q需要的仅仅是架构体pM对于数据驱动q种变相的模型驱动也提供一个良好的支持Q其实我觉得通过上面的描q已l可以看到要d个支持是非常单的一件事Q抽象Ş成通用Service Facade以及考虑如何建立DataSet卛_成了q个实现Q而且q样的架构对于模型驱动同h持,^_^Q何乐而不为,鱼和熊掌均可得之(其实只有熊掌,只是一个可能是肥壮一些的Q一个是瘦弱一些的Q^_^)?/P>

BlueDavy 2005-11-25 21:47 发表评论
]]>
数据驱动与模型驱?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/11/23/21169.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Wed, 23 Nov 2005 11:52:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/11/23/21169.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/21169.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/11/23/21169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/21169.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/21169.html</trackback:ping><description><![CDATA[数据驱动、模型驱动作为如今Y件设计中两种不同的模型驱动方法,应该说各有各的优~点以及适用的场合,不能׃概的去认为哪U必然就是更好的?BR>数据驱动采用的方式是Ҏ(gu)对业务的分析建立数据模型来进行系l设计的一U方法,通过数据模型的徏立来完成pȝ的实玎ͼ一般来_在采取数据模型的pȝ中多采用的是前台直接和数据模型进行绑定的方式Q这样在实现h相对来讲会非常的快速。根据数据驱动的pȝ设计以及实现方式上来Ԍ数据驱动适合于数据型的应用系l的Q而现在大部分的中型应用pȝ很多停留在q个层面上,在这cȝl中数据驱动会显得特别的实用和好用,q类pȝ一个非常突出的共同点就是系l基本属于信息的录入、显CZ及查询这L一个过E,不存在复杂的数据业务逻辑处理?BR>模型驱动采用的方式根据对业务的分析徏立业务对象模型来q行pȝ设计的一U方法,通过业务对象模型l合pȝ架构U束来进行系l的实现Q一般来_在采取模型驱动的pȝ中多采用N层的l构体系Q前台显CZ般和业务昄模型q行交互Q而业务显C模型则通过业务对象模型q行交互来完成业务逻辑的处理,业务对象模型通过与持久对象模型进行业务持久的处理Q在q样的情况下Q势必增加了pȝ的复杂度Q模型驱动适合与业务型应用pȝ的徏设,q个在行业化的业务应用上昑־比较H出Q这cȝl的共同点在于业务逻辑较ؓ复杂而且多变Q系l不仅仅是信息的录入、显CZ及查询,更多的是对录入或昄的信息进行业务逻辑的处理?BR>l过上面的简单介l后Q我觉得对于数据驱动和模型驱动都会有个大概的概念Q只能说数据驱动和模型驱动各有优势,要结合系l需求来选择相应的驱动方式?BR>对于模型驱动个h有些观点Q其实从模型驱动我们可以看出如果采用模型驱动面对一个数据型的应用系l时Q最后生的业务对象模型即退化ؓ了数据模型,只是׃模型驱动通常采用的N层架构此时反而约束了此模型的快速实玎ͼ是否应该在模型驱动的N层架构中去考虑一U退化的业务对象模型的支持呢Q觉得这Ҏ(gu)值得思考的Q如果支持的话应该说对于模型驱动非常有利或者说是模型驱动的一个补充,相当于对于模型驱动进行分cd理,有些时候架构不能太SQ还是要Ҏ(gu)pȝ的需求做出适当的调整?BR>Ҏ(gu)q样的观点,其实数据驱动也是模型驱动Q只是它采用的是一U退化的业务对象模型的驱动,q同时进行架构层ơ的调整以适应pȝ的快速徏设,但数据驱动对于复杂多变的业务逻辑pȝ来说毕竟隑֎满了,主要是会在数据模型的建立以及业务逻辑的修改的斚w?BR>l合q样的观点,q是更ؓ們֐模型驱动Q同时也认ؓQ模型驱动的架构应该考虑对于退化的业务对象模型的支持?img src ="http://www.tkk7.com/BlueDavy/aggbug/21169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-23 19:52 <a href="http://www.tkk7.com/BlueDavy/archive/2005/11/23/21169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软g架构杂谈http://www.tkk7.com/BlueDavy/archive/2005/11/21/20830.htmlBlueDavyBlueDavyMon, 21 Nov 2005 13:04:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/11/21/20830.htmlhttp://www.tkk7.com/BlueDavy/comments/20830.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/11/21/20830.html#Feedback1http://www.tkk7.com/BlueDavy/comments/commentRss/20830.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/20830.html1、客L功能需求以及非功能需求?BR>2、Y件的l护性?BR>软g的技术架构就是ؓ了满以上重要的两点而诞生的Q同时由于Y件的技术架构决定了使用它的开发h员所需的水q以及开发的难易Q此时又要尽量做到降低对使用者素质的要求以及开发的门槛Q以保证开发的高效性,但这个相对上两点来说更没那么重要?BR>
在做一个框架或者现在流行的诸如应用支撑q_的东西的时候,此时的客户一般来说是公司的开发h员或其他公司的开发h员,那么首先p得到他们的功能需求以及非功能需求,但Y件开发h员此时作为客h说同h不够成熟的,因ؓ也许很多的开发h员已l适应了它现有的开发模式,你让它重新接受一套新的肯定会很容易引起它的抵触情l,q个和很多的行业客户是一LQ它习惯的做法一旦被你打_甚至你把它以前的做法都改变了Q这个时候得到的只能是客L不满意,同时需求也不好挖掘Q呵呵,觉得q个时候一斚w的做法通常是先吸取客户现在的做法,提供它目前做法的实现方式Q另一斚w向客L输现在方式的好处Q慢慢的让它接受?BR>另外一斚w而言Q对于开发h员最重要的就是开发的高效以及易性,如果框架让开发h员反倒觉得不如以前的开发高效、简易,那么是很隑֎说服开发h员接受它的,拿现在ZJAVA的web框架来说Qؓ什么现在很多的webpȝ不是Zjava而是Zphp、asp.net{,技术来说Java的Web框架不会比他们差吧,但ؓ什么呢Q就是基于java的web框架实现webpȝ不够方便Q对开发h员的要求比较高,而且效率也比不过Zphp、asp.netQ当Ӟq个另一斚w是很多的web应用pȝ真的非常而且非常单,很多都是普通的CRUD操作Q想想现在基于Java的web框架QN多都是N层架构体p,在开发一个CRUD操作往往涉及到N个层ơ代码的~写Q即使N多的JAVA人员可能会认为那很简单,因ؓ层次职责清晰Q开发v来也挺简单什么的Q但我想对这个对比v数据驱动的方式进行开发确实是更ؓ复杂了,而且׃层次很多时候会让开发h员难以理解,q个也许是基于Java的框枉要值得思考的地方的吧Q很多h都说microsoft是会讨好开发h员,但如果要做框架的东西的话要讨好的就是开发h员呀Q客h是上帝嘛?BR>其实框架也要看面对什么样的开发h员,而且是要看开发h员是做些什么类型的目的,如果那个目对于pȝ的维护性什么ƈ没有特别的要求,而且又比较简单,基本没什么业务逻辑Q需求又相对比较固定、范围小的话Q我惛_q样的情况而言ZJava的框架真的不那么适合Q或许可以做一个简化版的JAVA框架更适合q样的需求,或许是在做q样的JAVA的框架的时候真的值得思考,考虑q样的实现方式,maybe mda is a good solutionQ^_^
q是那句话,架构要脓(chung)q需求,q个才是重点Q框架Y件的架构则更需要考虑开发h员的易用性,^_^Q此时要Ҏ(gu)架所面对的客?也就是开发h?的项目进行充分的了解Qƈ了解他们现有的开发模式?BR>
psQ说点实际的QD例现在在JAVA界的LWeb技术架构:MVC+Domain Model(Service Facade+Domain Object)+Persistent LayerQ在q样的技术架构中写一个CRUD通常要涉及到非常多,比如~写POQ采用ORM的话q得用工L成xmlQ同时编写DAO、Service FacadeQ在q样情况下的Service Facade其实真的是毫无意义,呵呵Q变成了无意义的一个层Q而且增加了开发h员的工作Q得考虑考虑解决Ҏ(gu)Q也许基于Domain Model去自动生成DAO、Service Facade是个Ҏ(gu)Q^_^Q大家在q种情况下会怎么做呢Q?呵呵Q反正我觉得q样的情况下MDA实是一U不错的解决Ҏ(gu)?img src ="http://www.tkk7.com/BlueDavy/aggbug/20830.html" width = "1" height = "1" />

BlueDavy 2005-11-21 21:04 发表评论
]]>
思考插件架构体p?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/11/15/19820.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 15 Nov 2005 03:09:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/11/15/19820.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/19820.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/11/15/19820.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/19820.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/19820.html</trackback:ping><description><![CDATA[<P>插g架构体系是我一直就非常x的内容,其实插g架构体系的发展已l有很久的背景了Q插件架构体pȝ优点我们也是能看的非常明显,象硬件一Lx即用、无论对于公司还是业界而言的良好的U篏方式、ؓ公司或业界提供统一而规范的开发方式以及稳定的内核架构{等Q这些优Ҏ(gu)论对于公司还是业界来说都是非帔R要的?BR>插g架构体系基本的一个概念就是基于松散的模块U篏方式Q通过新增插g以及扩展原有插g的方法来完成pȝ的实玎ͼ凡事有利必有弊,在看到插件架构体pȝq些优点的同Ӟ在实现和使用插g架构体系的时候仍然会到不少的问题,我大概的整理了一下,主要有:<BR>1、插件的定义<BR>      插g的定义可谓是插g架构体系在用时会碰到的最大的问题Q首先要解决的问题就是何谓插件、插件如何去定义Q何谓插件这个大家的看法都会有所不同Q由于对于何谓插件的看法不同Q必然就D了在整个pȝ的设计时采用了不同的设计方式Q主要是在插件的_度控制上会有不同的设计方式?BR>      个h觉得也许采用模块作ؓ插g是一U可行的Ҏ(gu)Q采用模块作为插件的核心思想是按一U从至下的设计理念Q也是架构设计中生的模块视图首先作ؓpȝ的插件构成视图,Ҏ(gu)Ҏ(gu)块的详细设计此时又可Ҏ(gu)块的插gq行l一步的划分Q或者是插件划的更l,或者是采用插g的扩展机制去实现?BR>      插g的定义则是带来了一些设计上的难度的Q我仍然觉得需要将插g视ؓ黑盒ȝQ插仉要提供什么样的功能、插仉要什么样的运行环境、插仉要暴露哪些包{等Q这个在Osgi中都有相应的映射Q在Z插g架构体系q行pȝ构徏的时候插件的_度、定义我觉得q是最难把握的Q甚臌得难度上会超q以前的模块设计Q需要的是更范的模块式的设计Q觉得这个在中小型Y件企业中往往是很隑ց到的Q主要仍然是架构设计时的控制Q在设计旉要的因素在于保持pȝ的松散结构,至于概要设计时则完全可按照架构设计的U束去进行,详细设计则完全和qx的做法一栗?BR>2、插件的依赖<BR>      插g的依赖主要有两种Q一是对于系l已有插件的依赖Q另一斚w则是对于外部jar包的依赖。这都是在设计时需要做虑的,对于插g架构体系而言对已有插件的依赖和对外部jar包的依赖q个差别比较大了,其实q个在设计上q好办,因ؓ可以通过重构Q本来一直依赖觉得最困难的是对其他插件的依赖怎么办,N要去引用其他plugin的libQ在eclipse ide中是解决了这个问题的Q所以现在来说插件的依赖在插件体pL构中显得没那么困难了,q说明插件的依赖的解决依赖于一个良好的插g开发IDE?BR>3、插件的试<BR>      插g的测试我q指的不是运行的功能试Q而是单元试Q感觉这个在现在的插件架构体p里q是比较困难的,因ؓ在一U松耦合的架构体pMQ对于其他插件的依赖是要在容器运行期才能够获取的Q觉得这个有点变成了当时ejb container的问题,现在好像得通过mock以及其他的方法去解决Q另外一个也许是IoC的策略?q方面需要进一步思考,<BR>4、插件的调试<BR>      插g的调试主要是依赖容器的调试,现在的eclipse ide已经支持插g的调试,q且好像是支持插件的q程调试的?BR>5、插件开发学习的门槛<BR>       q前来说插件开发学习的门槛q不低的,个h觉得臛_要对插g体系架构有一定的了解(例如ZOsgi的插件框Ӟ那就要求对OSGI有一定的熟?zhn)?Q但相对q个门槛而言Q其获得的h(hun)值是值得的?BR><BR>其实讲了q么些问题,集中的主要在于基于插件架构体pȝ应用框架以及业务pȝ的设计方式将和以前的会有些变化,q个也是可以理解的,毕竟是受技术架构约束的Q另外一斚w则主要集中在插g开发的易性和质量的保证,q个得依靠一个强大的插g开发IDE?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/19820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-15 11:09 <a href="http://www.tkk7.com/BlueDavy/archive/2005/11/15/19820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需求是来源http://www.tkk7.com/BlueDavy/archive/2005/11/14/19744.htmlBlueDavyBlueDavyMon, 14 Nov 2005 09:37:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/11/14/19744.htmlhttp://www.tkk7.com/BlueDavy/comments/19744.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/11/14/19744.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/19744.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/19744.html凭空构造的技术框架是没有意义的,技术框架从何而来Q是需要从需求而来的,管现在业界很多人都会觉得选用一个大众普遍接受的框架应该是好的Q但其实不一定,毕竟每个框架都有它自q特的适用场合Q何谓适用场合呢,那就是需求了?BR>技术框架诞生于需求,只有在对需?业务需求、愿?q行分析、抽象下才能提出业务斚w的需求,此时再结合技术需求共同构成了技术架构以及业务架构,整个框架才得以生?BR>没有需求的东西永远都是没意义的Q首先要明显自己到底要做什?........

^_^Q感觉就是胡扯了几句Q随意有感而发而已Q等有空的时候再好好的来整理一下这东?/P>

BlueDavy 2005-11-14 17:37 发表评论
]]>
权限模型http://www.tkk7.com/BlueDavy/archive/2005/11/08/18714.htmlBlueDavyBlueDavyTue, 08 Nov 2005 03:49:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/11/08/18714.htmlhttp://www.tkk7.com/BlueDavy/comments/18714.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/11/08/18714.html#Feedback7http://www.tkk7.com/BlueDavy/comments/commentRss/18714.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/18714.html 

一.  概述

几乎在所有的pȝ中对于权限控刉有直接的需求,而这c需求往往有其怼性,l合常见的对于权限系l的需求构成了本文档,文档主要从功能复用以及模型复用的角度来对权限pȝq行ȝQ以便在各种pȝ中可对照此篇文档来进行权限系l的实现Q考虑到文档的x点在复用度,在文档中不会q多的去描述功能点到模型产生的过E,而是采用直接通过产生的模型来说明Z此模型如何实现功能点的需求?/SPAN>

?  功能复用

功能复用相当于此权限模型适合的上下文场景Q此权限模型在功能点斚w的考虑主要有以下三个方面:

n         Z角色的用户安全管?/SPAN>

pȝ权限以角色ؓ基础Q即以角色来q行权限的分配以及授予,角色分配l用户以使用户可获取相应的权限,角色通过授予权限来获得该角色所对应拥有的权限?/SPAN>

角色的权限可l承Q即子角色自动承父角色的权限?/SPAN>

权限的包含与排斥Q包含D例来说就是权?/SPAN>A可包含权?/SPAN>BQ体现出来即为拥有权?/SPAN>A卌动拥有了权限BQ而排斥D例来说就是角色不可同时拥有权?/SPAN>A和权?/SPAN>B?/SPAN>

n         pȝ资源(功能模块)操作的控?/SPAN>

pȝ资源操作的控制在pȝ上主要分Z个方面:

l         正常途径pȝ资源操作的控?/SPAN>

体现在实际的需求上通常是菜单、按钮、链接根据用h在角色的权限的可见性?/SPAN>

l         非法途径pȝ资源操作的控?/SPAN>

体现在实际的需求上是防止通过非法?/SPAN>URL或命令等方式对系l受保护的系l资源进行操作?/SPAN>

n         数据资源操作的控?/SPAN>

数据资源操作的控制在pȝ中实际的体现通常是用户只能访问相应数据资源操作权限范围内的数据,如在一个站点中有栏?/SPAN>A?/SPAN>B?/SPAN>CQ用?/SPAN>M只拥有对A的访问权限以及对B的管理权限,那么在用?/SPAN>M讉Kpȝ时站点中应该只列出栏?/SPAN>A和栏?/SPAN>BQ同时在栏目B上拥有相应的理按钮或链接?/SPAN>

数据资源也需要支持权限承的模式Q即当数据资源本w构成了需要承的父子关系Ӟ子自动拥有父的所有权限,举例来说是站点和栏目,栏目自动拥有站点的所有权限?/SPAN>

数据资源的权限也是需要有包含和排斥的支持?/SPAN>

数据资源操作权限的授予通常需要的授予l多U对象,如用戗角色以及组l机构等?/SPAN>

?  模型复用

对于以上的功能点Q提Z相应的解x案构成如下模型:

n         Z角色的用户安全管?/SPAN>

ZRBAC构成实现功能点的模型Q如下:

pȝ资源权限模型.jpg
图表
1 ZRBAC的系l资源权限模?SPAN lang=EN-US>

              Z此模型对当前需求的实现Ҏ(gu)为:

l         权限的授?/SPAN>

在权限授予时需要实现的为维护用户与角色的关联模型以及角色与权限的关联模型?/SPAN>

同时需要的是资源以及操作的l护Q资源上配置的主要ؓ功能模块的一些相关信息,如名U、描q等Q操作上配置的主要ؓ功能模块所需要受控的操作Q如对功能模块的讉K、保存动作等Q此处的关键在于配置操作所对应的命令,?/SPAN>B/S体系中通常?/SPAN>URLQ在C/S体系中有可能?/SPAN>Command或其他的入口关键字?/SPAN>

l         角色权限的?/SPAN>

角色权限的扉K过角色的子兌来实玎ͼ遵@的原则ؓ子角色自动拥有父角色的所有权限,在进行授权动作时所需要做的是l护角色父子关系兌模型?/SPAN>

l         权限的包含与排斥

权限的包含通过权限的子兌来实玎ͼ遵@的原则ؓ父自动拥有子的概念,在进行授权动作时所需做的是维护权限的父子关系兌模型?/SPAN>

权限的排斥在此模型中没有考虑?/SPAN>

n         pȝ资源(功能模块)操作的控?/SPAN>

pȝ资源操作的控制基于图?/SPAN>1的模型而得以实现?/SPAN>

l         正常途径pȝ资源操作的控?/SPAN>

此时通常的做法是在菜单、按钮、链接这些显CZ前做对应的资源操作权限的判断?/SPAN>

判断的方法ؓ获取用户所在的角色Q判断用戯色是否有q行资源操作的权?/SPAN>(同时需判断权限的包含的问题)Q如无则递规获取用户角色的父角色是否有进行资源操作的权限?/SPAN>

l         非法途径pȝ资源操作的控?/SPAN>

对于非法途径对系l资源操作的讉KQ通常的实现方法ؓ在具体的对象执行前做截断处理Q通常采用Proxy?/SPAN>Interceptor模式?/SPAN>

n         数据资源操作的控?/SPAN>

数据资源操作的控制则难以Z上面的权限模型进行实玎ͼ需要对其进行扩展,产生的实现需求的模型为:

数据资源权限模型.jpg
图表
2 数据资源权限模型

              Z此模型对于数据资源操作的控制的实C要在两个斚wQ?/SPAN>

l         数据资源操作权限的授?/SPAN>

在进行数据资源操作权限的授予时维护权限授予模型,同时需要根据数据资源操作权限的授予同步校验权限模型(此时需要考虑权限的ѝ包含的问题)?/SPAN>

l         数据资源操作权限的校?/SPAN>

校验旉过校验权限模型卛_完成?/SPAN>

?  问题

在文中提及的权限模型实可以实现功能需求,但其在开发过E中以及应用q程中通常有这L问题Q?/SPAN>

n         pȝ资源操作控制时权限校验的低效

通常的解x案是cache机制?/SPAN>

n         数据资源操作权限授予的低?/SPAN>

n         权限pȝ对于原有pȝ的R入?/SPAN>

通常的解x案有Proxy?/SPAN>Interceptor?/SPAN>AOP?/SPAN>


ps: q篇相对于我之前的O谈权限系l系列的文章来说相当于只是个抽取和归UI详细的还是得看那个系列的几篇文章?/P>

BlueDavy 2005-11-08 11:49 发表评论
]]>
通用lg的黑盒式设计http://www.tkk7.com/BlueDavy/archive/2005/10/21/16356.htmlBlueDavyBlueDavyFri, 21 Oct 2005 14:21:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/10/21/16356.htmlhttp://www.tkk7.com/BlueDavy/comments/16356.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/10/21/16356.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/16356.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/16356.html以黑盒的思想d通用lg的设计才能达到真正的效果Q这个道理其实大多数人都是知道的Q只是到了真正的抽象做通用lg的时候就不会那么想了Q通用lg的要求主要是不对其调用者造成侵入Q同样也不让调用者对其生R入,当成黑盒来设计有些时候会让你不自觉的p决了q个问题?BR>比如在设计一个通用的附件上传组Ӟ首先要仔l分析作为附件上传这个通用lg来说对外它需要生什么东西呢Q通常来说需要的是它输出已上传的附g名、附件URLQ而同样它所需要接受外部传入的也是已上传的附g名和附gURLQ这样就构造出了附件上传组件这个黑盒,对于外部来说Q需要了解的无非是接口中参数的意义Q其他ƈ不需要关注,当然Q附件这U通用lg比较单,但这U思想同样可以引申到分늻件等?BR>作ؓ通用lg在考虑功能实现以外最重要的就是考虑侵入问题?BR>
黑盒式的设计思想q可以应用在很多的场合中去,其实模块接口的定义同样也是如此的概念Q此时的模块对调用者来说就是黑盒,I/O仍然是设计的要素?/P>

BlueDavy 2005-10-21 22:21 发表评论
]]>
CMS~存实现的疑?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/10/18/15786.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 18 Oct 2005 02:36:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/10/18/15786.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/15786.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/10/18/15786.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/15786.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/15786.html</trackback:ping><description><![CDATA[<P>CMS中缓存显的至关重要,CMS中的~存主要有静态缓存和动态缓存两U技术,但看下来现在觉得q两U也只是对于最l信息页面的~存Q现在的需求是Q?BR>1、站炏V栏目、信息列表的~存?BR>2、信息页面的~存?BR><BR>对于需?使用动态和静态缓存的技术都可以较ؓ单的实现Q但对于需?则不同,需?中的站点、栏目和信息列表是时时动态的Q而且q有分页以及l合权限控制的问题,在这U情况下Q用生成静态页面的办法是很隑֮现的Q几乎就不可能,那么通常我们惛_的第一U最为直接的Ҏ(gu)是借助数据库缓存来实现Q就拿基于Hibernate的来_Hibernate提供的缓存是对于PO以及PO兌的缓存,但同h无法实现上述需求中所要的效果的,目前暂时q没惛_什么好的解x案,准备ȝ阅一下jsr170Q不知道是不是因为大家觉得对站点、栏目和信息列表做缓存没意义Q诚Ӟ站点和栏目列表可能本来就不会很多Q所以缓存的意义不是那么的大Q但信息列表~存的意义则非常明显?BR>分页以及l合权限控制是实现此~存技术的隄Q其实这个也可以引申到整个系l,成ؓpȝU的~存技术,如大家有q方面的l验Q请不吝赐教Q?BR><BR>列一个校验的场景Q?BR>在一个信息列表中Q每个信息的权限有多U情况,比如信息列表中存在A、B、C三条信息Q各条信息的权限授予l了(guest,admin)?guest)?admin)Q这个时候要获取guest的信息列表,加入cache需要提高效率的地方在于避免获取信息列表时需与数据库q行实时的查询,同时要注意,一般来_pȝ的信息数据量会是比较的大?/P><img src ="http://www.tkk7.com/BlueDavy/aggbug/15786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-18 10:36 <a href="http://www.tkk7.com/BlueDavy/archive/2005/10/18/15786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>闲谈Domain Model & Transaction Scripthttp://www.tkk7.com/BlueDavy/archive/2005/10/15/15572.htmlBlueDavyBlueDavySat, 15 Oct 2005 07:16:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/10/15/15572.htmlhttp://www.tkk7.com/BlueDavy/comments/15572.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/10/15/15572.html#Feedback0http://www.tkk7.com/BlueDavy/comments/commentRss/15572.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/15572.html其实个h看法是Domain Model为采用OO构成业务层模型的思想Q而Transaction Script为采用面向过E构成业务层模型的思想?BR>从需求分析开始谈P在对需求进行OOA后,产生出系l的业务模型Q通过OOD得到业务模型技术体p,那么在Domain Model很简单的是此业务模型技术体p进行Plain Object的实玎ͼ从此得到Domain ObjectQ按照这L逻辑Transaction Script其实是不应该会出现的QTransaction Script的生当然是有它的原因的Q在复杂的业务场景中需要通过多个Domain Object共同来完成业务功能的实现Q而此时在设计不够良好的Domain Object模型的情况下很难通过Domain Object的协作来做到实现Q需要在Domain Object的协作之外处理一些业务逻辑Q这个时候Transaction Script得以出CQ以Script的方式来协作Domain Objectq同时补充其中的业务逻辑来完成业务功能的实现Q其实这个时候已l可以看刎ͼ实现的方式确实是变简单了Q但业务模型则被逐渐的拆,在Domain Model中则Domain Object本n业务逻辑的实玎ͼ而业务层则通过引入一层薄Service作ؓ对外的接口来提供业务场景的实玎ͼ此时的Service需要做的是调用Domain Object来完成业务场景的实现?BR>Domain Object对应C务模型,在结合了持久层来完成相应业务Object的持久,个h觉得ORM的引入在q部分得Domain Object在需要完成持久的时候更加的优秀QDomain Object中通过注释标识出需要持久的属性,当然q是因ؓORM工具需要通过q些映射来处理,q样在对Domain Object作持久操作时可直接的q行Q这LDomain Object构成了pȝ的核心部分,业务模型构成pȝ的核心模型,q是需求符合体现的关键?BR>至于View Object则由于其单性很多时候必L建,以保持View Layer的单一性以及只是View的性质?img src ="http://www.tkk7.com/BlueDavy/aggbug/15572.html" width = "1" height = "1" />

BlueDavy 2005-10-15 15:16 发表评论
]]>
漫谈权限pȝ之结(开源品、个炏V知识体p?http://www.tkk7.com/BlueDavy/archive/2005/10/14/15545.htmlBlueDavyBlueDavyFri, 14 Oct 2005 12:17:00 GMThttp://www.tkk7.com/BlueDavy/archive/2005/10/14/15545.htmlhttp://www.tkk7.com/BlueDavy/comments/15545.htmlhttp://www.tkk7.com/BlueDavy/archive/2005/10/14/15545.html#Feedback3http://www.tkk7.com/BlueDavy/comments/commentRss/15545.htmlhttp://www.tkk7.com/BlueDavy/services/trackbacks/15545.html一.  开源?/SPAN>

对开源的产品了解不多Q所以也只能大概的谈谈,开源的产品中比较知名的?/SPAN>poweracl?/SPAN>acegiQ?/SPAN>poweracl从名字就可以看出其是ZACL模型的,不怎么了解所以在此也不去评h(hun)了?/SPAN>

Acegi作ؓJAVA界知名的权限pȝQ从其文档看来是能满上q的权限pȝ的所有需求,?/SPAN>reference文档也对权限pȝq行了系l的归纳Q非常的不错Q徏议去看看?/SPAN>

?/SPAN>Acegi中授权模型以及资源权限的校验仍然是基?/SPAN>RBAC模型Q在数据权限斚w也就是在reference文档中它UCؓDomain Object Instance的部分,是基?/SPAN>ACL模型的实玎ͼ曄阅它此部分的代码,Ҏ(gu)代码表现它ƈ不支?/SPAN>Domain Object Instance的权限的l承Qƈ且对于获取的Domain Object Instance也是没法采用分页的方式获取?/SPAN>

看了Acegi的代码觉得其授权应该是比较高效的Q但在校验权限上效率恐怕也会比较的低,因ؓ权限的承是在校验权限通过递规来实现的Q虽然引入了~存机制但仍然无法从Ҏ(gu)上解x问题Q而且此缓存的l护也不是一件容易的事?/SPAN>

?/SPAN>Acegi的优点也不可忽略Q作为权限系l有一个很Ҏ(gu)产生的问题就是对原有pȝ产生非常大的侵入Qƈ最l导致原有系l与此权限系lŞ成了非常强的耦合Q?/SPAN>Acegi在这点上则做的比较好Q通过使用Filter?/SPAN>Interceptor以及AOP Weaver技术来量保证对原有系l最的改动?/SPAN>

?  个h观点

权限pȝ作ؓ各种pȝ中都需要的一个子pȝQ具有很q的需求面Q无论做什么系l,首要重要的仍然是需求,管权限pȝ在各个系l中都有需求,但仍然是不尽相同Q所以首先要明确所面对的系l到底是一个什么样的系l,对于权限有什么样的需求,Ҏ(gu)需求可以根据相应的实现Ҏ(gu)来做q设计?/SPAN>

权限pȝ主要由授权和校验权限两大部分l成Q授权效率和校验权限的效率通常会生冲H,个h觉得首先要保证校验权限的效率Q毕竟系l需要校验权限的地方会非常的多,但授权动作相Ҏ(gu)讲触发的会比较的?/SPAN>

从技术需求上来讲Q权限系l对外部pȝ而言最好做到黑盒的效果Qؓ了减对外部pȝ的R入,在根据业务需求分析的基础上Ş成权限系l的输入和输出需求,从通常的功能需求角度来大致的阐qͼ

1.         w䆾认证

?/SPAN>B/Sl构的系l中通常通过增加Filter来达到实现n份认证的功能Q这样不会造成对原有系l的改动?/SPAN>

2.         授权模型

授权模型则需外部pȝҎ(gu)此模型徏立相应的授权UI以及交互Q当Ӟ权限pȝ本n也可提供默认的实现方式?/SPAN>

3.         资源权限校验

在资源权限的校验上可通过Proxy?/SPAN>Before Interceptor的方式来做到对资源操作的权限控制?/SPAN>

4.         数据权限校验

在很多时候需要区分好数据权限和业务逻辑Q不要将业务逻辑形式的数据控制也借用数据权限来实玎ͼ数据权限的引入很Ҏ(gu)对现有的pȝ模块造成影响Q在此块的设计上要特别注意避免造成对原有系l模块过多的侵入?/SPAN>

5.         权限校验的体?/SPAN>

在权限校验的体现上基本主要是表现在菜单、按钮以及数据的昄上,菜单、按钮通常通过标签的方式来控制Q数据的昄控制则需l合数据权限校验部分来实现?/SPAN>

到现在ؓ止也做了几个权限pȝ了,目前仍然没做自己满意的权限系l,此文作ؓ抛砖引玉的文章,也希望大家能够给己所做的解决Ҏ(gu)?/SPAN>

?  涉及的知识体p?/SPAN>

Ҏ(gu)上面的描qC及结合自ql验QŞ成搭建权限系l所需的知识体p:

权限pȝ.jpg
图表
6 权限pȝ知识体系



BlueDavy 2005-10-14 20:17 发表评论
]]>
漫谈权限pȝ之基于ACL的实?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/10/13/15438.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 13 Oct 2005 10:13:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/10/13/15438.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/15438.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/10/13/15438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/15438.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/15438.html</trackback:ping><description><![CDATA[     摘要: ZACL的实?ACL介绍        ACL全称Access Control ListQ在ACL中,包含用户(User)、资?Resource)、资源操?Operation)三个关键要素。通过资源以及资源操作授权给用户而用户获取对资源进行操作的权限Q模型如下图所C: 图表 1 ACL模型 实现Ҏ(gu)  ...  <a href='http://www.tkk7.com/BlueDavy/archive/2005/10/13/15438.html'>阅读全文</a><img src ="http://www.tkk7.com/BlueDavy/aggbug/15438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-13 18:13 <a href="http://www.tkk7.com/BlueDavy/archive/2005/10/13/15438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限pȝ之技术策略以及基于RBAC的实?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/10/09/15091.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sun, 09 Oct 2005 14:51:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/10/09/15091.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/15091.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/10/09/15091.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/15091.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/15091.html</trackback:ping><description><![CDATA[     摘要: Ҏ(gu)上面的需求描qC及对需求的分析Q我们得知通常的一个中型pȝ对于权限pȝ所需实现的功能以及非功能性的需求,在下面我们将Ҏ(gu)需求从技术角度上分析实现的策略以及基于目前两U比较流行的权限设计思想来讨论关于权限系l的实现?1.1.       技术策?l      &nbs...  <a href='http://www.tkk7.com/BlueDavy/archive/2005/10/09/15091.html'>阅读全文</a><img src ="http://www.tkk7.com/BlueDavy/aggbug/15091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-09 22:51 <a href="http://www.tkk7.com/BlueDavy/archive/2005/10/09/15091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限pȝpd之概q、目的和需?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/10/08/15004.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 08 Oct 2005 10:15:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/10/08/15004.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/15004.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/10/08/15004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/15004.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/15004.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l2 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">一.<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概述</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文Ҏ(gu)对中型应用pȝ的权限系l的需求进行阐qͼq对通常用于实现权限pȝ的两U思想、技术策略以及技术实现方案进行描qͼ比较其优~点Q同时对开源类型的产品q行介绍Q最后结合自q实际l验介绍自己的实现方案以及碰到的隄?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本文q不是什么理论化的文章,完全是实战型的ȝ和实战的讨论Q至于理大家d考更Z业的文章?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l2 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目的</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此文的编写作己对于权限系l进行系l化的整理,毕竟权限pȝ是几乎所有系l中都需要的Q但一直以来由于在权限pȝ上ƈ没有什么通用的方案,所以几乎是</SPAN><SPAN lang=EN-US>N</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多的人都实现了自q一套,在此我也是抛砖引玉?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l2 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l2 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3.1.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">描述</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q里对于需求的描述都是Z自己工作以来实际目需求的l验而综合的Q如有遗漏之处欢q大家补充,不过也希望大家明白范_是指中小型系l,至于大型的企业系l从来就没做q,我也无从提出需求?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从一个实际的场景来描qC般中型pȝ中涉及的权限需求吧Q在通常?/SPAN><SPAN lang=EN-US>B/S</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ中,首页列出不需d可访问的信息Q登录后则根据用h有的权限昄相应的菜单,在具体菜单对应的模块里根据用L权限昄相应权限的按钮,同时昄当前用户可访问的相应的资源?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">非功能性的需求:</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">便的授权方式。避免每增加一个用户就要不断的L?/SPAN><SPAN lang=EN-US>N</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多的权限Q避免相同权限的用户q要ȝ同的授予Q提供出分组的功能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的ѝ在上面提出分组的功能后考虑到组应支持嵌套功能,卛_l自动承父l的权限Q这h权时更加简便了?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高性能。不能因为校验权限而严重媄响到pȝ的性能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安全性。除正常途径方式讉Kpȝ的保护外Q也需要避免通过非正常的途径讉Kpȝ中受保护的资源?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">除了q些用户通常直接提出的需求外Q在实际的项目中通常q会有这些需求:</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo4; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的排斥和包含。用户在实际的用后通常会提个需求,权限的排斥主要是指当用户拥有权限</SPAN><SPAN lang=EN-US>A</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时则不能同时再拥有权?/SPAN><SPAN lang=EN-US>B</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q这个在实现了权限承的pȝ中尤为突出;权限的包含主要指当用h有权?/SPAN><SPAN lang=EN-US>A</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时自动拥有了权限</SPAN><SPAN lang=EN-US>B</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q实际的例子是当用户拥有理权限时自动同时拥有访问权限?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo4; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ资源权限的ѝ在对带有分U性质的资源进行授权时子资源自动承父资源的权限,q个在文档管理类型的pȝ中比较常见,即目录中的文档自动拥有目录的权限?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo4; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ资源权限的多U授予对象。通常pȝ的权限是授予到角色中Q而对于系l资源的权限授予上用户在使用后通常会提出需要授予到多种对象Q除角色之外q需可授予给l织机构或者具体的用户?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l2 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3.2.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分析</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寚w求中列出的场景进行分析:</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上下?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">未登录用戗登录用戗管理用户不同的界面{情c?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何识别是否为登录用戗管理用h未登录用戗?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解决Ҏ(gu)</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供w䆾认证功能Q通过此功能标识用戯n份?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN><SPAN style="mso-spacerun: yes"> </SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上下?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Ҏ(gu)用户拥有的权限显C相应的菜单Q在具体菜单对应的模块里Ҏ(gu)用户的权限显C相应权限的按钮?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">׃菜单或者按钮都是通过触发链接或命令的方式来实现其功能Q那么在权限pȝ中需要做到的卛_通过判断用户是否h执行此链接或命o的权限来实现对于菜单和按钮的昄的控制?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q样带来的问题就是如何判断用h否拥有执行某链接或命令的权限以及如何Ҏ(gu)此结果去隐藏菜单和按钮的昄?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解决Ҏ(gu)</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供校验用户是否拥有执行某链接和命o的权限的功能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供控制菜单、按钮显C的功能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上下?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">昄当前用户可访问的相应的资源,有两U情况,一U是全部昄Q一U是分页昄?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何判断用户可访问哪些资源,资源如何q行分页处理?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解决Ҏ(gu)</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供获取用户权限范围内的资源的功能,q提供全部获取和分页获取两种方式?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上下?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">便的授权方式?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问题</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为提升用h权的便性,权限授予给角色或组Q用户只需要属于这个角色或l即可拥有相应的权限?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何建立满需求的授权模型?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l3 level1 lfo5; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解决Ҏ(gu)</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Ҏ(gu)需求徏立相应的授权模型?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Ҏ(gu)寚w求的分析Q可以得出权限系l需要做到如下的功能Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l4 level1 lfo3; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户w䆾认证?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l4 level1 lfo3; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">校验用户是否拥有执行某链接和命o的权限的功能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l4 level1 lfo3; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">控制菜单、按钮显C的功能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l4 level1 lfo3; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获取用户权限范围内的资源的功能,q提供全部获取和分页获取两种方式?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l4 level1 lfo3; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">建立相应的授权模型?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在非功能性需求方面权限系l需要考虑如下几个斚wQ?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l5 level1 lfo6; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的ѝ?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l5 level1 lfo6; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的排斥和包含?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l5 level1 lfo6; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高性能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l5 level1 lfo6; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安全性?/SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ数据的权限的l承?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 49.35pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ数据的多U授权对象的支持?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Ҏ(gu)q些Ҏ(gu)限系l的功能需求和非功能性需求,我们可以合ƈ和归Ux如下的一个表g为对权限pȝ的需求:</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 49.35pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l5 level1 lfo6; tab-stops: list 49.35pt"> <TABLE class=MsoTableGrid5 style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 32.4pt; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black 1.5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .75pt solid black; mso-border-insidev: .75pt solid black" cellSpacing=0 cellPadding=0 border=1> <TBODY> <TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-top-alt: 1.5pt; mso-border-left-alt: 1.5pt; mso-border-bottom-alt: .75pt; mso-border-right-alt: .75pt; mso-border-color-alt: black; mso-border-style-alt: solid" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">功能?/SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; mso-border-top-alt: 1.5pt; mso-border-left-alt: .75pt; mso-border-bottom-alt: .75pt; mso-border-right-alt: 1.5pt; mso-border-color-alt: black; mso-border-style-alt: solid" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">描述</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></B></P></TD></TR> <TR style="mso-yfti-irow: 1"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">w䆾认证</SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供用户w䆾认证的功能,以标识用h否登录、是否ؓ理员等w䆾?/SPAN></P></TD></TR> <TR style="mso-yfti-irow: 2"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">资源权限校验</SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">判断操作M是否hҎ(gu)资源q行某操作的权限?/SPAN></P></TD></TR> <TR style="mso-yfti-irow: 3"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据权限校验</SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">获取用户权限范围内的数据的功能,q提供全部获取和分页获取两种方式?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ数据的权限的l承?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ数据的多U授权对象的支持?/SPAN></P></TD></TR> <TR style="mso-yfti-irow: 4"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">授权模型</SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">pȝ权限的授予模型决定了权限pȝ使用的易用与否?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的ѝ?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的排斥和包含?/SPAN></P></TD></TR> <TR style="mso-yfti-irow: 5"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限校验的体?/SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">控制菜单、按钮的昄?/SPAN></P></TD></TR> <TR style="mso-yfti-irow: 6"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black 1.5pt" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高性能</SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .75pt; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt; mso-border-right-alt: solid black 1.5pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">高效的授权与高效的权限校验?/SPAN></P></TD></TR> <TR style="mso-yfti-irow: 7; mso-yfti-lastrow: yes"> <TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 99pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: .75pt; mso-border-left-alt: 1.5pt; mso-border-bottom-alt: 1.5pt; mso-border-right-alt: .75pt; mso-border-color-alt: black; mso-border-style-alt: solid" vAlign=top width=132> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安全?/SPAN></P></TD> <TD style="BORDER-RIGHT: black 1.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #eceae6; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #eceae6; WIDTH: 294.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1.5pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid black .75pt; mso-border-left-alt: solid black .75pt" vAlign=top width=393> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">防止非法途径对于pȝ受保护资源的讉K或操作?/SPAN></P></TD></TR></TBODY></TABLE></SPAN></P><img src ="http://www.tkk7.com/BlueDavy/aggbug/15004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-08 18:15 <a href="http://www.tkk7.com/BlueDavy/archive/2005/10/08/15004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限pȝpd之目?/title><link>http://www.tkk7.com/BlueDavy/archive/2005/10/06/14899.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 06 Oct 2005 14:10:00 GMT</pubDate><guid>http://www.tkk7.com/BlueDavy/archive/2005/10/06/14899.html</guid><wfw:comment>http://www.tkk7.com/BlueDavy/comments/14899.html</wfw:comment><comments>http://www.tkk7.com/BlueDavy/archive/2005/10/06/14899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/BlueDavy/comments/commentRss/14899.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/BlueDavy/services/trackbacks/14899.html</trackback:ping><description><![CDATA[昨天没什么条理的写了昨天那篇文档后,今天x觉得权限pȝq是挺值得写写的,今天先大概的整理了下思\Q准备按照以下的目录l构pȝ的对权限pȝ的实现进行描q和分析Q?BR><BR> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l0 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">一.<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">概述</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l0 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目的</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l0 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l0 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3.1.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">描述</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l0 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3.2.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分析</SPAN></B><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l0 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现Ҏ(gu)</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l0 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">4.1.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">技术策?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l0 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">4.2.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Z</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">RBAC</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: -35.45pt; LINE-HEIGHT: 150%; mso-outline-level: 3; mso-list: l0 level3 lfo1; tab-stops: list 35.45pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><SPAN style="mso-list: Ignore">4.2.1.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RBAC</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">介绍</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 14.45pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: -35.45pt; LINE-HEIGHT: 150%; mso-outline-level: 3; mso-list: l0 level3 lfo1; tab-stops: list 35.45pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><SPAN style="mso-list: Ignore">4.2.2.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">实现Ҏ(gu)</SPAN></B><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: -35.45pt; LINE-HEIGHT: 150%; mso-outline-level: 3; mso-list: l0 level3 lfo1; tab-stops: list 35.45pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><SPAN style="mso-list: Ignore">4.2.3.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">优缺点分?/SPAN></B><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; LINE-HEIGHT: 150%; mso-outline-level: 2; mso-list: l0 level2 lfo1; tab-stops: list 1.0cm"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">4.3.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Z</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">ACL</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: -35.45pt; LINE-HEIGHT: 150%; mso-outline-level: 3; mso-list: l0 level3 lfo1; tab-stops: list 35.45pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><SPAN style="mso-list: Ignore">4.3.1.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ACL</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">介绍</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: -35.45pt; LINE-HEIGHT: 150%; mso-outline-level: 3; mso-list: l0 level3 lfo1; tab-stops: list 35.45pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><SPAN style="mso-list: Ignore">4.3.2.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">实现Ҏ(gu)</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; TEXT-INDENT: -35.45pt; LINE-HEIGHT: 150%; mso-outline-level: 3; mso-list: l0 level3 lfo1; tab-stops: list 35.45pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt"><SPAN style="mso-list: Ignore">4.3.3.<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">优缺点分?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 35.45pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l0 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开源?/SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; mso-outline-level: 1; mso-list: l0 level1 lfo1; tab-stops: list 21.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; mso-bidi-font-family: 宋体"><SPAN style="mso-list: Ignore">?<SPAN style="FONT: 7pt 'Times New Roman'">  </SPAN></SPAN></SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个h观点</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%"><o:p></o:p></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21.25pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p><BR>psQ不q最q的工作非常的忙Q这文档的q度可能会写的比较的慢,^_^</o:p></SPAN></P><img src ="http://www.tkk7.com/BlueDavy/aggbug/14899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-06 22:10 <a href="http://www.tkk7.com/BlueDavy/archive/2005/10/06/14899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://vankiz.com" target="_blank">ר˿ŵƵ</a>| <a href="http://hucgjc.com" target="_blank">츾þþƷ</a>| <a href="http://linanhotel.com" target="_blank">ˬAëƬѿ</a>| <a href="http://tlyyt.com" target="_blank">ѳƵۿ</a>| <a href="http://jcthbank.com" target="_blank">㽶Ƶ߹ۿ</a>| <a href="http://kanboy.com" target="_blank">˳ëƬ߲</a>| <a href="http://www-44455588.com" target="_blank">avƷʵ</a>| <a href="http://qestest.com" target="_blank">һëƬ߹ۿ</a>| <a href="http://www09191z.com" target="_blank">žžžƷƵ</a>| <a href="http://www676617.com" target="_blank">þù߳׽ѹۿ</a>| <a href="http://tiantiantegou.com" target="_blank">aëƬƵѿ</a>| <a href="http://121fj.com" target="_blank">޾Ʒٸ30P</a>| <a href="http://020iws.com" target="_blank">Ƶһ</a>| <a href="http://nfrxfarm.com" target="_blank">AרAV</a>| <a href="http://kmp77.com" target="_blank">޾Ʒרþͬ</a>| <a href="http://513109.com" target="_blank">ҹdj߹ۿƵ</a>| <a href="http://pppmmmm.com" target="_blank">ۺ</a>| <a href="http://hnqkzj.com" target="_blank">91Ʒֻ</a>| <a href="http://wxyz2.com" target="_blank">۲Ƶwwwѹۿ</a>| <a href="http://xfmkt.com" target="_blank">˼˼þ99ѾƷ6</a>| <a href="http://haiholr.com" target="_blank">޾Ƶ</a>| <a href="http://avdaka.com" target="_blank">þ޾Ʒ</a>| <a href="http://www2626cf.com" target="_blank">ɫ͵͵ۺav78</a>| <a href="http://bjlfggcm.com" target="_blank">Ʒ޾Ʒ</a>| <a href="http://wwwdd312.com" target="_blank">ѻɫַ</a>| <a href="http://jiggybaby.com" target="_blank">ŷղר</a>| <a href="http://155562.com" target="_blank">ձ˳Ļ</a>| <a href="http://goldwellib.com" target="_blank">Ʒ޾Ʒ</a>| <a href="http://426366.com" target="_blank">޾ƷþþþþͼƬ</a>| <a href="http://av-fantasy.com" target="_blank">ɫ͵͵Ů˵</a>| <a href="http://bobostrong31.com" target="_blank">޹Ʒһ</a>| <a href="http://78555yy.com" target="_blank">18</a>| <a href="http://www84847.com" target="_blank">߹ۿAVÿո</a>| <a href="http://sdhgjscl.com" target="_blank">avƬ߹ۿ</a>| <a href="http://shandonghj.com" target="_blank">ղ2021</a>| <a href="http://4794d.com" target="_blank">һ</a>| <a href="http://www-2236444.com" target="_blank">լоƷһ߹ۿ</a>| <a href="http://lhtjdj.com" target="_blank">ɫĻ߲</a>| <a href="http://77133144.com" target="_blank">þ޾Ʒ</a>| <a href="http://grjeans.com" target="_blank">žžŹƷƵ</a>| <a href="http://hn283.com" target="_blank">jzzjzzѹۿƬ</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>