﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BlueDavy之技术Blog-随笔分类-系统设计</title><link>http://www.blogjava.net/BlueDavy/category/1911.html</link><description>不懂理论只懂实战的粗人。&lt;br&gt;
&amp;nbsp;&amp;nbsp;
&lt;a href="http://www.fastonlineusers.com"&gt;&lt;b&gt;&lt;font color=red&gt;共有&lt;script src=http://fastonlineusers.com/online.php?d=bluedavy.blogjava.net&gt;&lt;/script&gt;人在同时阅读此Blog&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 08:43:18 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 08:43:18 GMT</pubDate><ttl>60</ttl><item><title>四类设计人员</title><link>http://www.blogjava.net/BlueDavy/archive/2006/09/16/69699.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 16 Sep 2006 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2006/09/16/69699.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/69699.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/09/16/69699.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/69699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/69699.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 个人觉得设计人员可以分为四种类型：模块设计人员、框架设计人员、专业领域设计人员、系统设计人员，这四种类型的设计人员并没有什么绝对的谁强谁弱，只能说各有千秋吧，但一定程度上来讲，四种类型之间还是存在着一些关联，来看看这四类设计人员的专注点和关联吧：&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2006/09/16/69699.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/69699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-09-16 12:15 <a href="http://www.blogjava.net/BlueDavy/archive/2006/09/16/69699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>统一、动态的管理系统配置属性</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/08/24/65621.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/65621.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/08/24/65621.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/65621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/65621.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 每个系统中都会有需要配置的属性，而通常这些属性的配置都会是分散式的管理，而且很多时候都是不支持动态，在实现这些属性的管理(新增、编辑、删除、保存等)时总是要不断的做重复的工作，如果框架中能提供一个这样的基础设施那么对于系统的配置属性管理来说就会比较好了，这样的话系统中所有的属性配置就可以采用统一的方式进行配置、获取、管理和动态的更新了，如果能动态的管理系统配置属性的话，简单的动态改变系统行为也就自然的可以实现了。&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2006/08/24/65621.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/65621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-08-24 20:18 <a href="http://www.blogjava.net/BlueDavy/archive/2006/08/24/65621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增强C/S结构软件的可管理性</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/08/15/63763.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/63763.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/08/15/63763.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/63763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/63763.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C/S结构的软件的可维护性一直就认为是较大的问题，当然，在引入了自动升级这样的小功能就好很多了，这里谈谈C/S结构软件的可管理性，意思就是指Server对Client端的管理，在大多数C/S结构的软件中，并没有很强的管理性的概念，更多的面都是关注Server的业务处理、数据存储这些功能，当然，不一定所有的C/S结构软件都强调Server对Client的管理功能，来说说自己看法中的Server对Client的管理功能吧。&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2006/08/15/63763.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/63763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-08-15 20:35 <a href="http://www.blogjava.net/BlueDavy/archive/2006/08/15/63763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>系统设计基本原则－－输入、输出以及扩展</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/07/18/58718.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/58718.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/07/18/58718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/58718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/58718.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在进行系统设计时，采取的通常都是逐级分解的策略，无论是分层、分模块都是典型的分而治之的策略，而系统在通过逐步分解形成架构、详细设计时，输入、输出以及扩展都是考虑的重点。&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2006/07/18/58718.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/58718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-07-18 11:49 <a href="http://www.blogjava.net/BlueDavy/archive/2006/07/18/58718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户评价系统的观点</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/04/28/43727.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/43727.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/04/28/43727.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/43727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/43727.html</trackback:ping><description><![CDATA[
		<p>早上上班，就听闻用户评价系统代码写的很烂，作为programmer，听到这句话估计都有很不服的心理，但从用户评价系统的观点去看，就可以表示理解，在这个项目中尤其突出，用户最为看重的是系统漂不漂亮，操作起来是否方便，最后才是系统功能实现是否和需求一样，而事实证明，很多时候其实系统功能是已经实现了的，为什么他们还觉得和他们的需求不一样呢，问题出现在交互上，操作上他们按照他们的想法去进行，发现没法用，在这种情况下，他们就认为系统是不可用的，在系统设计的可用性上要引起足够的重视，这种看起来的小事往往容易造成客户对于系统的不信任和抵触。<br />programmer的思想通常锁定在如何将需求转化为代码，而由于过于在乎功能的实现，往往忽略了交互的改善，其实我们把自己作为用户来想，为什么要那么的在乎界面和交互呢，例如作为外行，我们去买DV，估计除了功能外大家更在乎的会是DV的样子，另外一方面也是一样的，在操作DV的时候，当不方便的时候那项功能其实往往就会用的很少，而且用起来也会觉得很不方便，这个时候我们的想法也是一样的，这系统真烂；还有一个例子就是用手机，手机的交互其实非常的频繁，它的操作的方便与否很大程度决定了手机的可用性，可以想像，如果打个电话就需要你按10几次的那种交互你能接受吗，你能不骂这套系统烂吗，^_^，programmer通常都认为象UI集成和交互都不是什么重要的事，因为在programmer的思想中沉浸着对技术的追求，但当我们以一个外行的观点去看的时候我们就会发现，外行评价系统的观点就是这么的简单，其实就像SOA强调的思想一样，系统提供的是服务，不好的服务用户怎么接受的了呢，而这种服务很大层面就来源于界面以及UI，当然，这并不是说功能不重要....</p>
