《中国联通云门户-流程服务项目-开发及编码规范资料.doc》由会员分享,可在线阅读,更多相关《中国联通云门户-流程服务项目-开发及编码规范资料.doc(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。中国联通云门户-流程服务项目-开发及编码规范-中国联通云门户项目流程服务项目开发及编码规范中国联合网络通信集团有限公司2022/10/8-产权说明本文件中出现的任何文字叙述、文档格式、插图、照片、方法、过程等内容,任何个人、机构未经授权许可,不得复制或引用本文件的任何片断,无论是通过电子形式或非电子形式。文档信息项目名称:中国联通云门户项目项目经理:肖永威文档版本号:v1.1项目阶段:设计阶段文档版本日期:2012年12月120日起草人:张玉明起草日期:2012年12月13日评审人:评审日期:评审方式:
2、会议评审【】、邮件评审【】版本历史版本号版本日期作者说明v1.02012-12-13张玉明创建文档v1.12012-12-17张玉明修订文档,增加WS配置classpath增加流程建模复用组件配置及使用规范v1.22012-12-18张玉明增加4.5Identifiers数据提取v1.32012-12-18张玉明、刘彦利增加3.3.5方法集和命名空间v1.42012-12-20张玉明增加4.84.9节v1.52013-01-22张玉明增加3.3.7节目录1概述71.1目标71.2名词解释72功能设计72.1页面设计72.1.1页面设计一般原则72.1.2XFORM开发原则72.1.3菜单72.
3、1.4调试72.2数据库设计82.2.1原则82.2.2主键82.2.3关联82.2.4触发器82.2.5索引92.3流程设计92.3.1原则93项目构建与编码规范103.1项目开发工具一览表103.2开发资源及服务器信息113.2.1SVN服务器113.2.2CordysBOP4开发服务器123.3CordysBOP平台133.3.1测试环境租户建立规范133.3.2CWS项目构建方案133.3.3CWS项目项目开发注意193.3.4备份策略193.3.5方法集和命名空间193.3.6方法213.4编程公共命名223.4.1类命名223.5Javascript命名223.5.1类成员变量命名
4、223.5.2普通变量命名233.5.3类成员方法243.5.4普通方法243.6Java命名243.6.1类成员变量与普通变量243.6.2类成员方法253.6.3包命名253.7数据库命名253.7.1表和字段命名253.7.2主键命名253.7.3外键命名263.7.4视图命名263.7.5序列命名263.7.6存储过程命名263.7.7函数命名273.7.8触发器命名274技术实现274.1业务逻辑实现方案选择274.2页面284.3BPM324.3.1流程松耦合性324.3.2流程事务性334.3.3流程建模复用组件配置及使用规范344.4消息映射344.4.1消息结构344.4.2
5、消息删除354.4.3本地变量354.4.4子流程364.4.5并行处理364.4.6WebService/Method414.4.7JavaScript编码414.4.8JAVA编码424.4.9数据库连接474.4.10数据库连接474.5Identifiers数据提取474.6调试与测试484.6.1调试484.6.2Webgateway484.6.3WS-AppServer调试494.6.4NOM内存泄漏检测与调试494.7单元测试494.8开发工具整合494.8.1SubclipseSVN插件安装494.8.2CordysCoE插件584.8.3eclipse中安装tomcat插件5
6、84.9开发过程中性能及故障处理634.9.1限制流程实例中循环的最大数量634.9.2MySQL主从复制BinaryLog清理644.9.3EclipsePerformance644.9.4Cordys自定义认证类及BCPJAR路径配置651 概述指导云流程服务项目开发,提供设计、开发、编码的参考、执行规范。1.1 目标规范项目各环节实施、开发、编码规范,以及故障处理、调优问题汇总记录。此文档会在整个项目实施过程中不断维护,保持版本更新。1.2 名词解释CordysCWSRESTBinLog2 功能设计2.1.1 页面设计页面设计一般原则2.1.2 XFORM开发原则菜单菜单项应当赋予角色,
7、而不是直接赋给用户2.1.3 调试可以使用fiddler、httpwatch、firebug、IEdeveloperToolbar来对Http请求及JS脚本进行调试和性能调优。2.2 数据库设计2.2.1 原则数据库设计必须符合第一范式。数据库只保留基本逻辑约束,包括以下方面:l 主键l 主子表关联外键约束属性表不添加外键约束。所有数据库设计的内容体现在数据模型文档中,针对特定字段的约束体现在该字段的属性和注释中,需要特别说明的,可以在物理模型图中加Notes。注意:由于本项目中使用的是CordysBOP平台产品,在BOP中能够提供API来解决的或者可以通过查询平台系统表提取数据的,原则上不要
8、再增加新表来辅助设计和逻辑实现,以避免后期与应用耦合性过高。2.2.2 主键以单一整形或字符串类型字段做主键。2.2.3 关联当一个表通过外键引用另一个表时,往往主表的删除意味着相关记录的删除,如果确认这里的业务逻辑是正确的,而且没有其他的影响,可以使用“级联删除”选项来简化代码,但必须在相应的数据库模型上有所体现。同样的,“级联更新”也起到类似的作用。2.2.4 触发器对于一些简单的,基本业务无关的数据操作,可以使用触发器来实现:比如生成序列号。但业务相关的,复杂的逻辑,则避免在触发器中实现。2.2.5 索引2.3 对于查询频度远高于修改的数据表,或者需要经常对查询结果排序的表,创建相应的索
9、引。流程设计2.3.1 原则以详细设计为准,模型设计摘要如下。1.创建流程模型时修改流程的namespace,如下所示:2.泳道颜色使用双色交替,循环使用cordys提供的第1个颜色和第2个颜色,3.泳道间的间距1px4.泳道的长度要统一5.decision的描述用“.是否.”,条件描述为“是”“否”,摆放位置应在连接线的起始端,水平连线上方、垂直连线右侧,偏移位移在5px以内6.当decision的出口在3条或3条以上,根据实际业务情况进行描述7.活动节点间的连线,水平或垂直平行时用直线,除此之外用带直角的连线8.group组件上下边框应大于泳道边界1px,group的描述有实际的业务含义9
10、.流程中的组件大小用default。如果文字太多(超过50字时),可根据实际情况调整10.相同组件的大小在同一流程模型中保持一致11.流程的起始位置在上方,结束位置在下方循环中驳回节点尽可能共用,以减少驳回节点个数3 项目构建与编码规范本项目开发基于CordysBOP4.1平台进行开发。Cordys层使用SOAPWS进行服务开发,中间层使用RESTful的WS对外暴露资源和服务。REST风格的WS使用JbossResteasy作为框架的基础上进行开发,开发测试服务器使用ApacheTomcat7.0,JDK统一使用1.6,Eclipse需要eclipse-jee-juno版,并整合Cordys
11、CoE插件作为WS开发IDE。开发数据库使用MySQL5.5+,推荐使用5.5.19版,生产环境使用MySQLMaster/Slave模式,前端连接使用MySQLProxy模式进行JDBC连接。开发工程包DEMO中提供了Ant打包脚本,方便进行服务打包,第三方常用的lib库则都包含在EIPDEMO工程中,请避免使用其他版本的库。每个EIP服务的客户端是一个Jar文件,命名为XXX_impl.jar,最新的客户端jar文件以现网运行的版本为准。开发工程包请向开发人员索取。3.1 项目开发工具一览表平台:CordysBOP4.1Cu7MySQLServer:MySQLServerCommunity
12、5.5.19EclipseIDE:eclipsejavaeejunowithCordysCoEpluginSvnplugins:EclipseupdatesiteURL:http:/subclipse.tigris.org/update_1.8.xMySQLTools:NavicatforMySQL10.0.11enterpriseeditionWebContanier:ApacheTomcatv7.0WebBrowser:GoogleChrome最新版,MozillaFirefox,IE8+,推荐使用Chrome浏览器进行开发。SSH客户端:Xmanager3.0+,SecureCRT7.0
13、,推荐使用XME3.0,可以直接使用图形界面,FTP客户端:Xftp,FilezillaXML格式化工具:foxe(XML格式化工具)、XPathVisualizer1.3.0文本编辑工具:Notepad+6.223.2 开发资源及服务器信息3.2.1 SVN服务器1、项目开发服务器地址:https:/10.64.6.98:8443/svn/cloudbpm项目开发人员帐号,联系配置管理员获取。开发服务器管理员帐号:远程桌面:adminstrator密码:联系相关人员IP:10.64.6.98SVN客户端需使用TortoiseSVN1.7.*2、公司SVN服务器:项目根路径:http:/10.
14、64.8.160/svn/20121123/YMHLCFW/注意:本节以下所述SVN地址均相对此项目SVN根路径开发工程SVN地址: Cordys中CWS创建项目工程时绑定的SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-all Cordys中CWS中创建的Java代码在Eclipse中编辑时,需下载Eclipse工程,下载地址:00Developing/02code/cloudbpm/trunk/project/bpm-cws-java 项目基础类库开发的Eclipse工程SVN地址:00Developing/
15、02code/cloudbpm/trunk/project/bpm-common 项目REST服务开发的Eclipse工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-rest 项目java版本SDK开发的Eclipse工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-sdk-java 项目php版本SDK开发的工程SVN地址:00Developing/02code/cloudbpm/trunk/project/bpm-sdk-php类库Jar包发布地址 项目基础类库编译后j
16、ar包发布的SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-all/rest-ws/Java/JavaArchives/bpm-lib 第三方厂商-HP提供的类库发布的SVN地址:00Developing/02code/cloudbpm/trunk/projects/bpm-cordys-cws-all/rest-ws/Java/JavaArchives/hp-eip-lib开发工具下载地址00Developing/02code/cloudbpm/trunk/tools版本标签创建地址00Developing/0
17、2code/cloudbpm/tags/注意:各模块在模块目录下创建版本标签个人目录地址:00Developing/04personal每人的文件夹下有三个文件夹根据每天的任务,将相应的成果放到这三个文件夹里每天都得将当天成果放入文件夹中提交,并在svn备注中写明当天提交的是什么,多少个功能点3.2.2 CordysBOP4开发服务器CordysBOP4:服务器访问地址http:/10.64.8.149/cordys/位置:黑龙江集成公司按开发人员建立租户,在各自的租户下进行开发开放服务:SSHFTPMySQL数据库:数据库名:eipdb数据库地址:10.64.8.149端口:3306用户名:
18、eip_app1密码:TrueTomcatServer:地址:10.64.8.149端口:8080管理用户:admin/adminwebappRoot:/usr/local/tomcat-7.0.33/webappsFTP用户ftp:/10.64.8.149用户:ftpuser密码:ftpTrueCordysBop集团服务器:访问地址http:/10.0.3.157/cordys/3.3 位置:集团按开发人员建立租户,在各自的租户下进行开发CordysBOP平台3.3.1 测试环境租户建立规范EIP云门户端是按省分分配的应用ID。EIP云门户中的EIP应用ID、EIP租户ID与Cordys流程
19、平台中的CARS租户的对应规则为:EIP应用ID-EIP租户ID=CARS租户ID由于Cordys中租户为LDAP的DN格式,所以CARS租户ID对应的CARS租户DN为:cn=zhangym195,cn=organizationalusers,o=CARS租户ID,cn=cordys,cn=defaultInst,o=例如:EIP中的某XX系统的应用ID为na999,某YY的租户ID为hl328,其对应的Cordys中的租户ID为hl328-na999,对应的Cordys中的租户DN为:cn=zhangym195,cn=organizationalusers,o=hl328-na999,cn
20、=cordys,cn=defaultInst,o=3.3.2 CWS项目构建方案集成平台的各个基础通用组件分别建立独立的workspace主要包括:统一用户管理,附件和报表,日志模块,工作台其他应用功能在一个workspace中分别建立独立的project。Isthereverseddomainnamereallyrequiredtobeusedaspartofthequalifiedname?Itisstronglyrecommended,becausethispreventsnamecollisionswithcontentfromanothersoftwarevendor.Product
21、uniquenesswithinyourdomain,isatyourownresponsibility.Incase,youaretheoneandonlyconsumerofthedevelopedapplication,youcouldconsidertoskipthereverseddomainnamepartofthefolderstructureandhencefromthequalifiedname.Disadvantageisthatyoucouldgetnamecollisionsinfuture.i. svn目录结构如下:tags、branches和trunck是SVN标准
22、结构,trunck下面workspaces是工作空间窗口,bpmservices为本项目工作空间,rest-ws是REST服务开发的项目,还可以按以后规划建立其他项目ii. 以上SVN内容在导出到CWS后,目录结构如下其他开发人员可以按此格式在CWS中建立项目,使用3.2.1节svn服务器中Cordys中CWS创建项目工程时绑定的SVN地址提供的地址对项目进行检出,然后再本地开发其中:l rest-ws为工作空间中的项目名称,一般一个服务分类独立一个项目BusinessProcessModel为流程模型(businessprocessmodels和casemanagementmodels)目录
23、,此目录下面一般以流程级联目录进行命名,此目录不会部署到流程模型的名称路径中。采用SetStartPointofQualifiedName,将此目录下级目录作为命名起始位置。l DBMetadata为数据库元数据目录l Java目录下面包含Javaarchives和Javasources目录,ApplicationpackagescancontainJavaArchives(JARs,forshort)thatincludeJavaclassesdevelopedaspartoftheapplication,orJARsfromexternalproviders(socalledthirdpa
24、rtyJARS).Intheformercase,youneedtodefineaJavaArchiveDefinition;detailedinstructionsonthiscanbefoundinthiswebinar.Inthelattercase,therearetwooptions:therequiredJARisavailableitselfandcanthereforebedeliveredaspartofthedevelopedapplication;therequiredJARisdeliveredbyanotherapplication.Inthelastcase,you
25、mustincludeafilepathdependency.Notethatinthisscenario,thedevelopedapplicationcanbedeployedwithouttherequiredJavaArchivebeingavailableontheproductionenvironment.l Roles为角色目录l Rules为规则目录l UserInterfaces为用户界面文件目录,包括userinterfaces和externaluserinterfacesl Webcontent目录为HTM(L)页面文件、Javascript文件、CSS样式表、图片、图标
26、等目录文件。这个目录要求定义一个WebLibraryDefinition。此目录中的文件将部署到CordysWebServer目录。l XMLStorecontent所有有效的XML结构能够发布到CordysXMLStore中。典型地,它将用于不会存储在数据库或在文件系统中的属性和设置文件这个目录要求定义一个XMLStoreDefinition以使部署文档到CordysXMLStoreAlldocumentshavingavalidXMLstructurecanbepublishedtotheCordysXMLStore.Typically,itwillbeusedtostorepropert
27、iesandsettingsthatwillnotbestoredinadatabaseoronthefilesystem.NotalldocumentswithextensionxmlneedtobepublishedtotheCordysXMLStore.Forexample,messagebundlesendatxmlbutneedstobepartofsomeJavaarchive.YouneedtodefineaXMLStoreDefinitiontodeploydocumentstotheCordysXMLStore.Moreexplanationanddetailedinstru
28、ctionsyoucanfindatthiswebinar.l WebServices开发的Web服务目录l WebWsAppServerPackages目录为根据DBMetadata生成成的package目录l XMLSchemaDefinitions为XMLSchema目录3.3.3 CWS项目项目开发注意如果项目按每租户每开发人员模式进行BOP4项目开发的话,提醒各位基于SVN的CWS开发人员,在修改代码前一定要先检出代码,修改后再提交到SVN3.3.4 如果想将项目保存到自己的服务器Workspace下面使用备份策略方法集和命名空间3.3.4.1 WS命名空间说明JAVA代码命名定义格
29、式:http:/公司域名/项目编号/模块名公司域名:项目编号:bpm模块名:见下表模块名编号对应操作接口描述流程执行ProcessExecute1. 发起流程2.列举出所有流程执行类的操作待办处理PendingOperate1. 任务认领2. 工作移交3. 委派列表出所有统一待办待阅、应用待办待阅及Cordys平台任务相关的处理操作流程定义ProcessDefine1. 查看流程2. 获取流程环节3. 获取流程执行人4.列举出涉及流程定义类的操作,如获取当前用户下所有流程名称,获取当前流程环节,获取当前环节的后续环节等等。流程管理ProcessMgmt1. 获取流程实例2. 查看流程历史流程管
30、理相关的所有操作组织管理OrgMgmt1. 用户查询2. 用户同步涉及与4A相关的组织用户同步及用户、角色、等组织信息查询操作,通过封装4A提供的REST服务接口,开发同步WS来实现。应用开户AppRegister1. 建立租户2. 建立系统资源(建立SG、SC、CLASSPATH)3. 分配数据库资源4. 分配用户5.涉及应用开户流程模型BpmModel1. 车辆(Vehicle)2. 会议(Meeting)3. 档案(Archive)命名示例:如【流程执行】模块下面的启动流程操作命名空间如下3.3.4.2 JAVA包命名方式:com.cuc.bpm.processexecute流程模型命名
31、空间说明流程模型NS定义格式:http:/公司域名/项目编号/BpmModel/APPID公司域名:项目编号:bpm3.3.4.3 APPID:应用开发时EIP中申请的APPID。JAR包命名规范1、 JAVA包命名bpm-模块名-版本号.jar2、 提供给第三方REST接口SDK命名bpm-模块名-interface-版本号.jar3.3.4.4 REST接口URI命名说明http:/EIP部署服务主机:端口/bpm/rest/模块名/服务操作/参数1/参数2示例:3.3.5 http:/10.0.0.99:8080/bpm/rest/ProcessExecute/workflowBackO
32、ne/appId/appToken/controlUserId/processInstanceId/track_id方法命名方式为Get%BUSINESS_ENTITIY%Object(返回0-1个tuple)Get%BUSINESS_ENTITIY%Objects(返回0-n个tuple)Get%BUSINESS_ENTITIY%Object/ObjectsBy%PARAM1%_and_%PARARM2%(固定参数查询)Get%BUSINESS_ENTITIY%ObjectsByDF(动态查询)Get%BUSINESS_ENTITIY%Object/ObjectsBy%PARAM1%_and
33、_%PARARM2%_and_DF(固定参数+DF查询)参数较多时,可考虑在object后以功能进行命名。如GetChangeObjectsByDFGetAnnualPlanObjectsByPlanID_and_PlanTypeGetAnnualPlanObjectsFiltermethod的命名基本上遵循两点1.系统默认生成的规则:Object表示返回单个tuple,Objects表示返回多个tuple2.自定义规则:By后面是条件,DF表示动态查询这里PARAM之间之所以用下划线连接,是因为数据库字段有时候可能全部大写,无法断词。3.3.6 JAVA类注释1.方法注释:项目中的方法注释按
34、以下模板生成。生成成后效果,如图所示:配置方法:在Eclipse中按以下方式打开菜单:windows-preferences:找到JavaCodeTemplate右侧“Configutegeneratedcodeandcomments”:区中点击“Metods”,然后Edit此模板,将下面内容/*MethodName:$enclosing_method*Description:$todo*author$user*$tags$return_type*throws*/表-Eclipse的模板配置粘贴后,如图示:保存即可。生成的模板注释后如下所示:/*MethodName:startProcess*
35、Description:根据传递的流程特定消息来启动流程并返回流程实例ID*authoryuming*paramtype类型definition*paramreceiver流程图名称(全路径)*parammessages流程流转消息(XMLNode)*paramsource可选参数*returnStringInstance_Id*throws*IllegalArgumentException参数错误*throws*SOAPException执行异常,流程启动失败*/2.3.4 编程公共命名进行面向对象的设计,考察方法本身是否为类的职责。3.4.1 类命名WS-AppServer依据后台数据库表
36、对象或Object自动生成的Class,以系统默认命名为准;其他自定义类命名方式为名词名词中各个单词的第一个字母大写如:OaObject或动词+名词动词第一个字母小写,名词中各个单词的第一个字母大写getOaObject3.5 Javascript命名3.5.1 类成员变量命名命名方式为_名词+名词如_password_userName首字母小写,如包含多个名词后面名词首字母大写。成员变量都应当被封装,不能被外部直接访问。采用“_”前缀,同时提供getter/setter方法。3.5.2 普通变量命名非对象类型变量命名方式为%TYPE%名词+名词如sTypeiIndexgiIndex%TYPE
37、%为变量类型(虽然Javascript没有类型的概念,但是从代码可读性和校验方便性考虑还是应当添加),包括以下取值:i:intgi:gloableintvariables:String对象类型变量命名方式为名词+名词%OBJECT_TYPE%如employeeNodeorderArray%OBJECT_TYPE%为对象类型,包括以下取值:NodeArray其它所有无类型前缀的变量都是“对象”,而后缀表示它是哪种“对象”。有多个名词时采用Camel格式,也即各名词首字母大写。3.5.3 类成员方法命名方式为function_动词+名词+名词(参数列表也即普通变量列表)如functiongetUs
38、er(sCode)需要考虑是否对外部公开公开则无“_”前缀不公开则有“_”前缀实例方法通过prototype定义,静态方法直接定义。如Date.prototype.toCordysString=function()Date.fromCordysString=function(sDateTime)3.5.4 普通方法3.6 与类成员方法的唯一区别是不需要考虑外部可见性。Java命名3.6.1 类成员变量与普通变量命名方式为名词+名词如PassWordUserName首字母小写,如包含多个名词后面名词首字母大写。成员变量都应当被封装,不能被外部直接访问。采用private修饰符,同时提供gette
39、r/setter方法。3.6.2 类成员方法命名方式为%可见性%返回类型%动词+名词+名词(参数列表也即普通变量列表)动词第一个字母小写,名词中各个单词的第一个字母大写如privateStringgenerateReport(intemployeeIndex)3.6.3 包命名命名方式为com.unicom.%MODULE%如com.unicom.bpmsi注意保持WS-AppServerRepository中的package和java中的一致3.7 数据库命名3.7.1 表和字段命名对于Oracle,、表名全部大写,根据应用的不同用下划线分隔如OA_*HR_*如果表明超长,测应用名称缩写比如
40、REPAIRREPORT_*缩写为RR_*3.7.2 主键命名命名方式为PK_表名如PK_EMPLOYEE全部大写。3.7.3 外键命名命名方式为FK_表名_被引用表名如FK_EMPLOYEE_DETAIL_EMPLOYEE全部大写。3.7.4 视图命名命名方式为VW_表名_表名如OA_VW_EMPLOYEE_USER_INFO全部大写。3.7.5 序列命名命名方式为SEQ_表名如OA_SEQ_EMPLOYEE全部大写。3.7.6 存储过程命名命名方式为S_动词_名词如OA_S_UPDATE_EMPLOYEE全部大写。3.7.7 函数命名命名方式为F_动词_名词如OA_F_CALCULATE_
41、USER_NUMBER全部大写。3.7.8 触发器命名命名方式为DT_动词_名词如OA_DT_GENERATE_USER_ID全部大写。4 技术实现4.1 业务逻辑实现方案选择本项目中的业务逻辑可以通过以下几种方式实现:JavascriptinXForm,WS-AppServer,BPM,SQLinWS-AppServerWebService(method),SAPConnector,Scheduler和StoreProcedure。一般的指导原则是:考虑企业内部原有和目标业务流程规范性、业务流程操作习惯和项目执行力度是否采用BPM进行技术实现取决于是否可以或需要增加业务的可见性尽量使用BPM
42、进行较高层次的业务建模,而使用WS-AppServer构建细粒度的功能或事务逻辑如果性能是业务逻辑的瓶颈,应尽量采用WS-AppServer实现尽量简化客户端(JavascriptinXform)的实现代码,而选择后面的几种方式把实现封装在SOAPmethod中(其实就是统一的后台调用接口)尽量少使用StoreProcedure,因为它特定数据库的依赖性太强,而且无法实现标准的tupleold/new接口无论是不太涉及业务对象、简单轻量级的业务逻辑,比如拼接日期、格式化字符串或者进行数学运算等,还是较为复杂的业务逻辑,比如需要从数据库中获得相关业务对象信息进行比较复杂的组装,应使用WS-App
43、Server;对于和SAP系统的集成,使用SAPConnector根据逻辑的复杂性和要实现的目标不同,分情况处理:1.如果某项功能仅实现单个业务实体的增删改查(包括以一张表为主体,但涉及多表的关联查询),同时该实体的变化又不至于扩散(扩散的例子:删除订单还要同时修改对应计划的状态),那么就可以由SQLinWS-AppServerMethod实现。2.如果某项功能需要复杂的逻辑处理,这些处理可以由系统完成,或者对业务实体的增删改影响到了其他的实体(变化扩散),由WS-AppServer实现。3.如果某项功能需要多个不同用户的合作才能完成,且某些角色的所要完成的业务工作是多样的,那么可以由BPM实现。4.如果逻辑取决于用户的交互,还是前端判断比较合理。(例如根据用户对控件A的选择结果确定控件B显示的内容4.2 5.对于本项目需要较高性能要求的情况,采用详细设计中基于WS-AppServer的复合框架,进行请求封装页面页面实现有以下指导原则: 页面脚本做结构化处理,考虑调试情况和异常处理,示例如下vargDebug=false;/调试标志vargDebugBPM=false;/调试BPM标志vargParam;/全局传入参数v