四、软件构架设计
有了相同的功能设计、有了相同的数据库设计,不同的程序员依然能开发出不同的软件。而这些不同绝大多数是在程序上的不同,例如,命名不同、使用语句不同、算法不同、三层构架不同,可以说是半斤半两,难怪程序员之间相互看不起,都认为别人跟自己一样呢。其实当程序员水平上升到一定程度就会考虑到软件构架问题了。这个构架要比程序本身的技术实现要重要重要的多。
1、一般的权限管理
一般的权限管理并不关心程序的构架,无论是单一系统的权限管理、还是多系统权限管理,他们根据功能设计和数据库设计,将程序编出来就行了。最多考虑一下采用B/S还是C/S,最多考虑一下采用是C#还是JAVA?。稍好的程序员最多在程序内部考虑一下采用三层架构(界面层、逻辑层、数据层)还是不采用。
他们不关心构架主要原因:
1) 不清楚什么是构架。
2) 软件定位于单个系统,或多个系统,不考虑构架也能实现软件功能。
3) 自身编程水平还没有到达这个层面。
2、EOM权限管理
EOM则根据其定位,站在企业信息化整体的高度,所有应用系统都必须考虑软件的构架,否则无法实现其定位目标。就权限管理而言,由于权限管理定位于多企业多系统,则必然考虑到多企业多系统的现状。
1) 权限管理有两个版本:B/S和C/S。
2) 开发语言:C#,java或其他语言。
3) B/S和C/S公用相同的公共核心库和权限管理库,这些公共核心库和权限管理库都是标准权限管理模块,可供上层进行调用。
4) EOM提供两种权限管理方式,一个是系统方式,即完整的权限管理系统,另一个是标准模块方式,即可以向用户提供标准的权限管理功能,用户可以根据这些功能结合自己的界面形成自己的权限管理系统。
5) 权限管理即可以在企业内网运行,也可以在互联网运行。
6) 程序实现界面和处理的分离,所有处理都放在公共核心库和权限管理库之中,可以通过两种形式DLL或WebService来调用。
7) 程序采用参数多形式方式实现参数化:数据库、文本、XML等。
8) 通过参数化和接口方式实现特殊权限管理的需求。
附图:
1、现行企业权限管理示意图:
2、EOM权限管理系统架构图
3、EOM的权限管理系统和标准权限管理模块
4、企业内部多系统状况下的EOM权限管理示意图
5、多企业EOM权限管理示意图。
6、EOM特殊的权限管理处理示意图。
7、权限比对函数(部分)
此程序仅供参考,仅反映了软件的构架。
用户可以在界面一开始的时候,进行功能权限的比对
例如,在901系统中的003001001功能进行权限比对
If(Check_authority(“
Return 0;
用户可以在界面中的某一操作时候进行比对。
例如,在901系统中的003001001功能中进行001001001操作的比对。
If(Check_authority(“
Return 0;
private void check_authority(String appsys,String fucntion_code,String op_code)
{
int s=0;
string usr_name=get_usr_name();
string authority_mode = eomlib.get_sysparameter("authority_mode");//取系统参数
string aurthority_dll = eomlib.get_sysparameter("authority_dll");//取系统参数,参数中含DLL名和函数名,中间用逗号分开。
string authority_url = eomlib.get_sysparameter("get_authority_url");//取系统参数,参数中含URL名和函数名,中间用逗号分开。
switch(authority_mode)
{
case "eom":
s=eomlib.check_authority(usr_name,appsys_code,function_code,op_code);
break;
case "url":
s=iasglib.call_webservice(authority_url,usr_name,appsys_code,function_code,op_code);//调用外部webservice
break;
case "dll":
s=iasglib.call_dll(authority_dll,usr_name,appsys_code,function_code,op_code);//调用外部DLL
break;
default:
break;
}
return s;
}
private string get_usr_name()
{
return publicdata.usr_name;//用户名在用户登陆时被保存在公共变量publicdata之中
}
//--------------------此处为权限管理的WebService 的函数-----
[WebMethod(EnableSession = true)]
private int check_authority(string usr_name,string appsys_code,string function_code,string op_code)
{
return eomlib.eom_check_authority(usr_name,appsys_code,fucntion_code,op_code);
}
//--eomlib---此处为EOM公共库函数,其包含了权限管理的功能----------------------------
private int eom_check_authority(string usr_name,string appsys_code,string function_code,string op_code)
{
int s;
if(op_code.Trim().Length==0)//当操作代码为空的时候,表示只检查功能代码,反之检查操作代码。
s=check_function_authority(usr_name,appsys_code,function_code);
else
s=check_opertion_authority(usr_name,appsys_code,op_code);
return s;
}
private int check_function_authority(string usr_name,string appsys_code,string function_code)
{
int s=0;
string role_mode=eom.get_sysparameter("role_mode");
if(role_mode=="Y")
s=check_authority_with_role(usr_name,appsys_code,fucntion_code);
else
s=check_authority_with_function(usr_name,appsys_code,function_code);
return s;
}
private int check_authority_with_role(string usr_name,string appsys_code,string fucntion_code)
{
int s=0;
string role_name=get_role_name_with_usr_name(usr_name);//从用户角色表中查询出角色
string[] fucntion_code_tab=get_all_function_with_role_name(role_name);//按照角色将所有的功能代码都取出来。
foreach(string function_code in fucntion_code_tab)
{
s=check_function_with_usr_name(usr_name,appsys_code,fucntion_code_tab);//对用户功能表按照系统、功能、用户三个字段查询,查到且权限标志为1则返回1,否则返回0
if(s==1)
return s;
}
return s;
}
总结陈词
通过对权限管理一个典型的程序剖析,大家可以看到,用EOM来构建一个程序的基本流程。这流程是:首先关注权限管理在企业经营管理的中地位和作用,第二,给权限管理一个多企业多系统的定位,第三,给出权限管理的功能设计,第四,给出权限管理的数据库设计,这个数据库设计是站在EOM高度对权限管理的各元素的抽象,并共享其他相关的标准信息,第五,为了实现权限管理的定位,对软件进行了构架的设计,这个构架可以实现多企业多系统的权限管理的要求,也满足单企业多系统,即满足互联网也可以满足局域网,即可以满足B/S也可以满足C/S的各种选择。第六,就是按照以上五个部分用程序实现就行了。(程序实现并没有太多的难度的)。
EOM是一个全新的企业信息化的思路,它拓宽了程序员的视野,它所强调的企业经营理念,程序的定位,程序的抽象数据库设计,程序的软件构架,都将给程序员带了更多更深入的思考。