<img src ="http://www.blogjava.net/BlueDavy/aggbug/43727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-04-28 10:37 <a href="http://www.blogjava.net/BlueDavy/archive/2006/04/28/43727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>讨论：动态产生的持久模型和数据存储的设计模式</title><link>http://www.blogjava.net/BlueDavy/archive/2006/04/26/43224.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Wed, 26 Apr 2006 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2006/04/26/43224.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/43224.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/04/26/43224.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/43224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/43224.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 动态产生的持久模型和数据存储，这个词语感觉挺晦涩的，不过估计在实际的项目中或者研发的产品中大家都碰到过这样的场景：<br>例如在一个简单的考试系统中，出题人在系统中出题，答题人进行相应的答题。<br>希望能发起讨论，总结出一个这样的设计模式，^_^，顺便还发起对于另外一个场景的设计模式的讨论，需要动态的扩展目前已有的PO或表，不知道在这个场景中大家会采用什么样的解决方案，预留字段？动态修改表？关联属性扩展表？抑或别的..........&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2006/04/26/43224.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/43224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-04-26 11:19 <a href="http://www.blogjava.net/BlueDavy/archive/2006/04/26/43224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口实现与配置实现</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/03/15/35490.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/35490.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/03/15/35490.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/35490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/35490.html</trackback:ping><description><![CDATA[<P>在实现系统功能的时候，通常会首先定义好功能的接口，在系统功能不断被实现的过程中，慢慢的发现有些接口的实现很类似，这个时候通常会开始做一次抽象，形成一个共同的部分，^_^，慢慢的系统形成了一个抽象的层次，而为了通用，通常是通过定义接口，形成一个抽象类，抽象类中暴露出一些抽象方法供外部扩展实现，逐步的积累抽象类后慢慢形成一个基础框架，而外部在使用时通常可通过继承抽象类的方式来复用、扩展和实现自己的功能。<BR>通常在一些产品级的开发平台上就会提出配置的方式去复用、扩展和实现自己的功能，而不是通过编写代码的方式，其实就是在上面的基础框架上再做了一级抽象，也就是提供了对于将基于基础框架的抽象类的抽象方法的实现再做了次共性的分析，形成了一种通用的实现，然后将实现部分暴露一些可配置点，其实也可以想象这个时候同样可以暴露一些抽象方法，呵呵，只是配置让人感觉不是写代码，很舒服，而且更有利于即时生效的实现。<BR>再深入的想想，其实觉得为什么MDA是可行的，但又是难推广的觉得是同样的道理，MDA将模型经过一级一级的抽象，最后形成的模型固然是一个非常灵活的模型，可通过配置形成多种多样的系统功能，但它带来了在抽象层次的难度，这个通常来说不是那么容易做到的....而且其实在做一级一级的抽象的时候如果做的不够的话，通常会导致基于抽象无法完成特定的功能，这个时候对于框架来讲通常会变得比较的麻烦<BR><BR>系统功能----&gt;(一次抽象后)-----通用系统功能------&gt;(二次抽象后)-----基础框架-----&gt;(三次抽象后)-----&gt;开发平台-----&gt;......&nbsp;&nbsp;&nbsp;&nbsp; 一直这么抽象下去，最后系统会变成什么呢？那个模型又有什么人懂呢？灵活性、扩展性、简易性、可维护性，都是值得深思的问题.....</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/35490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-03-15 22:48 <a href="http://www.blogjava.net/BlueDavy/archive/2006/03/15/35490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计杂谈</title><link>http://www.blogjava.net/BlueDavy/archive/2006/02/20/31691.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 20 Feb 2006 12:11:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2006/02/20/31691.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/31691.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/02/20/31691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/31691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/31691.html</trackback:ping><description><![CDATA[在设计时会碰到两种类型的设计，一种是框架级产品的设计，一种是项目产品的设计，在面向这两种进行设计时觉得还是非常不同的，框架级产品的设计强调一种通用性的抽象上，在这点上通常依赖开发或设计经验来进行抽象，难度不仅在此，通常框架级产品的设计都会面对技术性的问题，也就是说在设计阶段根本就是无法进行细化的一些部分，这种现象在框架级产品中通常出现，这时在进行设计时就要慎重考虑，通常按照敏捷工程的方法的话是先进行spike，spike后再进行相应的设计；对于项目产品的设计强调的是对项目需求的实现，这个时候通常需要的是业务角度的抽象，当然，这点也是具有难度的，通常来说项目产品上不会出现太多的技术难度，也不希望出现。<BR>其实想想，觉得这两种在设计上又是一样的，需要的都是业务的抽象能力以及技术的实现设计能力，对于框架级产品的设计来讲，业务的抽象能力即为软件行业的业务的抽象，而技术的实现设计能力在两者都是相同的，即当出现技术难点时都应选择先进行spike，spike后再进行相应的设计，否则做出来的设计是没什么意义的。<BR>现在经手了一个东西就是先经过设计，再进行开发的，典型的瀑布方式，设计要做的非常的细，觉得这种方式挺依赖系统设计师的，也真正的感觉到一次完整做设计的过程，应该说，这个时候会发现自己的很多不足，建议系统设计师都经历一个这样的过程，从架构到概要到详细，要详细到足够编码的程度，觉得挺容易出现矛盾的时候，因为象框架级的产品来讲最终的详细设计可能是经过N次抽象的具体实现的设计，如果真的想让其他的人仅凭文档就读懂，我觉得还是挺难的，同时由于框架级的产品通常会面临不少的技术难点，这个时候的设计就更是不好把握，因为会有一些风险点的出现，这个时候设计做的过细就显得不是那么得有意义，总体而言，我还是更喜欢先做初步设计，在实现过程不断重构最终形成设计的方式，觉得那样的过程非常的好，在这样的过程中详细、架构都是在不断的被重构，设计慢慢的就会变得非常的不错，不过这个要根据团队而定，只有实力较强的团队才可这么做，否则会出现无设计和不可控制的现象。<BR>还是信奉自己的一句话：“不要求高质量的实现代码，但要求高质量的测试代码”，我相信一个具有优秀习惯和掌握足够重构技巧、OO思想等的开发人员很容易就可以将不是高质量的实现代码变魔术般的变为高质量，但依赖于高质量的测试代码。<img src ="http://www.blogjava.net/BlueDavy/aggbug/31691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-02-20 20:11 <a href="http://www.blogjava.net/BlueDavy/archive/2006/02/20/31691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Acegi实现对象实例级权限控制的方法</title><link>http://www.blogjava.net/BlueDavy/archive/2006/02/13/30461.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 13 Feb 2006 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2006/02/13/30461.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/30461.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/02/13/30461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/30461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/30461.html</trackback:ping><description><![CDATA[<P>一直以来对于Acegi实现Domain Object Instance的权限控制就比较感兴趣，今天抽空大致的看了一下，感觉和我以前提出的数据权限那部分的实现是大致相同的。<BR>Acegi在Domain Object Instance上采用的是ACL的实现，ACL在实现实例级别的权限控制上确实是非常好的方法，按照ACL的思想我们很容易知道Domain Object Instance的控制需要的是user---&gt;Domain Object Instance的一个列表的维护，这点在Acegi上可以看到采用的就是通过acl_object_identity以及acl_permission这两张表来实现的，看acl_object_identity表惊喜的发现acegi也是考虑到了domain object instance的权限继承的实现的，acl_object_identity记录的是需要控制权限的domain object instance的相关信息，acl_permission记录的即为用户对于domain object instance的权限，Acegi做到的其实就是将这些通用的部分做了一个实现，在存储domain object时它帮忙做了相关的权限信息的存储，应该说acegi这样的实现确实是可以做到domain object instance的权限控制，不过感觉在acegi中要去实现对象实例级权限控制还是不那么的方便，配置起来非常的繁琐，应该基于它做一级提升，在易用性方面。<BR>而且这种做法在侵入性上仍然是无法避免的，比如需要分页获取数据时，必然是要在现在的Dao层次做一个侵入的，尽管这点经过一定的方法(Template Pattern)是可以实现无侵入性的...<BR>目前感觉在对象实例级别的权限控制上还是没有非常好的方法...<BR>曾经考虑过是否可以采用AOP的weaver来实现...<BR>还有就是在对象实例级别是否为权限控制还是业务规则定义方面是有一定的区分难度的，很多时候很难明白的去标识哪个是数据权限、哪个是业务规则，感觉在这两点上挺容易发生混淆的现象。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/30461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-02-13 15:38 <a href="http://www.blogjava.net/BlueDavy/archive/2006/02/13/30461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户才是上帝</title><link>http://www.blogjava.net/BlueDavy/archive/2006/02/12/30371.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sun, 12 Feb 2006 10:29:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2006/02/12/30371.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/30371.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/02/12/30371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/30371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/30371.html</trackback:ping><description><![CDATA[<P>一直以来，各种行业都宣传要本着用户是上帝来服务，确实，真正做的成功的企业其实都取胜于这个原则上，软件行业其实同样如此，要把用户真正的当成上帝才行，就像MS，MS从很多方面都是在为用户考虑，不论是面向最终用户还是面向开发人员的产品。<BR>感觉软件技术设计人员、技术人员都很容易陷入误区，就是总是会从技术上去评价一个软件的好坏，尽管这确实是一方面，但对于用户而言这点其实是没什么意义的，虽然在软件界一直强调着的需求驱动的开发原则，但觉得真正贯彻好的也不多，而且即使贯彻的好也只是在需求上做到和用户的一个贴近。<BR>要想真正的把用户当成上帝，只能尽量的去做做换位思考，可以想想自己在用一个系统的时候会是怎么样的，觉得一个系统对于用户而言，其实要求就两方面，一是功能上的，二是界面上，功能上的OK，我们都去满足，但是界面上的呢，确实是现在忽略最多的，当然，还好的是现在也是引起了业界足够的重视，界面上有两块，一是界面的UI设计，二是界面的UI交互，这是我们现在迫切需要提高的，在加强了这两方面后才能真正的把用户当成上帝，从UI设计以及UI交互上为用户进行充分的考虑，或者说从这两方面提升框架的支撑能力，但想想现在的框架，N多都是在追求一种技术上的，在设计/开发中通常我们需要选择哪种框架的时候我们太多的陷入了技术的角度去观察，仍然是把自己当为上帝。<BR>在技术的提升上业界都做了非常多的努力，但在把用户当成上帝这点上做的仍然是多么的不足，想想MS很多时候不一定是在技术上做非常重要的改进，它对于交互的重视是它成功的重要因素。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/30371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-02-12 18:29 <a href="http://www.blogjava.net/BlueDavy/archive/2006/02/12/30371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>惊叹女娲造人－－娱谈系统设计</title><link>http://www.blogjava.net/BlueDavy/archive/2006/02/11/30282.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 11 Feb 2006 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2006/02/11/30282.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/30282.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/02/11/30282.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/30282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/30282.html</trackback:ping><description><![CDATA[女娲造人，耳熟能详的神话，作为一个技术人员，不得不佩服女娲的系统设计和实现能力，^_^，人是一个极度复杂的系统，需要实现N多的功能，其系统的分解和设计需要有极强的抽象能力，女娲就像是一个伟大的架构师，同时又不仅仅如此，还是一个伟大的程序员，将系统实现的如此完美。<BR>对于人这么复杂的系统，女娲肯定得想清楚人到底是怎么样的，这个她当然是按照她自己来构思的，这个时候她要做的就是将这个庞大的系统进行分解，划分为诸如头、身体、上肢、下肢这样的子系统，确定每个子系统的职责，如头部负责思考以及其他的一些职责，同时还需要为每个子系统定义相关的接口，如头和身体的接口、上肢和身体的接口，最后她还需要确定各子系统之间的通讯是怎么去实现的，如通过血管、神经等，在做完这部后还只是完成了一小部分而已，她需要继续的不断的按照这种方法进行分解，如将头又分解为脸、头颅等等部分，直到最后分解为细胞部分，才算完成了整个系统的详细设计，此时才能开始做人的实现，女娲对于一个如此复杂的系统却能够做到合理的划分各子系统的职责、定义各子系统的接口以及通讯方式，使得各个子系统能够如此的协作，不得不令人惊叹，不如把女娲称为系统设计的宗师，呵呵...<BR>以上言论纯属娱乐化的观点，呵呵，只是表达出了系统设计的一个通常过程，简要表明系统设计采用的最基础的方法---分解，系统设计的产物--子系统的职责定义、接口定义以及通讯定义。<img src ="http://www.blogjava.net/BlueDavy/aggbug/30282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-02-11 18:44 <a href="http://www.blogjava.net/BlueDavy/archive/2006/02/11/30282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>界面对象化</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/01/26/29238.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/29238.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/01/26/29238.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/29238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/29238.html</trackback:ping><description><![CDATA[<P><FONT color=#008000 size=4><STRONG>概述<BR></STRONG></FONT>界面对象化是指以对象的思想去描述页面元素以完成UI的集成和开发，以使UI原型能够映射或转化为可运行的系统原型，提升系统开发的效率，避免大量的花费时间在UI的集成、维护上。<BR><FONT color=#008000 size=4><STRONG>产生的原因</STRONG></FONT><BR>在传统的开发过程中，特别是Web开发过程中，从UI原型转化为系统原型的过程总是要耗费特别长的时间，在系统的整个开发过程中通常在UI集成和维护上往往是耗费最长的时间，而很多时候更是由于UI集成了动态性质而导致了UI修改、代码调试的困难。<BR>为什么会出现这样的现象呢？这样的现象产生的原因无非是UI原型和系统原型之间存在的差异造成的，UI原型是一种静态原型，系统原型是一种动态原型，在UI原型这种静态的原型中只描述了系统的静态结构、显示和行为(html、css、js)，而对于系统原型来说它需要的是一种动态结构，这个时候要做的无疑就是怎么样让UI原型中的静态结构、显示和行为变为动态的，造成这个的原因主要是因为html的结构元素是无法表达出其动态性质的，当然，这不能去怪Html，它本来就只负责静态的。<BR>但对于开发人员来说，这个时候其实要做的是就是让页面的元素能够动态化，界面对象化就是解决它的一种不错的办法，对象化使得界面中的所有元素都可以作为对象来看，从OO角度去看，可以得出界面中的任何元素在动态方面拥有两个特性，就是动态的结构和动态的行为，动态的结构是指这个元素将会改变或增加原有Html界面的结构，如一个用户列表的表格，这就是一个典型的动态结构，表格中的结构会随着用户列表信息的不同而不断的增加tr/td这样的结构元素；动态的行为是指界面元素的一种动态交互行为，简单的比如在下拉选择用户所在部门的时候就是一种下拉的动态交互行为(这个也可以视为静态的)，另外一个更典型的例子是表单提交后与后台交互的此种交互行为。<BR><FONT color=#008000 size=4><STRONG>实现的方法</STRONG></FONT><BR>如今Web开发框架都在重视这方面，都在想办法让html静态过程转化为动态过程变得更为简单的方法，应该说象jsf、tapestry这些的东西都在这方面做出了努力，jsf来说视图更为强调开发视角，但在UI集成方面仍然是非常麻烦；tapestry来说则表现的更为好一些，它更为注重避免对于html静态结构的侵入。<BR>为了让html静态结构能表现出动态结构的展现和交互的特性，这个时候设计模式中的decorator模式就显得很适合了，要做的无非就是把一种静态的结构重新装修一把，想想decorator模式，它不会对原有的对象产生什么影响，而同时又可表达出更为丰富的行为。<BR>既然是decorator，那么实现界面对象化的方法也就浮现出来了，在采用界面对象化的思想上，界面所有元素都可以视为对象，只是这些对象又有可能是由其他的对象组合而成，如table是一个对象，其中的tr、td也是对象，这个在js中深有体现。<BR>界面的结构、显示以及行为分离的方式无疑是非常值得学习的，在描述一个界面对象的动态特性的时候这点也是同样需要保持的，界面对象的动态特性主要就是动态结构和动态行为，对于动态结构可以采用类加模板的方式来实现，而对于动态行为在现在我们则可以采用js来完全达成(前台交互js本来就可做到，后台交互则可通过ajax的方式来实现)。<BR>说的可能不是很清楚，举例如下：<BR>如一个用户的列表的html可能是这样：<BR>&lt;table id="userstable"&gt;<BR>&lt;/table&gt;<BR>在真实的系统中这个部分必然是动态的展现，需要改变原有的结构，这个时候采用界面对象化的方法我们可以这么去做：<BR>在一个独立的xml文件中进行这样的描述：<BR>&lt;element id="userstable"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bindhql="from User u where u.id desc"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showstyle="userstablestyle"/&gt;<BR>&lt;component id="userstablestyle"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref-component="table"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showcolumns="user.id=序号;user.name=用户名"/&gt;<BR>这是动态结构的实现方法的一个示例，可以看到在这样的情况下对原有的html是没有任何的侵入的。<BR>再举一个动态行为的例子：<BR>如一个新增用户表单中有一个保存的按钮，需要提交到后台执行动作，并根据动作执行的结果来控制页面的流转，html中可能是这样：<BR>&lt;button id="saveBtn" name="saveBtn" value="保存"&gt;<BR>同样的，在一个独立的xml中进行这样的描述：<BR>&lt;element id="saveBtn"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionType="pageflow"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action="saveUser"/&gt;<BR>&lt;action id="saveUser"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref-action="DataSave"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;result name="success"&gt;userstable&lt;/result&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="error"&gt;saveusererror&lt;/result&gt;<BR>&lt;/action&gt;<BR>这样就完成了将html中静态元素decorator成一种具备动态特性的元素的过程。<BR>界面对象化后界面组件化自然也就可以形成了，也就是如今流行的UI Component，在这样的一种实现方法下我们甚至可以想象在UI进行大变动的情况下根据无需开发人员做任何改动系统就仍然可以运转，这必然会大大的减少UI集成和维护的工作量；但UI Component在目前也是会带来一些问题的，就是在如今很容易将UI设计图转为html的情况下，反而因为使用了UI Component造成了很难达到UI设计的效果，就像是CS结构一样，CS结构中的元素为了做到和UI设计一样的效果无疑是要付出很大的努力的，不过在web上的UI Component还是比CS占有更多的优势，因为它可以通过css来控制显示，仍然看好Web的开发方式，虽然Web的交互方式现在离cs的交互方式还有一定的差距，但就显示效果来讲Web是更容易做的比cs结构好的。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/29238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-26 11:59 <a href="http://www.blogjava.net/BlueDavy/archive/2006/01/26/29238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回顾两个项目看设计阶段</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/01/18/28580.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/28580.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/01/18/28580.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/28580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/28580.html</trackback:ping><description><![CDATA[<P>回顾自己所经历的两个项目，来对设计阶段进行了总结，自己也算是个XPer，经历过的这两个项目也基本都是采用XP的方式进展，大家都知道，XP在设计阶段推崇的是群体设计，通过CRC来完成，在这里就对两个项目执行的情况做做总结。<BR><STRONG>项目A<BR></STRONG>一个大型项目，当时的团队相当于是两个设计师加上三个高程组成，迭代会议完成用户故事分解、CRC设计以及任务分配，典型的XP方式，项目开展过程中应该是整个过程都执行的不错，尽管现在回想当时的CRC做的并不是很好，但应该说在整个项目开展过程中并没有出现多少问题，项目需求的实现都还算正常，整个团队的提高也是非常的不错，共同进步。<BR><STRONG>项目B</STRONG><BR>一个框架型项目，团队成员是一个设计师、一个高程加上四个初程，同样的XP方式的设计，项目开展过程中出现了不少问题，设计师不得不花大量的时间在技术支持上，而且最后项目的结果无论是需求上还是设计上都产生了不小的偏差，整个团队的提高也没达到期望的效果，而由于设计师过多的投入在技术支持上，使得架构的完善一直存在偏离。<BR><BR>为什么同样的过程在两个不同的项目、不同的团队中执行的效果会相差这么远呢？<BR>首先从项目类型分析，项目A属于实际项目，项目B属于研发项目，两个项目的关注点不同，项目A的关注点是客户需求，项目B的关注点则更多的是扩展性和二次开发的易用性，在这两类项目中设计几乎是完全不同的，项目A更多的是业务的复杂度，而项目B更多的却是技术的复杂度，从这个方面分析下来得出的结果其实就是项目A更重人员的业务能力，而项目B更重人员的技术能力，当时项目A团队中的人员对该项目的业务应该说都属于熟悉的那种，觉得这也是成功的原因之一，而项目B团队中的人员技术相对项目要求来讲是不足的。<BR>接着从项目成员本身分析，项目A中的几个成员基本都属于能够独当一面的人，而项目B中的成员水平参差不齐，觉得这也是在两个项目中执行效果不同的原因之一。<BR>而最重要的一点问题我认为出在设计阶段上了，XP在设计阶段更多的是发挥群体智慧，在设计时基本是群体参与，而形成的CRC尽管已经详细，但通常都没有一个良好的记录，在项目A中由于团队成员个人的能力即使在实现的过程中出现一些问题也能独立解决，所以没有暴露出什么问题，同时由于团队成员能力的相当，在CRC设计讨论的时候大家基本能做到充分的交流，对于大家的提升都很明显，而在项目B中则由于团队成员能力的参差不齐，导致在CRC设计时基本没有讨论，都是设计师主导，而且最终由于没形成足够的文档，在实现时团队成员仍然是出现不少的问题，而需要设计师不断的去指导，最终导致设计师在架构上投入的不足，同时也导致团队成员在实现时仍然出现不少问题；在设计阶段的第二个问题则是由于在XP中实行简单设计，当然，简单不等于简陋，但这个时候的设计更多的其实是需要通过重构去不断完善的，在项目A的团队中成员在完成任务后都会对自己的任务进行一定的重构完善设计，而在项目B中却没法做到这一点，导致最后的实现在设计上出现过多不完善的地方。<BR><BR>在这样的分析下，认为设计阶段需要充分结合团队情况而考虑开展方式，对于水平都相当并且具有一定设计能力的团队而言，群体设计的方式无疑会大大超过个体设计，对于整个团队的协作、水平提升都会起到极佳的作用，而且这时我觉得也没必要在设计上过多的追求，而应该采用能想到的最简单的解决方案，在成员实现解决方案的过程中成员可根据经验不断的进行重构完善设计，在这样的情况下没必要开始形成规范的设计文档，可在一定的阶段如迭代完成前的设计稳定时形成规范的设计文档，其实同样，在这样的团队中没有明显的设计师和开发人员的区别，在这样的团队中对于需求的变化是可以快速进行响应的，不用纠缠于规范的文档格式，而可以通过代码来表达出足够的设计思想；而对于水平参差不齐的团队而言，个人认为团队中的系统设计师这时要充分担当设计师的职责，对于任务提供出详细的设计文档，通常来说，为了方便整个团队的理解，需要形成规范性质的文档，而且在做设计时，设计师应该尽量的考虑齐全，不能过多的去依赖后期的重构来完善设计，同时，在将设计交由开发人员进行实现时要加强Code Review以及开发指导，在这样形式的团队中，自动生成代码的形式以及开发代码的模板会起到很好的帮助，或者设计师可以通过依赖设计工具如rose等的强大支持，将设计模型转化为开发模型，从一定程度上限定和规范开发人员的开发，当然，最佳的就是提供框架和框架的IDE，在这样的方式下，就要求设计师对于设计有充分的把握能力和预见能力，否则在需求出现变化时会难以应付，呵呵，就仅仅在规范的文档格式方面都要投入不少时间，在这样的情况下，设计师和开发人员的职责一定要界定清楚，设计师需要首先对架构进行完善，在完善后开始详细设计并交由开发人员实现，在这个过程中设计人员更多的是需要承担起开发指导和设计Review的角色。<BR><BR>by the way：其实也可以看出，需要充分的对团队成员进行了解来制定相应的软件过程，想做到流水线式的开发是要付出巨大的前期努力的。<BR><BR><EM>ps：后续一文：系统设计方法和工具(争取在年前完成)，^_^</EM></P><img src ="http://www.blogjava.net/BlueDavy/aggbug/28580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-18 23:22 <a href="http://www.blogjava.net/BlueDavy/archive/2006/01/18/28580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计文档？</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2006/01/06/26939.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/26939.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2006/01/06/26939.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/26939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/26939.html</trackback:ping><description><![CDATA[<P>做软件以来，这个话题一直是自己很郁闷的一个地方，我们来看看软件开发的过程，软件开发的过程无论是采用传统的瀑布、如今的迭代等方式都是一个需求--&gt;设计--&gt;实现的过程，在这整个过程当中，每个环节都要有个完成的标识，并且需要成为下一环节的前置条件、参考依据，这个时候通常的做法都是通过提供文档的方式，但是在我所经历的开发当中，我最郁闷的也是这点，需求这部我没什么疑问，我觉得产生需求文档是必须的，但其实就我所经历的开发来看，我认为需求文档对于用例最好不是仅仅依赖于描述，描述是没人会仔细去看的，而最好是UI原型图，这样对于用例的表达会清晰些，当然，有些复杂的部分仍然需要通过描述的方式。<BR>来看设计部分，在这个部分我一直就觉得有些疑问，一直以来都不是很认同在设计的输出就是要提供一份详细、规范的设计文档，在我看来，设计确实是进行实现的前提条件，这毫无疑问，但真的就一定要通过一份详细的设计文档来做到这点吗？我觉得设计中最重要的设计理念的表达，而对于设计理念我觉得最佳的表达方式仍然是图形，而这个图形一定要采用规范的象UML这些来表示吗？我并不是那么的认同，我觉得设计图最重要的就是要表现出自己的意思，至于你用什么图形来表示我不觉得有什么重要，只要设计人员认为那是他最擅长表达自己设计意图的工具就行，没必要在工具这件事上浪费设计人员太多的时间，并且造成了限制，设计的评审我觉得是有必要做的，这时我觉得大家可能会问，没有文档怎么办，怎么评审？我觉得评审的人是为了让同行的设计人员能够根据目前设计人员对图形的一个解释来准备的了解设计人员的设计意图，并且根据自己的经验相应的给设计人员一些建议；其次，从简单设计角度上来讲，我觉得设计是一个不断充实和完善的过程，设计是一个典型的求解过程，就象一道数学题，通常来说，也许会有N中解法，每个不同程度的人看到的解法也许是不一样的，但首先能解出来这就是一个成功，其次才是看这个解法有什么可以改进的地方，我现在做设计的时候就是首先采用自己目前能想到的最简单的解决方案，在做同行评审的时候也许有些同行能给出些建议，如果没有的话，通常来说我会先按照这个简单的解决方案先做，在实现后其实就会发现目前这个实现方案的一些问题，即使当时没发现，在添加新功能的时候也会发现，这个时候依赖重构开始进行调整，其实我觉得只有这样一个设计才能慢慢的被完善、被诞生，应该说，不同程度的设计师的区别就在于设计出来的东西所被完善时投入的精力和造成的影响，我相信没有哪个设计出来就是那么好的，在这种情况下，通常就会出现一个问题，就是最后实现形成的设计和最初的设计有很多的不同，这个时候是不是意味着在开发的过程中应该一直去更新、维护设计文档呢？所以我觉得最初的设计文档不需要为了规范投入那么大的精力， 但不意味着不要，需要的是一份能够表达设计意图的文档，最重要的是图形化的表达，大家认为呢？或者说大家都是怎么做的呢？还有就是这种时候正规的设计文档什么时候出呢？^_^，缺少文档时有的一个问题是怎么样将设计意图准确的表达给开发人员，这部的做法在XP中通常不存在，因为XP中设计是大家一起做的，在传统的情况下我觉得更多的是依赖设计人员和开发人员的频繁交流以及对于代码的code review。<BR>但缺少设计文档在公司的运作中通常会出现一个问题，就是领导们的不放心，领导们会觉得怎么经过了这个阶段没啥正式的产物，领导们会认为设计图这些是不足以证明这个阶段的完善的，郁闷，造成总是和领导形成矛盾，这也怪自己在安排任务时通常缺少这个正规的设计文档的编写过程，这个过程真的有这么必要吗？疑问中......<BR><BR>ps：顺便说下现在自己从设计到实现的一个步骤，在设计时首先我会根据目前的需求得出问题域，这个时候开始进行设计，对问题域进行求解，这个时候会给一个自己能想到的最简单的解决方案，注意，既然是解决方案就以为着首先要能解决问题，简单的解决方案不等于简陋的解决方案，在提供这个解决方案后开发人员实现后我会对code进行review，而这个时候review经常会发现设计中值得改善的地方，这个时候开始对设计进行重构，详细设计一般要在迭代完成时才能最终形成.....觉得这样的方法挺好的，^_^，自己在做实现的时候现在的做法都是先把测试代码写完后，写设计的时候会先随意的写，写完在通过测试后开始对代码进行重构，这个时候开始把之初的长方法首先进行重构为小方法，重构完后开始做封装的考虑，形成对象模型，在对象模型形成后开始考虑继承、多态的引入，最后开始考虑设计模式的引入，一般这个时候最终的详细设计才得以形成，我觉得这个时候是体现一个设计师水平的时候，一个优秀的设计师在设计之初就能想到很多，预见的很远，使得设计在设计之初就能足够的完善，而不需要通过太多的重构形成最终的设计，而一个普通的设计师也许最初只是能给出一个解决方案，但毕竟是可行的解决方案，在设计实现的过程时才逐渐的发现设计的不足，这个时候通过重构进行的完善，对设计师来讲也是一种很好的积累，所以来说，在完成设计后最好是能多找人交流交流，^_^，喜欢这个方法.......</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/26939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2006-01-06 21:19 <a href="http://www.blogjava.net/BlueDavy/archive/2006/01/06/26939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据集表现层组件之接口控制</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/12/24/25300.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/25300.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/12/24/25300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/25300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/25300.html</trackback:ping><description><![CDATA[<P>数据集表现层组件暴露对外的接口，组件可通过参数设置等方式来达到对组件的如下控制：</P>
<LI><STRONG>数据集的访问控制</STRONG><BR>访问哪个数据集<BR>访问数据集的参数<BR>
<LI><STRONG>显示控制</STRONG><BR>显示的形式(树、表格、Grid、列表等等)<BR>显示的样式控制(html、css)<BR>显示的字段<BR>显示字段的字段名<BR>显示字段的列宽<BR>显示字段的顺序<BR>显示字段的权限控制<BR>
<LI><STRONG>操作控制</STRONG><BR>对于能否新增、编辑、删除、查询的控制<BR>自定义新增/编辑页面的控制<BR>根据权限对操作的控制<BR>对于是否分页显示的控制</LI><img src ="http://www.blogjava.net/BlueDavy/aggbug/25300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-12-24 14:07 <a href="http://www.blogjava.net/BlueDavy/archive/2005/12/24/25300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计生涯一年总结</title><link>http://www.blogjava.net/BlueDavy/archive/2005/12/20/24701.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 19 Dec 2005 16:42:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/12/20/24701.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/24701.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/12/20/24701.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/24701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/24701.html</trackback:ping><description><![CDATA[<FONT size=5><STRONG>序</STRONG></FONT><BR>担任系统设计师的职位一年了，尽管自己到现在为止仍然是个不合格的设计师，虽然这一年以来也不是完全从事设计的工作，但毕竟站在这个岗位上，主要从事的还是系统设计方面的工作，加上自己也有志于在这个方向发展，所以做一个年度总结是有必要的，也希望能对希望进入设计岗位的朋友们有些帮助，同时也希望得到在设计岗位上有经验的同行们的指点。<BR>这也是自己真正担任系统设计师这个岗位的第一年，尽管在以前的工作中也曾经负责过设计部分，但现在回顾起来，觉得如果不在这个职位上，很多时候是无法了解到这个职位应该做的事的，自然也就无法去做了，在整个一年的工作中学到了很多的东西，同时也暴露了自己很多的不足，但总体而言自己是觉得已经踏入了系统设计的大门，但还需要不断的提高。<BR><FONT size=5><STRONG>学到的东西<BR></STRONG></FONT><FONT size=5><STRONG><FONT size=4>概述</FONT><BR></STRONG></FONT>一年以来作为系统设计师主要参与了公司的一个C/S结构的产品的研发、工作流系统研发的规划、一个办公应用系统的项目以及现在手头上的一个开发框架中。<BR><FONT size=4><STRONG>详细<BR></STRONG></FONT>在从事C/S结构的产品的研发上，此产品的系统架构主要为插件体系架构，不过在实际实现过程中做的不够好，不过一直到现在插件体系架构仍然是我最为关注的，而且自己也在做这方面的事情，从设计角度的考虑上来说完成了远程调用、增量缓存等的设计实现方案，同时也根据场景运用了合适的模式。在这个产品中远程调用角度引入了同步、异步的机制，尽管后来异步一直没搞定，不过毕竟去摸索了，呵呵，现在倒是有解决方案了；增量缓存方面则是为了提升客户端与服务端的数据交互效率；模式方面运用的主要有命令模式、责任链模式、Template模式、Observer模式。这是自己第一次作为系统设计师负责整个产品的设计，现在回顾起来自己在那个阶段做的是不够的好，主要是在整体系统的设计上做的不够的周全，系统全貌的体现仍然不够，其实从一定程度上来讲就是架构不够完善，而且在架构的实现上做的也不到位。<BR>在从事工作流系统研发的规划上，自己主要是作为规划人员对整个工作流系统的研发进行规划，同时也作为系统设计师对整个工作流系统进行设计，工作流系统一直是工作以来的重点，相对来说在这方面的经验比较的多，整个工作流系统研发的规划做的比较顺利，可惜后来由于公司的某些原因，无疾而终。<BR>在办公应用系统的项目上自己作为项目经理和系统架构师双重角色，这里主要讲系统设计方面的工作，在这个项目上根据自己以往的经验完成了一个办公类应用系统的架构设计，同时完成了一个完整的权限系统以及一个基本的CMS的设计工作上，收获不小的项目。权限系统的设计也是在blog上曾经专门写了一个系列，而在CMS中的话主要是完成了缓存、模板机制、CMS模型的设计工作。<BR>目前手头上则是一个开发框架的东西，这个东西则让自己开始真正的做框架级的设计，和实际项目的那种感觉是不一样的，难度大大增加，现在主要是做数据集的表现层组件、代码、配置文件的自动生成、缓存策略、通用子系统部分的设计和实现工作。<BR><FONT size=4><STRONG>小结</STRONG></FONT><BR>一年以来觉得自己在系统设计方面学到的最多的就是产品的规划、设计、需求驱动的设计方式(需求到设计的映射)、领域模型的运用以及模式的适当运用。<BR>最大的进步就在于逐渐的学会了从系统全局去分析系统，形成一个系统需求分析---&gt;设计---&gt;实现的步骤，对于系统的架构设计、概要设计以及详细设计也能够更加清楚的了解，设计的目的就是为了需求的实现，所以设计需要根据需求来产生。<BR>架构设计中最重要的是根据对需求共性的分析形成系统的骨架，架构中考评的重点是对于系统实现的支撑<BR>、扩展以及对非功能性需求的满足，同时还需要考虑架构中具体引入的技术或者框架，这个更多的是需要根据team、项目的大小、时间紧急等因素来决定，这也是架构设计中最为困难的一步，目前在做架构设计时更多的是参考业界内已有的架构体系，只是有些时候需要考虑特殊业务需求的实现方法，最后根据职责单一、内聚和松耦合的重要原则形成系统模块的划分以及接口的定义。<BR>概要设计最重要的在于根据模块的划分以及接口的定义形成模块的设计和接口的实现设计，模块的设计受架构的约束形成。<BR>详细设计则是具体的模块的设计的实现以及对象接口的定义。<BR>关于架构、概要、详细设计将专门写blog来阐述。<BR>另外一点来说就是在一个公司而言通常来说面对的往往是同类型的项目占多，这个时候架构的重用是非常明显的，在这种情况下为了保证公司的项目技术结构的统一以及技术人员的统一，通常会有框架的需求，这点以后也将专门写blog来阐述。<BR>最后一点就是这一年来真正在架构体系的接触上来说应该就是插件架构体系，其他方面则主要是些系统方面的模型设计，如，自己在这个方面也是投入了巨大的关注，目前也在做这方面的东西，这个在我完成目前手上的东西后将专门来阐述插件架构体系以及其应用模式。<BR><STRONG><FONT size=5>不足</FONT></STRONG><BR>在一年来各个项目的自己所做的设计来看，最大的不足在于自己缺乏一套系统的、理论的系统设计过程的指导，个人觉得即使这套理论不是很优秀也没关系，这个可以根据自己的实践经验来调整，但需要的是一个系统的过程，这点我觉得是自己现在最大的不足。<BR>在自己的不足上，主要列了以下几点：<BR>1、系统的、理论的系统设计过程的学习<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要有个清晰的系统设计过程的体现，并能足以明确的说明其形成的过程。<BR>2、需求驱动以及领域驱动的深入实践和改进<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计对于需求的满足性以及符合性的体现。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 领域模型驱动的体现以及建模的体现。<BR>3、加强技术基本功<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作为架构设计师，最重要的是设计合适的架构，特别是作为国内目前大部分的中小企业来说，面对的系统其实在业界内都是有成熟的架构体系的，关键是要根据team、时间等方面因素来做出选择，这个时候就要求架构师对于各种技术的选择、框架的选择需要有个准确的判断。<BR>4、架构的合理性<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这点和3中说的有重复，就是如何做出一个适合一定背景的架构？<BR>5、模式的合理运用<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于模式的运用需要更加的纯熟，包括分析模式、架构模式和设计模式。<img src ="http://www.blogjava.net/BlueDavy/aggbug/24701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-12-20 00:42 <a href="http://www.blogjava.net/BlueDavy/archive/2005/12/20/24701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>继续侃数据驱动和模型驱动</title><link>http://www.blogjava.net/BlueDavy/archive/2005/11/25/21457.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Fri, 25 Nov 2005 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/11/25/21457.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/21457.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/11/25/21457.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/21457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/21457.html</trackback:ping><description><![CDATA[<P>前天那篇blog更多的是讲了下数据驱动、模型驱动的大致概念，今天更多的是讲数据驱动以及模型驱动在进行系统实现时的方法以及过程。<BR><STRONG>数据驱动<BR></STRONG>采用数据驱动进行系统实现时通常采用的是一个这样的过程，建立数据源(DataSource)，同时根据业务对象模型进行数据库表设计，在数据库表设计完成后根据业务场景构成数据集(DataSet)，通常这个时候DataSet本身就是一种业务场景所需的业务数据，在简单的情况下有可能就是对某张表的操作，复杂的情况下则是对于多张表的操作，在DataSet构成后将此DataSet绑定到页面即可进行数据的展现了，如需对数据进行增加、编辑、删除同样通过DataSet方式来进行，这个过程基本上就是一个基于数据驱动进行系统实现的过程了。<BR><STRONG>模型驱动</STRONG><BR>采用模型驱动进行系统实现时通常采用的是一个这样的过程，根据业务场景建立业务对象，在进行持久时持久业务对象中需要持久的属性，对于业务场景的实现通过Facade模式对外提供统一接口，此接口通过与持久层进行交互以及操作业务对象(或领域对象)来完成业务场景的实现，而页面则通过此领域对象或显示对象来进行数据的展现，如需对数据进行操作按照显示对象---&gt;Service Facade来完成。<BR><BR>从上面关于实现的过程的描述上来说，会觉得好像模型驱动更为复杂，但模型驱动较之数据驱动的优点我想不用多少，这里更重要的是我觉得是对于数据驱动和模型驱动的一个理解，其实数据驱动同样是模型驱动，呵呵，数据驱动中的业务对象模型我们可以认为和模型驱动中的业务对象模型一致，其和模型驱动的不同点在于数据驱动采用DataSet的方式来实现业务场景，而模型驱动通常采用Service Facade调用各领域对象来实现业务场景，这里有一点非常明显，数据驱动只适合一种简单的业务场景，那就是通过数据关联或简单的数据逻辑处理可以来实现的业务场景，而Service Facade其实对于两者均通用，通过构建类似DataSet的数据关联或简单的数据逻辑处理通过和持久层交互即同样达到了如此的目的，^_^，而且这种方式对于复杂的业务场景同样可以实现，通过领域对象的交互即可完成，而在DataSet方式中这个步骤是比较棘手的，虽然也可以处理，但会带来的问题就是重复代码的增多以及可维护性的降低，其实关键的问题就是其没有形成对象，内聚性不够强。<BR>我的观点仍然是数据驱动是一种退化的模型驱动或者说变相的模型驱动，数据驱动中根据业务对象模型进行数据库表设计的这个过程可以映射为在模型驱动中进行业务对象模型实现的过程，而建立数据集的过程则和模型驱动中的Service Facade颇为相似，只是其Service Facade中的方法比较简单，至于DataSet绑定到页面这个过程其实和模型驱动中将领域对象或显示对象和页面绑定是相同的概念。<BR>模型驱动思想才是王道，<IMG height=20 src="http://www.blogjava.net/Emoticons/QQ/14.gif" width=20 border=0>&nbsp;，需要的仅仅是架构体系中对于数据驱动这种变相的模型驱动也提供一个良好的支持，其实我觉得通过上面的描述已经可以看到要去做出这个支持是非常简单的一件事，抽象形成通用Service Facade以及考虑如何建立DataSet即完成了这个实现，而且这样的架构对于模型驱动同样支持，^_^，何乐而不为，鱼和熊掌均可得之(其实就只有熊掌，只是一个可能是肥壮一些的，一个是瘦弱一些的，^_^)。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/21457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-25 21:47 <a href="http://www.blogjava.net/BlueDavy/archive/2005/11/25/21457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据驱动与模型驱动</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/11/23/21169.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/21169.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/11/23/21169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/21169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/21169.html</trackback:ping><description><![CDATA[数据驱动、模型驱动作为如今软件设计中两种不同的模型驱动方法，应该说各有各的优缺点以及适用的场合，不能就一概的去认为哪种必然就是更好的。<BR>数据驱动采用的方式是根据对业务的分析建立数据模型来进行系统设计的一种方法，通过数据模型的建立来完成系统的实现，一般来说，在采取数据模型的系统中多采用的是前台直接和数据模型进行绑定的方式，这样在实现起来相对来讲会非常的快速。根据数据驱动的系统设计以及实现方式上来讲，数据驱动适合于数据型的应用系统的建设，而现在大部分的中小型应用系统很多就停留在这个层面上，在这类系统中数据驱动会显得特别的实用和好用，这类系统一个非常突出的共同点就是系统基本属于信息的录入、显示以及查询这样的一个过程，不存在复杂的数据业务逻辑处理。<BR>模型驱动采用的方式根据对业务的分析建立业务对象模型来进行系统设计的一种方法，通过业务对象模型结合系统架构约束来进行系统的实现，一般来说，在采取模型驱动的系统中多采用N层的结构体系，前台显示一般和业务显示模型进行交互，而业务显示模型则通过业务对象模型进行交互来完成业务逻辑的处理，业务对象模型通过与持久对象模型进行业务持久的处理，在这样的情况下，势必增加了系统的复杂度，模型驱动适合与业务型应用系统的建设，这个在行业化的业务应用上显得比较突出，这类系统的共同点在于业务逻辑较为复杂而且多变，系统不仅仅是信息的录入、显示以及查询，更多的是对录入或显示的信息进行业务逻辑的处理。<BR>经过上面的简单介绍后，我觉得对于数据驱动和模型驱动都会有个大概的概念，只能说数据驱动和模型驱动各有优势，要结合系统需求来选择相应的驱动方式。<BR>对于模型驱动个人有些观点，其实从模型驱动我们可以看出如果采用模型驱动面对一个数据型的应用系统时，最后产生的业务对象模型即退化为了数据模型，只是由于模型驱动通常采用的N层架构此时反而约束了此模型的快速实现，是否应该在模型驱动的N层架构中去考虑一种退化的业务对象模型的支持呢？觉得这点是值得思考的，如果支持的话应该说对于模型驱动非常有利或者说是模型驱动的一个补充，相当于对于模型驱动进行分类处理，有些时候架构不能太S，还是要根据系统建设的需求做出适当的调整。<BR>根据这样的观点，其实数据驱动也是模型驱动，只是它采用的是一种退化的业务对象模型的驱动，并同时进行架构层次的调整以适应系统的快速建设，但数据驱动对于复杂多变的业务逻辑系统来说毕竟难去满足了，主要是会在数据模型的建立以及业务逻辑的修改的方面。<BR>综合这样的观点，还是更为倾向模型驱动，同时也认为，模型驱动的架构应该考虑对于退化的业务对象模型的支持。<img src ="http://www.blogjava.net/BlueDavy/aggbug/21169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-23 19:52 <a href="http://www.blogjava.net/BlueDavy/archive/2005/11/23/21169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件架构建设杂谈</title><link>http://www.blogjava.net/BlueDavy/archive/2005/11/21/20830.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 21 Nov 2005 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/11/21/20830.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/20830.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/11/21/20830.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/20830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/20830.html</trackback:ping><description><![CDATA[软件建设需要考虑的重要的两点我觉得是：<BR>1、客户的功能需求以及非功能需求。<BR>2、软件的维护性。<BR>软件的技术架构就是为了满足以上重要的两点而诞生的，同时由于软件的技术架构决定了使用它的开发人员所需的水平以及开发的难易，此时又要尽量做到降低对使用者素质的要求以及开发的门槛，以保证开发的高效性，但这个相对上两点来说更没那么重要。<BR><BR>在做一个框架级或者现在流行的诸如应用支撑平台的东西的时候，此时的客户一般来说是公司的开发人员或其他公司的开发人员，那么首先就要得到他们的功能需求以及非功能需求，但软件开发人员此时作为客户来说同样是不够成熟的，因为也许很多的开发人员已经适应了它现有的开发模式，你让它重新接受一套新的肯定会很容易引起它的抵触情绪，这个和很多的行业客户是一样的，它习惯的做法一旦被你打破，甚至你把它以前的做法都改变了，这个时候得到的只能是客户的不满意，同时需求也不好挖掘，呵呵，觉得这个时候一方面的做法通常是先吸取客户现在的做法，提供它目前做法的实现方式，另一方面向客户灌输现在方式的好处，慢慢的让它接受。<BR>另外一方面而言，对于开发人员最重要的就是开发的高效以及简易性，如果框架让开发人员反倒觉得不如以前的开发高效、简易，那么是很难去说服开发人员接受它的，就拿现在基于JAVA的web框架来说，为什么现在很多的web系统不是基于java而是基于php、asp.net等，就技术来说Java的Web框架不会比他们差吧，但为什么呢？就是基于java的web框架实现web系统不够方便，对开发人员的要求比较高，而且效率也比不过基于php、asp.net，当然，这个另一方面是很多的web应用系统真的非常小而且非常简单，很多都是普通的CRUD操作，想想现在基于Java的web框架，N多都是N层架构体系，在开发一个CRUD操作往往涉及到N个层次代码的编写，即使N多的JAVA人员可能会认为那很简单，因为层次职责清晰，开发起来也挺简单什么的，但我想对这个对比起数据驱动的方式进行开发确实是更为复杂了，而且由于层次很多时候会让开发人员难以理解，这个也许是基于Java的框架需要值得思考的地方的吧，很多人都说microsoft就是会讨好开发人员，但如果要做框架级的东西的话要讨好的就是开发人员呀，客户才是上帝嘛。<BR>其实框架也要看面对什么样的开发人员，而且是要看开发人员是做些什么类型的项目的，如果那个项目对于系统的维护性什么并没有特别的要求，而且又比较简单，基本没什么业务逻辑，需求又相对比较固定、范围小的话，我想对这样的情况而言基于Java的框架真的不那么适合，或许可以做一个简化版的JAVA框架更适合这样的需求，或许就是在做这样的JAVA的框架的时候真的值得思考，考虑这样的实现方式，maybe mda is a good solution，^_^<BR>还是那句话，架构要贴近需求，这个才是重点，框架软件的架构则更需要考虑开发人员的易用性，^_^，此时要对框架所面对的客户(也就是开发人员)的项目进行充分的了解，并了解他们现有的开发模式。<BR><BR>ps：说点实际的，举例现在在JAVA界的主流Web技术架构：MVC+Domain Model(Service Facade+Domain Object)+Persistent Layer，在这样的技术架构中写一个CRUD通常要涉及到非常多，比如编写PO，采用ORM的话还得用工具生成xml，同时编写DAO、Service Facade，在这样情况下的Service Facade其实真的是毫无意义，呵呵，变成了无意义的一个层，而且增加了开发人员的工作，得考虑考虑解决方法，也许基于Domain Model去自动生成DAO、Service Facade是个方法，^_^，大家在这种情况下会怎么做呢？？呵呵，反正我觉得这样的情况下MDA确实是一种不错的解决方法。<img src ="http://www.blogjava.net/BlueDavy/aggbug/20830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-21 21:04 <a href="http://www.blogjava.net/BlueDavy/archive/2005/11/21/20830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>思考插件架构体系</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/11/15/19820.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/19820.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/11/15/19820.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/19820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/19820.html</trackback:ping><description><![CDATA[<P>插件架构体系是我一直就非常关注的内容，其实插件架构体系的发展已经有很久的背景了，插件架构体系的优点我们也是能看的非常明显，象硬件一样的即插即用、无论对于公司还是业界而言的良好的积累方式、为公司或业界提供统一而规范的开发方式以及稳定的内核架构等等，这些优点无论对于公司还是业界来说都是非常重要的。<BR>插件架构体系基本的一个概念就是基于松散的模块积累方式，通过新增插件以及扩展原有插件的方法来完成系统的实现，凡事有利必有弊，在看到插件架构体系的这些优点的同时，在实现和使用插件架构体系的时候仍然会碰到不少的问题，我大概的整理了一下，主要有：<BR>1、插件的定义<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插件的定义可谓是插件架构体系在使用时会碰到的最大的问题，首先要解决的问题就是何谓插件、插件如何去定义？何谓插件这个大家的看法都会有所不同，由于对于何谓插件的看法不同，必然就导致了在整个系统的设计时采用了不同的设计方式，主要是在插件的粒度控制上会有不同的设计方式。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个人觉得也许采用模块作为插件是一种可行的方案，采用模块作为插件的核心思想是按一种从顶至下的设计理念，也就是架构设计中产生的模块视图首先作为系统的插件构成视图，根据对模块的详细设计此时又可对模块的插件进行细一步的划分，或者是将插件划的更细，或者是采用插件的扩展机制去实现。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插件的定义则是带来了一些设计上的难度的，我仍然觉得需要将插件视为黑盒去看，插件需要提供什么样的功能、插件需要什么样的运行环境、插件需要暴露哪些包等等，这个在Osgi中都有相应的映射，在基于插件架构体系进行系统构建的时候插件的粒度、定义我觉得这是最难把握的，甚至觉得难度上会超过以前的模块设计，需要的是更为规范的模块式的设计，觉得这个在中小型软件企业中往往是很难做到的，主要仍然是架构设计时的控制，在设计时重要的因素在于保持系统的松散结构，至于概要设计时则完全可按照架构设计的约束去进行，详细设计则完全和平时的做法一样。<BR>2、插件的依赖<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插件的依赖主要有两种，一是对于系统已有插件的依赖，另一方面则是对于外部jar包的依赖。这都是在设计时需要做出考虑的，对于插件架构体系而言对已有插件的依赖和对外部jar包的依赖这个差别就比较大了，其实这个在设计上还好办，因为可以通过重构，本来一直依赖觉得最困难的是对其他插件的依赖怎么办，难道要去引用其他plugin的lib，在eclipse ide中是解决了这个问题的，所以现在来说插件的依赖在插件体系架构中就显得没那么困难了，这说明插件的依赖的解决依赖于一个良好的插件开发IDE。<BR>3、插件的测试<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插件的测试我这指的不是运行的功能测试，而是单元测试，感觉这个在现在的插件架构体系里还是比较困难的，因为在一种松耦合的架构体系中，对于其他插件的依赖是要在容器运行期才能够获取的，觉得这个有点变成了当时ejb container的问题，现在好像得通过mock以及其他的方法去解决，另外一个也许是IoC的策略？这方面需要进一步思考，<BR>4、插件的调试<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 插件的调试主要是依赖容器的调试，现在的eclipse ide已经支持插件的调试，并且好像是支持插件的远程调试的。<BR>5、插件开发学习的门槛<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就目前来说插件开发学习的门槛并不算低的，个人觉得至少要对插件体系架构有一定的了解(例如基于Osgi的插件框架，那就要求对OSGI有一定的熟悉)，但相对这个门槛而言，其获得的价值是值得的。<BR><BR>其实讲了这么些问题，集中的主要在于基于插件架构体系的应用框架以及业务系统的设计方式将和以前的会有些变化，这个也是可以理解的，毕竟是受技术架构约束的，另外一方面则主要集中在插件开发的简易性和质量的保证，这个就得依靠一个强大的插件开发IDE。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/19820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-15 11:09 <a href="http://www.blogjava.net/BlueDavy/archive/2005/11/15/19820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需求是来源</title><link>http://www.blogjava.net/BlueDavy/archive/2005/11/14/19744.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Mon, 14 Nov 2005 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/11/14/19744.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/19744.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/11/14/19744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/19744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/19744.html</trackback:ping><description><![CDATA[<P>凭空构造的技术框架是没有意义的，技术框架从何而来，是需要从需求而来的，尽管现在业界很多人都会觉得选用一个大众普遍接受的框架应该就是好的，但其实不一定，毕竟每个框架都有它自己独特的适用场合，何谓适用场合呢，那就是需求了。<BR>技术框架诞生于需求，只有在对需求(业务需求、愿景)进行分析、抽象下才能提出业务方面的需求，此时再结合技术需求共同构成了技术架构以及业务架构，整个框架才得以产生。<BR>没有需求的东西永远都是没意义的，首先要明显自己到底要做什么.........<BR><BR>^_^，感觉就是胡扯了几句，随意有感而发而已，等有空的时候再好好的来整理一下这篇东西</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/19744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-14 17:37 <a href="http://www.blogjava.net/BlueDavy/archive/2005/11/14/19744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>权限模型</title><link>http://www.blogjava.net/BlueDavy/archive/2005/11/08/18714.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 08 Nov 2005 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/11/08/18714.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/18714.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/11/08/18714.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/18714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/18714.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><SPAN lang=EN-US style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Arial; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-weight: bold"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; mso-outline-level: 1" align=center>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P><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'">&nbsp; </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>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">几乎在所有的系统中对于权限控制都有直接的需求，而这类需求往往有其相似性，综合常见的对于权限系统的需求构成了本文档，文档主要从功能复用以及模型复用的角度来对权限系统进行总结，以便在各种系统中可对照此篇文档来进行权限系统的实现，考虑到文档的关注点在复用度，在文档中不会过多的去描述功能点到模型产生的过程，而是采用直接通过产生的模型来说明基于此模型如何实现功能点的需求。</SPAN><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%; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l2 level1 lfo1"><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'">&nbsp; </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 21pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">功能复用相当于此权限模型适合的上下文场景，此权限模型在功能点方面的考虑主要有以下三个方面：</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l1 level1 lfo2"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统权限以角色为基础，即以角色来进行权限的分配以及授予，角色分配给用户以使用户可获取相应的权限，角色通过授予权限来获得该角色所对应拥有的权限。</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">角色的权限可继承，即子角色自动继承父角色的权限。</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限的包含与排斥，包含举例来说就是权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">A</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可包含权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，体现出来即为拥有权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">A</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即自动拥有了权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而排斥举例来说就是角色不可同时拥有权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">A</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l1 level1 lfo2"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">(</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">)</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统资源操作的控制在系统上主要分为两个方面：</SPAN><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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正常途径系统资源操作的控制</SPAN><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 60pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">体现在实际的需求上通常是菜单、按钮、链接根据用户所在角色的权限的可见性。</SPAN><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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">非法途径系统资源操作的控制</SPAN><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 60pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">体现在实际的需求上是防止通过非法的</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">URL</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或命令等方式对系统受保护的系统资源进行操作。</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l1 level1 lfo2"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源操作的控制在系统中实际的体现通常是用户只能访问相应数据资源操作权限范围内的数据，如在一个站点中有栏目</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">A</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">C</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用户</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">M</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只拥有对</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">A</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的访问权限以及对</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的管理权限，那么在用户</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">M</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">访问系统时站点中应该只列出栏目</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">A</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和栏目</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，同时在栏目</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上拥有相应的管理按钮或链接。</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源也需要支持权限继承的模式，即当数据资源本身构成了需要继承的父子关系时，子自动拥有父的所有权限，举例来说就是站点和栏目，栏目自动拥有站点的所有权限。</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源的权限也是需要有包含和排斥的支持。</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源操作权限的授予通常需要的授予给多种对象，如用户、角色以及组织机构等。</SPAN><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%; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l2 level1 lfo1"><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'">&nbsp; </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 21pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于以上的功能点，提出了相应的解决方案构成如下模型：</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l0 level1 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于角色的用户安全管理</SPAN></B><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RBAC</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">构成实现功能点的模型，如下：</SPAN><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; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><SPAN lang=EN-US><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></SPAN></P>
<P class=MsoCaption style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT size=2><SPAN style="FONT-FAMILY: 宋体"><IMG height=279 alt=系统资源权限模型.jpg src="http://www.blogjava.net/images/blogjava_net/bluedavy/系统资源权限模型.jpg" width=332 border=0><BR>图表 </SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-no-proof: yes">1</SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体"> </SPAN><SPAN style="FONT-FAMILY: 宋体">基于<SPAN lang=EN-US>RBAC</SPAN>的系统资源权限模型<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; 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 60pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同时需要的是资源以及操作的维护，资源上配置的主要为功能模块的一些相关信息，如名称、描述等，操作上配置的主要为功能模块所需要受控的操作，如对功能模块的访问、保存动作等，此处的关键在于配置操作所对应的命令，在</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'">体系中通常是</SPAN><SPAN lang=EN-US>URL</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在</SPAN><SPAN lang=EN-US>C/S</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">体系中有可能是</SPAN><SPAN lang=EN-US>Command</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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; 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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; 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 60pt; 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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l0 level1 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">(</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; 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="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">)</SPAN></B><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作的控制</SPAN></B><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统资源操作的控制基于图表</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">1</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的模型而得以实现。</SPAN><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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正常途径系统资源操作的控制</SPAN><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 60pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此时通常的做法是在菜单、按钮、链接这些显示之前做对应的资源操作权限的判断。</SPAN><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 60pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">判断的方法为获取用户所在的角色，判断用户角色是否有进行资源操作的权限</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">(</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同时需判断权限的包含的问题</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">)</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如无则递规获取用户角色的父角色是否有进行资源操作的权限。</SPAN><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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">非法途径系统资源操作的控制</SPAN><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 60pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于非法途径对系统资源操作的访问，通常的实现方法为在具体的对象执行前做截断处理，通常采用</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Proxy</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Interceptor</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式。</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l0 level1 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><B style="mso-bidi-font-weight: normal"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源操作的控制</SPAN></B><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源操作的控制则难以基于上面的权限模型进行实现，需要对其进行扩展，产生的实现需求的模型为：</SPAN><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; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><SPAN lang=EN-US></SPAN></P>
<P class=MsoCaption style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><FONT size=2><SPAN style="FONT-FAMILY: 宋体"><IMG height=336 alt=数据资源权限模型.jpg src="http://www.blogjava.net/images/blogjava_net/bluedavy/数据资源权限模型.jpg" width=727 border=0><BR>图表 </SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体"><SPAN style="mso-no-proof: yes">2</SPAN></SPAN><SPAN lang=EN-US style="FONT-FAMILY: 宋体"> </SPAN><SPAN style="FONT-FAMILY: 宋体">数据资源权限模型<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><SPAN lang=EN-US><SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; LINE-HEIGHT: 150%"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在进行数据资源操作权限的授予时维护权限授予模型，同时需要根据数据资源操作权限的授予同步校验权限模型</SPAN><SPAN lang=EN-US>(</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此时需要考虑权限的继承、包含的问题</SPAN><SPAN lang=EN-US>)</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 60pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 60.0pt; mso-list: l0 level2 lfo3"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 60pt; 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 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l2 level1 lfo1"><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'">&nbsp; </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 21pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在文中提及的权限模型确实可以实现功能需求，但其在开发过程中以及应用过程中通常有这样的问题：</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l0 level1 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统资源操作控制时权限校验的低效</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常的解决方案是</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">cache</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机制。</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l0 level1 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据资源操作权限授予的低效</SPAN><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 39pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; tab-stops: list 39.0pt; mso-list: l0 level1 lfo3"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">n<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">权限系统对于原有系统的侵入性</SPAN><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 39pt; LINE-HEIGHT: 150%"><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常的解决方案有</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Proxy</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Interceptor</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">AOP</SPAN><SPAN style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</SPAN><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P>
<P><BR>ps: 这篇相对于我之前的漫谈权限系统系列的文章来说相当于只是个抽取和归纳，详细的还是得看那个系列的几篇文章。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/18714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-08 11:49 <a href="http://www.blogjava.net/BlueDavy/archive/2005/11/08/18714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用组件的黑盒式设计</title><link>http://www.blogjava.net/BlueDavy/archive/2005/10/21/16356.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Fri, 21 Oct 2005 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/10/21/16356.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/16356.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/21/16356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/16356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/16356.html</trackback:ping><description><![CDATA[<P>以黑盒的思想去做通用组件的设计才能达到真正的效果，这个道理其实大多数人都是知道的，只是到了真正的抽象做通用组件的时候就不会那么想了，通用组件的要求主要是不对其调用者造成侵入，同样也不让调用者对其产生侵入，当成黑盒来设计有些时候会让你不自觉的就解决了这个问题。<BR>比如在设计一个通用的附件上传组件，首先要仔细分析作为附件上传这个通用组件来说对外它需要产生什么东西呢？通常来说需要的是它输出已上传的附件名、附件URL，而同样它所需要接受外部传入的也是已上传的附件名和附件URL，这样就构造出了附件上传组件这个黑盒，对于外部来说，需要了解的无非就是接口中参数的意义，其他并不需要关注，当然，附件这种通用组件比较简单，但这种思想同样可以引申到分页组件等。<BR>作为通用组件在考虑功能实现以外最重要的就是考虑侵入问题。<BR><BR>黑盒式的设计思想还可以应用在很多的场合中去，其实模块接口的定义同样也是如此的概念，此时的模块对调用者来说就是黑盒，I/O仍然是设计的要素。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/16356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-21 22:21 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/21/16356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CMS缓存实现的疑问</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/10/18/15786.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/15786.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/18/15786.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/15786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/15786.html</trackback:ping><description><![CDATA[<P>CMS中缓存显的至关重要，CMS中的缓存主要有静态缓存和动态缓存两种技术，但看下来现在觉得这两种也只是对于最终信息页面的缓存，现在的需求是：<BR>1、站点、栏目、信息列表的缓存。<BR>2、信息页面的缓存。<BR><BR>对于需求2使用动态和静态缓存的技术都可以较为简单的实现，但对于需求1则不同，需求1中的站点、栏目和信息列表是时时动态的，而且还有分页以及结合权限控制的问题，在这种情况下，用生成静态页面的办法是很难实现的，几乎就不可能，那么通常我们想到的第一种最为直接的方法就是借助数据库缓存来实现，就拿基于Hibernate的来说，Hibernate提供的缓存是对于PO以及PO关联的缓存，但同样是无法实现上述需求中所要的效果的，目前暂时还没想出什么好的解决方案，准备去翻阅一下jsr170，不知道是不是因为大家觉得对站点、栏目和信息列表做缓存没意义，诚然，站点和栏目列表可能本来就不会很多，所以缓存的意义不是那么的大，但信息列表缓存的意义则非常明显。<BR>分页以及结合权限控制是实现此缓存技术的难点，其实这个也可以引申到整个系统，成为系统级的缓存技术，如大家有这方面的经验，请不吝赐教！<BR><BR>列一个校验的场景：<BR>在一个信息列表中，每个信息的权限有多种情况，比如信息列表中存在A、B、C三条信息，各条信息的权限授予给了(guest,admin)、(guest)、(admin)，这个时候要获取guest的信息列表，加入cache需要提高效率的地方就在于避免获取信息列表时需与数据库进行实时的查询，同时要注意，一般来说，系统的信息数据量会是比较的大。</P><img src ="http://www.blogjava.net/BlueDavy/aggbug/15786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-18 10:36 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/18/15786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>闲谈Domain Model &amp; Transaction Script</title><link>http://www.blogjava.net/BlueDavy/archive/2005/10/15/15572.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sat, 15 Oct 2005 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/10/15/15572.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/15572.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/15/15572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/15572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/15572.html</trackback:ping><description><![CDATA[Domain Model对于大多数的人来说都不怎么的陌生，Domain Model作为实现业务层的两种重要方法之一，在PoEAA(企业应用架构模式)中得到Martin Fowler的大力推广，但个人觉得在Domain Model上的应用并不是那么的理想，这个还得从业务层实现的两种模式谈起，分别为Domain Model和Transaction Script，Domain Model的原则为采用Domain Object的方式来实现业务逻辑，使得业务逻辑得以聚合到对象本身，从本质上提升业务对象的可复用性，其优点就在于提升了业务对象的复用性和代码的整洁性，缺点则在于实现的难度较高，有一定的学习曲线；Transaction Script则为采用Script的方式编排业务逻辑，其优点在于实现起来简单，缺点在于代码中出现较多重复的业务逻辑块，在业务逻辑一旦变动时需要修改很多地方，降低了业务逻辑的复用性。<BR>其实个人看法是Domain Model为采用OO构成业务层模型的思想，而Transaction Script为采用面向过程构成业务层模型的思想。<BR>从需求分析开始谈起，在对需求进行OOA后，产生出系统的业务模型，通过OOD得到业务模型技术体系，那么在Domain Model很简单的就是将此业务模型技术体系进行Plain Object的实现，从此得到Domain Object，按照这样的逻辑Transaction Script其实是不应该会出现的，Transaction Script的产生当然是有它的原因的，在复杂的业务场景中需要通过多个Domain Object共同来完成业务功能的实现，而此时在设计不够良好的Domain Object模型的情况下很难通过Domain Object的协作来做到实现，需要在Domain Object的协作之外处理一些业务逻辑，这个时候Transaction Script就得以出现了，以Script的方式来协作Domain Object并同时补充其中的业务逻辑来完成业务功能的实现，其实这个时候已经可以看到，实现的方式确实是变简单了，但业务模型则被逐渐的拆离，在Domain Model中则强调Domain Object本身业务逻辑的实现，而业务层则通过引入一层薄Service作为对外的接口来提供业务场景的实现，此时的Service需要做的是调用Domain Object来完成业务场景的实现。<BR>Domain Object对应到业务模型，在结合了持久层来完成相应业务Object的持久，个人觉得ORM的引入在这部分使得Domain Object在需要完成持久的时候更加的优秀，Domain Object中通过注释标识出需要持久的属性，当然这是因为ORM工具需要通过这些映射来处理，这样在对Domain Object作持久操作时可直接的进行，这样的Domain Object就构成了系统的核心部分，业务模型构成系统的核心模型，这是需求符合体现的关键。<BR>至于View Object则由于其简单性很多时候必须构建，以保持View Layer的单一性以及只是View的性质。<img src ="http://www.blogjava.net/BlueDavy/aggbug/15572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-15 15:16 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/15/15572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限系统之结尾篇(开源产品、个人观点、知识体系)</title><link>http://www.blogjava.net/BlueDavy/archive/2005/10/14/15545.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Fri, 14 Oct 2005 12:17:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2005/10/14/15545.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/15545.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/14/15545.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/15545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/15545.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: 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'">&nbsp; </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 21.25pt; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">poweracl</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">acegi</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">poweracl</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ACL</SPAN><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><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; LINE-HEIGHT: 150%"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Acegi</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">JAVA</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">reference</SPAN><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><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; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Acegi</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">RBAC</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">reference</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Domain Object Instance</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">ACL</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Domain Object Instance</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Domain Object Instance</SPAN><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><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; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Acegi</SPAN><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><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; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Acegi</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Acegi</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Filter</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Interceptor</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">AOP Weaver</SPAN><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><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'">&nbsp; </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="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><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; LINE-HEIGHT: 150%"><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><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; LINE-HEIGHT: 150%"><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><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 42.25pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 42.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">1.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 42pt; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">B/S</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Filter</SPAN><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><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 42.25pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 42.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">2.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 42pt; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">UI</SPAN><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><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 42.25pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 42.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 42pt; LINE-HEIGHT: 150%"><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Proxy</SPAN><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><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">Before Interceptor</SPAN><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><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 42.25pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 42.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">4.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 42pt; LINE-HEIGHT: 150%"><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><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 42.25pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo2; tab-stops: list 42.25pt"><B style="mso-bidi-font-weight: normal"><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">5.<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></B><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></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 42pt; LINE-HEIGHT: 150%"><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><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 21pt; LINE-HEIGHT: 150%"><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><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'">&nbsp; </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 21pt; LINE-HEIGHT: 150%"><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><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; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center><SPAN lang=EN-US style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><o:p></o:p></SPAN></P>
<P class=MsoCaption style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><FONT size=2><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial"><IMG height=190 alt=权限系统.jpg src="http://www.blogjava.net/images/blogjava_net/bluedavy/权限系统.jpg" width=307 border=0><BR>图表</SPAN><FONT face=Arial> <SPAN lang=EN-US><SPAN style="mso-no-proof: yes">6</SPAN></SPAN><SPAN lang=EN-US> </SPAN></FONT><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">权限系统知识体系</SPAN></FONT><SPAN lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></SPAN></P><img src ="http://www.blogjava.net/BlueDavy/aggbug/15545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-14 20:17 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/14/15545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限系统之基于ACL的实现</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/10/13/15438.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/15438.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/13/15438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/15438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/15438.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 基于ACL的实现ACL介绍&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ACL全称Access Control List，在ACL中，包含用户(User)、资源(Resource)、资源操作(Operation)三个关键要素。通过将资源以及资源操作授权给用户而使用户获取对资源进行操作的权限，模型如下图所示：图表 1 ACL模型实现方案&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2005/10/13/15438.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/15438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-13 18:13 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/13/15438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限系统之技术策略以及基于RBAC的实现</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/10/09/15091.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/15091.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/09/15091.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/15091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/15091.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 根据上面的需求描述以及对需求的分析，我们得知通常的一个中小型系统对于权限系统所需实现的功能以及非功能性的需求，在下面我们将根据需求从技术角度上分析实现的策略以及基于目前两种比较流行的权限设计思想来讨论关于权限系统的实现。1.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 技术策略l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2005/10/09/15091.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/15091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-09 22:51 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/09/15091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限系统系列之概述、目的和需求</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/10/08/15004.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/15004.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/08/15004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/15004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/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'">&nbsp; </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'">本文根据对中小型应用系统的权限系统的需求进行阐述，并对通常用于实现权限系统的两种思想、技术策略以及技术实现方案进行描述，比较其优缺点，同时对开源类型的产品进行介绍，最后结合自己的实际经验介绍自己的实现方案以及碰到的难点。</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'">本文并不是什么理论化的文章，完全是实战型的总结和实战的讨论，至于理论请大家去参考更为专业的文章。</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'">&nbsp; </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'">此文的编写作为自己对于权限系统进行系统化的整理，毕竟权限系统是几乎所有系统中都需要的，但一直以来由于在权限系统上并没有什么通用的方案，所以几乎是</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'">多的人都实现了自己的一套，在此我也是抛砖引玉。</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'">&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">这里对于需求的描述都是基于自己工作以来实际项目需求的经验而综合的，如有遗漏之处欢迎大家补充，不过也希望大家明白范围，是指中小型系统，至于大型的企业系统从来就没做过，我也无从提出需求。</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><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'">系统中，首页列出不需登录可访问的信息，登录后则根据用户拥有的权限显示相应的菜单，在具体菜单对应的模块里根据用户的权限显示相应权限的按钮，同时显示当前用户可访问的相应的资源。</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>N</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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">，这个在实现了权限继承的系统中尤为突出；权限的包含主要指当用户拥有权限</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'">，实际的例子是当用户拥有管理权限时自动同时拥有访问权限。</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">对需求中列出的场景进行分析：</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; LINE-HEIGHT: 150%"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-spacerun: yes">&nbsp;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; 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; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p>&nbsp;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p>&nbsp;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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; LINE-HEIGHT: 150%"><SPAN lang=EN-US><o:p>&nbsp;</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'">根据对需求的分析，可以得出权限系统需要做到如下的功能：</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;</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'">在非功能性需求方面权限系统需要考虑如下几个方面：</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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: 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 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">
<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'">身份认证</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: 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'">判断操作主体是否具有对某资源进行某操作的权限。</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'">获取用户权限范围内的数据的功能，并提供全部获取和分页获取两种方式。</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: 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'">系统权限的授予模型决定了权限系统使用的易用与否。</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'">防止非法途径对于系统受保护资源的访问或操作。</SPAN></P></TD></TR></TBODY></TABLE></SPAN></P><img src ="http://www.blogjava.net/BlueDavy/aggbug/15004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-08 18:15 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/08/15004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫谈权限系统系列之目录</title><link>http://www.blogjava.net/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.blogjava.net/BlueDavy/archive/2005/10/06/14899.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/14899.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2005/10/06/14899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/14899.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/14899.html</trackback:ping><description><![CDATA[昨天没什么条理的写了昨天那篇文档后，今天想想觉得权限系统还是挺值得写写的，今天先大概的整理了下思路，准备按照以下的目录结构系统的对权限系统的实现进行描述和分析：<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'">&nbsp; </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'">&nbsp; </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'">&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;</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'">&nbsp; </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 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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%">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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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>&nbsp;</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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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%">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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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 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'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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'">&nbsp; </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'">&nbsp; </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><BR>ps：不过最近的工作非常的忙，这篇文档的进度可能会写的比较的慢，^_^</o:p></SPAN></P><img src ="http://www.blogjava.net/BlueDavy/aggbug/14899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2005-10-06 22:10 <a href="http://www.blogjava.net/BlueDavy/archive/2005/10/06/14899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>