面向动作编程.docx
- 文档编号:3243758
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:32
- 大小:168.86KB
面向动作编程.docx
《面向动作编程.docx》由会员分享,可在线阅读,更多相关《面向动作编程.docx(32页珍藏版)》请在冰豆网上搜索。
面向动作编程
面向动作编程(AOP)框架-后台编程指南(LeeBai2002.6)
1、面向动作编程AOP(ActionOrientedProgramming)概念
Web应用程序的本质是一次次的HTTP请求,这些请求可以分为两类,一类是请求静态信息(页面、图片、js)、一类是请求后台程序。
在“中客户”模型中,我们已经定义:
请求后台程序的返回只能是数据,而不包含任何页面显示特性,同时每次对后台程序的请求都是纯粹的业务逻辑请求,即要求后台程序对状态数据(一般为数据库)做增、删、改、查操作。
在本框架中,对后台程序的这种纯业务请求称为动作(Action),前、后台程序都是以动作为中心,前台程序用参数调用动作,然后响应动作完成事件并从中取得返回数据;后台程序从请求中取得参数并执行动作,然后返回数据并激活动作完成事件。
每个动作都是一个完整的事务。
这种Web程序模型称为面向动作编程(ActionOrientedProgramming)。
本框架提供了一些封装好的工具,使开发人员能够专注于动作业务逻辑的开发(对后台)和用户界面流程的开发(对前台)。
其中最主要工具是自动动作:
业务开发者只需编写SQL语句就可以定义一个动作,而不需要java编程。
如果业务特别复杂,则可以通过编程动作完成,这时框架提供请求参数解析、返回数据封装、自动SQL等功能,使代码尽可能简洁明了。
对后台最终业务程序来说,根据经验,绝大部分动作可以用自动动作,只有少数动作为编程动作,因此开发效率可以大幅提高。
此外,框架还提供了取库连接和事务处理、错误处理、权限控制、日志等公共功能。
图:
AOP编程框架与最终业务程序的关系
init_()
destroy_()
modiObject()
……
@getObject
@addObject
……
return
(data)
action
(paras)
onerror
Servlet.java(继承ActionServlet)
Page.html(嵌入systemnew.js)
Server端框架:
ActionServlet
Client端框架:
systemnew.js
on-action()
__(data)
page
action
(paras)
2、AOP编程框架后台框架程序构成
后台框架程序由基本功能支持类、面向动作编程支持类、权限管理支持类以及一个系统配置文件system.properties构成,这些类在com.deepsoft.system包中,业务程序开发者在使用之前需先导入该包。
如果要使用框架提供的权限管理功能,则还要在数据库中建立相应表格和视图(详细使用见《面向动作编程框架安全模型》文档)。
图:
框架程序类结构(该图只显示与业务程序开发有关的方法接口):
在这些类当中,业务程序开发者一般只需关心ActionServlet、Authority两个类,在少数的情况下会使用Log、DBConnector两个类,其他类由系统内部使用(虽然它们也有暴露Public方法,但那是为了适应已有老业务程序的需要,请新程序不要使用)。
◆Authority类的使用请参考《面向动作编程框架安全模型》文档。
◆Log类主要提了以下两个静态方法来写运行日志和错误日志(根据系统配置文件的可选的指定,框架自身已对每次动作请求、每次自动SQL执行做了详细运行日志,对程序运行错误做了错误日志,因此除非用于程序调试,业务程序一般不需要自己写日志)。
publicstaticvoidwriteErr(Stringwho,StringlogInfo);
publicstaticvoidwriteRun(intlevel,Stringwho,StringlogInfo);//level说明见系统配置
◆DBConnector类主要提了一个静态方法来取得数据库连接,由于每个动作请求的程序入口处框架已经提供了一个连接供业务程序使用,因此业务程序一般也不需要自己取连接。
publicstaticConnectiongetConnection();
◆ActionServlet是AOP框架的核心,下一节展开描述。
◆system.properties是AOP框架的系统配置文件,各参数含义如下。
在使用AOP框架进行业务系统的开发之前,请根据实际情况修改本配置文件。
###杂项参数=============================
#当前系统是否在调试阶段(决定错误提示显示什么内容)
#提交用户时设为false、否则为true
forTest=true
#出错时是否由后台程序直接给浏览器弹出错误框
#新程序应为true
scriptAutoAlert=true
#程序提交用户后,出错时错误提示框显示的系统管理员邮箱
adminEmail=admin@
#上传文件时限制的上传流最大容量(单位:
MB)
maxStreamSize=1
#http请求参数是否需要重新编码,对websphere不需要,其他服务器
#如出现汉字乱码则需要
reqParaNeedConverted=false
###日志配置参数=============================
#下面两条为系统日志路径
errLogFile=c:
\\error.log
runLogFile=c:
\\runtime.log
#是否每次动作请求都做日志
logAccess=true
#动作日志是否统计动作执行耗时
logAccessUseTime=true
#自动SQL执行时是否记录每个执行的SQL
logSQL=true
#运行日志详细级别,程序每次调用Log.writeRun()都要指定级别,
#只有程序指定的级别值小于下面的值的那些日志信息才被真正写入日志。
#减小该值可提高运行效率,但丢失有用的调试跟踪信息
runLogLevel=5
#是否程序每次写日志都直接写到文件,即无缓存
autoFlush=true
#每次应用服务器重启,新日志是否在旧日志上追加(否则覆盖)
append=false
###数据库访问参数===========================
#该系统是否使用数据库
useDB=true
#是否使用连接池,建议开发过程中设为false,提交用户时设为true
usePool=false
#是否使用驱动程序内置连接池(即不通过JNDI),仅Oracle
#目前已停用
useDriverPool=false
#以下为建立数据库连接时需要的参数
schema=aqsiq
user=aqsiq
password=aqsiq
##标准连接参数===========================
#以下为DB2、Oracle、Sybase的驱动程序和连接URL,请斟情修改
##DB2-----------------------
#jdbcDriver=COM.ibm.db2.jdbc.app.DB2Driver
#jdbcDriver=COM.DB2Driver
#url=jdbc:
db2:
CMS
#url=jdbc:
db2:
//200.200.200.220:
6789/cctvdb
##Oracle--------------------
jdbcDriver=oracle.jdbc.driver.OracleDriver
#url=jdbc:
oracle:
oci8:
@cms
#url=jdbc:
oracle:
thin:
@200.200.200.250:
1521:
cms
url=jdbc:
oracle:
thin:
@200.200.200.240:
1521:
orcl
##Sybase--------------------
#jdbcDriver=com.sybase.jdbc2.jdbc.SybDriver
#url=jdbc:
sybase:
Tds:
200.200.200.239:
5000/OEBMS
##池连接参数===========================
#jndiFactory=com.ibm.ejs.ns.jndi.CNInitialContextFactory
#jndiFactory=com.ibm.websphere.naming.WsnInitialContextFactory
#dataSource=jdbc/cms
#dataSource=java:
comp/env/jdbc/cmsdb2
###超级用户===========================
#用于数据库中系统管理员角色尚未分配给任何人员,无人有权对系统进行
#任何管理时;或者所有系统管理员忘记口令无法登录时。
xUser=leebai
为了维持单一版本的system包,业务程序开发者不要私自更改该包的代码(建议只使用该包的class文件),不要引用该包中申明为deprecated的方法,该包如有程序错误或者希望扩充功能,请与李柏青联系。
system包的最新版本在\\200.200.200.96\Deepsoft路径下,该路径是WSAD(WebSphereStudioApplicationDeveloper)的项目的应用根路径,包含java类(WEB-INF中)、页面、文档。
该路径的内容随时更新,请使用注意及时更新你的本地版本。
3、ActionServlet的继承和业务程序总体结构
◆开始业务系统开发时,请遵循以下步骤:
a.在VAJ或WSAD中新建一个该业务系统的项目(Project);
b.在该项目的编译路径中(或系统类路径中)加入com.deepsoft.system包的路径,或者导入该包的源代码。
导入com.deepsoft.user用户管理样例程序源代码。
c.根据实际环境更改system.properties,主要是数据库连接、日志路径。
d.(前端开发需要)复制Application路径下的commonjs(Client端框架)、system(权限管理界面)、user(用户管理样例程序界面)。
e.规划业务系统自己的包名,建议格式为“com.单位名.系统名”,在本框架中,因为由于业务程序文件很少,一般一个业务系统只需定义一个包。
多人开发也要求大家使用一致的包名。
f.(可选)在业务系统包名路径下建立名为“系统名.properties”的业务系统配置文件。
g.根据业务系统有几个大的业务模块,设计几个Servlet(一个Servlet最好只由一个人开发)。
Servlet统一由ActionServlet继承。
◆业务程序Servlet要实现的代码(类方法)
a.初试化(可选):
类似标准的HttpServletAPI,业务程序如果要在运行前做初始化工作,可以实现以下方法。
该方法中有异常请直接扔出。
publicvoidinit_()throwsException{…}
b.退出(可选):
类似标准的HttpServletAPI,业务程序如果要在运行后做资源清理工作,可以实现以下方法。
该方法中有异常请直接扔出。
publicvoiddestroy_()throwsException{…}
c.动作定义(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 动作 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)