创新谈-张宪伟

来源:互联网 发布:js下拉列表 编辑:程序博客网 时间:2024/04/28 23:21

(创新性应用:)

    从所参与的项目来看,中创软件在RBAC权限构件化和展示标签化两个方面的应用应该是比较创新的,在新汶矿业集团煤炭营销管理信息系统、中铁集装箱箱管系统两个项目中得到充分发挥,并得到了用户和开发人员的认可。

权限的构件化。我们知道现在所做的应用系统中,都会对权限做出明确的要求,对资源的访问是有严格限定的。中创软件开发了一个基本角色管理的rbac构件,可以满足这样的权限管理要求。下面简单介绍一下rbac构件:

一)、   实体对象概述。

rbac中重要的实体对象有5个,分别是:group()user(用户),resource(资源)permission(许可),role(角色)

在系统中应用如图:

(其中机构管理指的是对组进行维护管理)

二)、   实体对象关系描述。

1.一个用户、资源、角色应该属于某一个组,通过groupId字段与某一个组关联。当一个组被删除或置为无效时,该组内所有的用户、资源、角色将被删除或置为无效。

对应的表有rbac_group,rbac_role,rbac_resource,rbac_user;

2.一个许可(permission)应该属于某种资源,通过resourceId字段与某一种资源关联,当某种资源被删除或置为无效时,相应的许可也会被删除或置为无效

对应的表有:rbac_resource,rbac_permission.

三)、   实体操作。

rbac中核心的操作有:

1.    给角色授权

即给角色授予或撤销某些访问许可(permission)(主要针对资源来说),

对应的表有:rbac_role_permission,该表纪录哪些角色拥有哪些许可。

在系统中应用如图:

2  给用户授权

给用户授予或撤销某些角色(role

对应的表有rbac_user_group_role

在系统中应用如图:

3  组间授权:

即将某个组拥有的角色授给另一个组

对应的表有:rbac_group_group_role

在系统中应用如图:

四)、   组件的配置 (J2EE项目为例)

按照下面的步骤将本组件配置到你的WEB应用中。

      具体配置步骤如下:

1.配置数据库

     在数据库中建立权限所需要的表。

2.应用系统的WEB应用中配置信息发布

 

展示标签化(特指与J2EE相关的项目)。

在实际的应用中可能有这样的需求,需要将数据库中某个表的结果展示出来,以供用户来选择其中某个值,如果在系统中存在大量此类型的需求,那么用标签来实现将是一不错的选择。

下面来介绍一下中创软件的参数标签构件:(从如何使用角度来说明)

一)、   构件简介。

1.代码或标识到名称的转换,在展示时显示的是名称,后台获取到的是代码或标识

2.级连标签的使用:在实际应用中当某一个html元素的值发生变化时影响另外一个html元素的值,典型的情况包括如下几个方面:

输入代码,过滤或定位select元素中某个值

    选择某一Select,根据选择的值过滤另外一个Select的值

    有时级连关系为多级级连

3. WEB项目中的很多内容存储的为代码,展示名称在程序中写死,往往带来系统拓展方面的问题,如增加一个参数项目往往需要修改程序代码。

上面列举的三个方面,是中创软件开发参数标签构件的目的。

二)、   构件使用。

1参数标签的配置

把配置文件parameters.xml放在WEB-INF/classes下,修改配置文件。

1)参数项的值保存在数据库中,需要sql语句获得值的参数标签的配置方法 <entry key="rbacgroup">

        <bean

class="com.cvicse.parameter.SQLParameterConfig">  //配置对象类名

           <property name="managerClass">

<value>com.cvicse. parameter.SQLParameterManager</value>//管理对象类名

                                          </property>

                                          <property name="dataSource">

                       <value>jdbc.default</value>

                                          </property>

<!—SQLParameterManager 对应的SQL String-->

                                          <property name="sqlStr">

                                                 <value>select id,code,name,’’,’true’ from rbac_group</value>

/*注意:sql中这五个字段必须要有,而且必须按照现在的顺序。

id表示结果集唯一标识字段(在参数标签中表现为标识),code表示结果集的代码字段(若表中不存在code字段,可以把code设为id或者为’’,name表示结果集的name字段(在参数标签中表现为名称),第四个字段是filter字段,该字段主要在级联标签中,filter的值一般为上级标签的id。第五个字段表示该行数据是否有效。*/

                                          </property>

                                   </bean>

                            </entry>

 

2参数标签的使用

参数标签使用说明

参数输入标签:parameter:text, 参数手工输入的标签。

 

名称

 

是否必输项目

是否可以使用jsp表达式

说明

type

参数类型

True

False

parameter.xml中配置项内的entry的键值对应,详见配置文件说明

name

对象名称

True

False

标识page/request/session/application上下文中通过setAttribute方法设置的对象的名称。该属性与property属性一起组合取得page/request/session/application中的对象的属性值

property

对象的属性名

True

False

标识,属性标识对象的属性名。该属性与name属性一起组合取得page/request/session/application中的对象的属性值

styleId

生成Html:input元素的标识

True

True

 

maxlength

生成input元素的最大长度

false

true

输入框的最大长度

size

生成input元素的尺寸

False

true

输入框的展示尺寸

notifier

通知标签对象的标识

False

True

通知数据进行变更的HTML元素的标识。

next

下一光标锁定的HTML对象

False

True

在按回车时,光标跳转的下一HTML元素的标识

示例:

<parameter:text name="test" property="id" styleId="testtest" next="testtest2"  maxlength="2" size="2"/>

 

(行业借鉴经验:)

   从所做的几个项目来看,走构件化之路可以为企业在竞争中增加筹码;遵循业界常用的先进的则可以减少我们走弯路的机会

走构件化之路。

构件技术,可以用来解决软件复用,通过开发可复用构件和使用可复用构件开发,可以使软件企业提高生产率,降低生产成本,增强竞争力。同时采用构件化把软件作坊式的开发变成基于构件复用组装的生产线式的开发,从技术角度来推动软件产业的发展。

开发原则。

用例驱动的软件开发模式,

通过用例实现对涉众关注点(功能需求、非功能需求或系统的设计约束)的理解和捕获;

运用面向方面的思想-使关注点保持分离,

使横切关注点保持分离,

使对等关注点(用例之间没有关联,是独立和相互分离的用例,但它们的实现和引入的职责却交织于相同的类中)保持分离,避免缠绕和分散;

采用迭代和增量的生命周期模型,

每个迭代周期完成以下工作,

寻找用例并详细说明,

设计每个用例,

设计并实现每个类,

测试每个用例。

 

 

(应用难点技巧:)

    下面列举了一些我所参与项目开发中,遇到的典型问题及解决方案:

1.       Oracle数据库varchar2数据类型存储精度问题,解决方案:更换jdbc驱动包

2.       SQL的优化问题:

1)        通过ROWID访问表.开发中可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息,ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高

2)        where条件中尽量减少使用常量比较,改用宿主变量,也就是使用绑定变量(采用Hibernate的模块不用考虑);ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾;ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表;在ORACLE中使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表

3)        Bind Variables。在SQL语的处理阶段中,第一阶段分析(parse)是与Bind Variables密切相关的一个步骤。在分析阶段,SQL语句从用户进程传递到服务器进程,服务器进程根据语句每个字符的ASCII值对数据进行散列(hash),然后在共享池中搜索SQL语句的副本。如果该SQL语句在散列地址中不存在,则需要进行硬解析,即服务器进程对SQL语句进行语法检查、对象解析和权限检查,执行成功后建立分析树和SQL语句的执行计划,如果在散列地址中存在,则重用已存在的分析树和执行计划,即软解析,显然软解析的效率更高。

4)        借助工具来查看、分析SQL的性能。在DB2中可以借用自带的“存取方案”功能来看SQL的性能;在oracle中可以将其自带的自动统计功能打开(sql*plusset autotrace on)。也可以借用外部工具。

 

 

 

 

 

 

 

 

参考文献:

1 rbac实体关系中创软件内部文档

2权限配置说明中创软件内部文档

3参数标签构件使用手册中创软件内部文档

4《中国计算机报》上海构件化系列报道

5 oralce_sql性能优化(来自www.itpub.net网站)

 

文章请同时提交信箱:bestdba@ciw.com.cn  mulibox@yahoo.com.cn