医疗产品开发规范手册v1.0.docx_第1页
医疗产品开发规范手册v1.0.docx_第2页
医疗产品开发规范手册v1.0.docx_第3页
医疗产品开发规范手册v1.0.docx_第4页
医疗产品开发规范手册v1.0.docx_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、UFIDA用反医疗开发规范手册(适用全部产品线)公共平台部文档更新日期(2013-3-14)stringisStopped();voidconnect();1.0.5类和接口命名 采用有符合问题域意义的单词或单词组合,每个单词的首字母大写,其余字母小写(特殊字除外如URL) 类命名能够指明其职责 服务相关类命名规则:接口的第一个字符采用I对接口的默认实现类命名方式为接口名称去掉I,加Impl产品业务的内部逻辑实现类,以BO结尾数据访问的类以DAO或者DMO结尾测试用例以Test结尾继承ValueObject对象的类,以VO结尾异常类以Exception结尾UI工厂相关类命名规则:按钮动作类以A

2、ction结尾模型类以Model结尾视图类以View结尾编辑器以Editor结尾数据管理类以DataManager结尾模型服务类以AppModelService结尾校验类以Validator结尾示例:publicclassFiugrepublicinterfaceIFiugreContainer1.0.6包命名 医疗的顶级包名统一为uh 采用逻辑上的层次结构,从而减少依赖 命名简短,采用缩写 包名所有字符都为小写 不要用java,javax作为自定义包的前缀 产品开发中的类不允许放在缺省包下模块名统一规划L0.6.1模块级公共组件包名说明uh.bs.模块.pub服务器端整个模块公共代码工具包u

3、h.ui.模块,pubUI端整个模块公共代码工具包uh.vo.模块.pub跨服务器端、UI端整个模块公共代码工具包实体组件包名说明uh.vo.模块.业务组件.entity本业务组件的VO和元数据定义类、以及枚举类型操作组件:包名说明uh.itf.模块.业务组件给前台维护界面提供的操作接口操作实现组件包名说明uh.impl.模块.业务组件给前台维护界面提供的操作接口的实现类服务组件包名说明uh.pubitf.模块.业务组件.pub通用服务,任何模块的任何组件都可使用uh.pubitf.模块.业务组件.模块针对其他模块的业务组件提供的特定服务

4、服务实现组件包名说明uh.pubimpl.模块.业务组件.pub通用服务的实现uh.pubimpl.模块.业务组件.模块特定服务的实现UI组件UI组件包名说明uh.ui.模块.业务组件.组件视图名.editor编辑事件响应类uh.ui.模块.业务组件.组件视图名.action按钮事件响应类uh.ui.模块.业务组件.组件视图名.view视图uh.ui.模块.业务组件.组件视图名.model模型uh.ui.模块.业务组件.service.模块.业务组件提供给某个特定组件的UI组件服务红色部分可选如果当前组件只有一个视图,则不需要视图名字这一层。1.0.6

5、.8BP组件包名说明uh.bs.模块.业务组件Bp的实现类,组合了业务规则示例举例说明,存货核算采购入库单业务组件的代码开发:1、实体类:nc.vo.ia.mi2.entity.l2BillHeadVO.java采购入库单的表头V0nc.vo.ia.mi2.entity.l2BillltemVO.java采购入库单的表体V0nc.vo.ia.mi2.entity.l2BillVO.java采购入库单的单据聚合V02、2、操作接口类:nc.itf.ia.mi2JI2Maintain.java采购入库单界面的维护操作接口3、3、服务接口类:nc.pubitf.ia.mi2.ic.II

6、ATo45Sign.java给库存提供的服务nc.pubitf.ia.mi2.po.IIAToPUEstimate.java给采购提供的暂估服务nc.pubitf.ia.mi2.po.IIAToPUSettle.java给采购提供的结算服务nc.pubitf.ia.mi2.pub.IBillAPLjava提供给外系统的采购入库单新增、删除的通用服务4、4、接口实现类nc.impl.ia.mi2.l2Maintain.java5、5、服务实现类nc.pubimpl.ia.mi2.ic.IATo45SignService.javanc.pubimpl.ia.mi2.po.IAToPUEstimat

7、eService.javanc.pubimpl.ia.mi2.po.IAToPUSettleService.javanc.pubimpl.ia.mi2.pub.BillAPIService.java5、BP类nc.bs.ia.mi2.l2DeleteBP.javanc.bs.ia.mi2.l2lnsertBP.javanc.bs.ia.mi2.l2UpdateBP.java6、按钮事件响应类nc.ui.ia.mi2.maintain.action.l2AddAction.javanc.ui.ia.mi2.maintain.action.l2QueryAction.javanc.ui.ia.mi

8、2.maintain.action.l2SaveAction.java7、视图nc.uiia.mi2.maintain,view.l2BillListJava8、模型nc.ui.ia.mi2.maintain.model.l2Model.javanc.ui.ia.mi2.maintain.model.l2ModelService.java9、存货核算模块级别的引用其他模块的组件服务nc.bs.ia.ref.sc委外模块提供给本模块的服务器端服务组件nc.ui.ia.ref.sc委外模块提供给本模块的UI服务组件10、存货核算模块级别的PUB工具包nc.bs.ia.pub服务器端整个模块公共代码

9、工具包nc.ui.ia.pubUI端整个模块公共代码工具包nc.vo.ia.pub跨服务器端、III端整个模块公共代码工具包1.1注释规范1.1.1般性规则 注释应该使代码更加清晰易懂注释要简单明了,只要提供能够明确理解程序所必要的信息就可以了。如果注释太复杂说明程序需要修改调整,使设计更加合理。 注释需要描述程序做了什么,还要描述为什么要这样做,以及约束 对于一般的getter>setter方法不用注释 注释不能嵌套 生成开发文档的需要用中文编写量进行说明。Javadoc可以用它来产生代码的文档。为了可读性,需使用缩进和格式控制。文档注释常采用一些标签进行文档的特定用途描述,用于帮助J

10、avadoc产生文档,常用的有:标签Usedfor目的authorname类/接口描述代码的作者,每个作者对应一个这样的标签deprecated类成员方法说明该段API已经被废除©exceptionnamedescription或throwsnamedescription成员方法描述方法抛出的异常每个异常一个对应一个这样的标签paramnamedescription成员方法描述成员方法中的参数用途和意义,一个参数对应一个这样的标签returndescription成员方法描述成员方法的返回值的意义since类/接口成员方法描述该段API开始的时间seeClassName类/接口成员方

11、法成员变量用于引用特定的类描述,一般ClassName用包括包名的全名seeClassName#memberfunction类/接口成员方法成员变量用于引用特定的类的成员方法的描述,一般ClassName用包括包名的全名(Aversiontext类/接口版本inheritDoc类/接口成员方法继承的-文档行注释:/一次只能注释一行,一般用来简短的描述某一个局部变量,程序块的作用,尽量不要放在行Mo块注释:/* Representsanexampleclass.Ifabasicdescriptionrequiresmorethanone* sentence,includeitinthefirst

12、paragraph. 块注释:/* Representsanexampleclass.Ifabasicdescriptionrequiresmorethanone* sentence,includeitinthefirstparagraph.*/可以用多行,一般用来对程序块、算法实现、类的实现进行说明。为了可读性,可以有缩进和格式控制。一般在行注释不能满足注释需要的时候采用。一般用来作为文件头、复杂算法的说明,方法体内的复杂过程说明等see#fieldsee#Constructor(Type,Type.)see#Constructor(Typeid,Typeid.)see#method(Typ

13、e,Type,.)see#method(Typeid,Type,id.)seeClassseeClass#fieldseeClass#Constructor(Type,Type.)seeClass#Constructor(Typeid,Typeid)seeClass#method(Type,Type,.)seeClass#method(Typeid,Typeid,.)seepackage.Classseepackage.Class#fieldseepackage.Class#Constructor(Type,Type.)seepackage.Class#Constructor(Typeid,T

14、ypeid)seepackage.Class#method(Type,Type,.)seepackage.Class#method(Typeid,Type,id)seepackage为了使形成的文档可读性好,注释中注意使用缩进和格式控制,常用标签:换行:vbr>段落:<p></p>代码:<code></code>列表:<ul><li></lix/ul>强调(粗体字):<bx/b>斜体:<ix/i>格式所见即所得:<pre></pre>不例:不例:* <

15、p>* Exampleofasecondparagraph.Notetheblanklinebetweenthefirsttag* andtheendofthefirstparagraph.* </p>* <ul>* <li>Examplelist,item1</li>* <li>ltemtwo</li>* </ul>* <p>* Anotherparagraphwithmoreinformationinit.Examplecodeshouldbeplaced* inside<pre&g

16、t;<code>tags,asshownbelow.* </p>* <pre>* <code>* ExamplemyExample=newExample();* </code>* </pre>* <p>* NoticethattheJavadoctagvaluesarelinedup.* </p>* authorBrianWingShunChan* seeBigExample*/1.1.2类和接口注释类/接口描述,一般比较详细。按照常用的说明顺序排列,主要包括 采用文档注释/*/ 类描述放在类的类定

17、义的紧前面,不能有任何的空行 描述类的主要说明、设计的目标、实现的功能,以或“”结束 重点内容用<bx/b>突出显示 描述如何使用该类,包括环境要求,如是否线程安全,并发性要求,以及使用约束等 描述巳知的BUG和解决方式描述类的重大重构历史:<b>修改人+日期+简单说明</b>,较小的变动放到修改的代码出注释 必须包含:author作者、(Aversion版本、since开始版本,需要时加上see参照 版本以当时开发的产品的应用版本号为准/* ThisclassprovidesdefaultimplementationsfortheJFC<code&g

18、t;Action</code>* interface.Standardbehaviorslikethegetandsetmethodsfor* <code>Action</code>objectproperties(icon,text,andenabled)aredefined* here.Thedeveloperneedonlysubclassthisabstractclassand* definethe<code>actionPerformed</code>method.* <p>* <b>Warning:

19、</b>* Serializedobjectsofthisclasswillnotbecompatiblewith* futureSwingreleases.Thecurrentserializationsupportisappropriate* forshorttermstorageorRMIbetweenapplicationsrunningthesame* versionofSwing.AfuturereleaseofSwingwillprovidesupportfor* longtermpersistence.* ©version1.4102/02/00* aut

20、horGeorgesSaab* since产品版本* seeAction*/License信息 所有代码文件需包含license信息 License信息放在最前面,位于package名称之前 统一License信息,如下:*用友医疗提供的系统中包含的任何文本、图片、图形、音频和/或视频资料均受版权、*商标和/或其它财产所有权法律的保护,未经相关权利人同意,上述资料均不得在任*何地方直接或间接发布、播放、出于播放或发布目的而改写或再发行,或者被用于*其他任何商业目的。所有这些资料或资料的任何部分仅可作为私人和非商业用途而*保存在某台计算机内。用友医疗不就由上述资料产生或在传送或递交全部或部分上*

21、述资料过程中产生的延误、不准确、错误和遗漏或从中产生或由此产生的任何损害*赔偿,以任何形式,向用户或任何第三方负责。<p>*用友医疗为提供服务而使用的任何软件(包括但不限于软件中所含的任何文字、照片、动画、录像、录音、音乐、图象和附加程序、随附的帮助材料)的一切权利均*属于该软件的著作权人,未经该软件的著作权人许可,用户不得对该软件进行反向*工程、反向编译或反汇编。<p>*Copyright(C)2011用友医疗卫生信息系统有限公司,版权所有,翻版必究。*/packagexx.xx.xx;1.1.3方法注释描述函数的功能,对成员方法,静态方法一般采用文档描述,特别是公开

22、的方法。注释可以很详细,为了可读性强也可包含格式控制,如下面说明含有缩进:方法注释一般包括: 方法的主要说明,以。或.结束 描述方法完成什么样的功能,方法的目标,用该方法的原因 描述方法的使用方法,包括使用的环境要求,如前置条件、后置条件和并发性要求 描述己知的bug 描述方法的修改历史:修改人+日期+简单说明 常用标签用法: paramcelementstobeinsertedintothislist.(参数说明,说明用途和取值范围)return<tt>true</tt>ifthislistchangedasaresultofthecall.(返回值说明) throw

23、sNullPointerExceptionifthespecifiedCollectionisnull.(异常说明)see如果重载方法必须参考父类的方法 方法的注释通过Eclipse工具生成Returnsthelocalizedpreferencesvaluesforthekey,optionallyusingthe* defaultlanguageifthenolocalizationexistsfortherequestedlanguage.*parampreferencesthepreferencescontainer* paramkeythepreferenceskeyparamlan

24、guageldtheidofthelanguage* paramuseDefaultwhethertousethedefaultlanguageifnolocalizationexistsfortherequestedlanguage文档修订历史* returnthelocalizedpreferencesvalues.If<code>useDefault</code>is<code>false</code>andnolocalizationexistsfortherequested* language,anemptyarraywillberet

25、urned.pubIicStringgetPreferencesVaIues(PortIetPreferencespreferences,Stringkey,StringlanguageId,booleanuseDefau11);1.1.4变量注释 成员变量、类静态变量采用文档注释,对成员变量的注释通常包括: 变量的意义变量的合法值域 对并发访问的限制对集合类,尽量使用泛型明确其元素类型,未能使用泛型的地方要在注释中说明集合元素类型 多选的控件类,如JTree/JList/JComboBox,需要在注释中说明其元素中的userObject类型示例:/局部变量,如算法相关的变量采用块或行注释示例

26、:voidfunc()(inti;/用于循环计数inti)* Web.xml文件中configServlet参数的UlAPP.xmlinitparampublicfinalstaticStringAPP_CONFIG="aaa.uiapp"1.1.5算法注释算法描述指在实现级别的描述注释,如在方法内的注释,对类实现的注释,这样使得程序更加易懂,方便程序算法的修改和BUG的修复。一般采用块/行注释,对于简短的描述采用行注释,不要用文档注释。注释的主要内容包括: 某些局部变量的意义和用途 复杂的控制结构的注释,如循环,分枝,条件表达式。说明控制所要达到的目标 复杂的代码段的描述

27、,说明代码完成的功能,以及为什么这样做1.1.6修改注释 对历史代码bug的修改或者局部的重构,需在代码中做出注释以备日后查看 在代码修改处注释,注释内容:修改人+日期+修改原因1.2编码规范1.2.1般性规则 一个程序文件最好不要超过2000行 尽可能缩小对象的作用域,这样对象的可见范围和生存期也都会尽可能地小 一个方法所完成的功能要单一,不同的功能封装为不同的方法 尽可能的处理异常或转换异常,不要一味的包装异常 不允许调用System.gc如果对象在某个特定范围内必须被清理(而不是作为垃圾被回收),请使用带有finally子句的try块,在finally子句中进行清理。 对于把一些逻辑相关

28、的类组织在一起,可以考虑把一个类的定义放在另一个类的定义中,这种情况推荐使用内部类(比如界面层中的事件响应等)。内部类拥有所有外围类所有成员的访问权。 对成员变量的访问最好通过getter/setter方法,这样能够保证访问的合法性,以及代码调整优先选择接口而不是抽象类或具体类。接口只和客户希望的动作有关(协议),而类则倾向于关注实现细节 使用java标准库提供的集合类。优先选择ArrayList来处理顺序结构,选择HashSet来处理集合,选择HashMap来处理关联数组,选择linkedList来处理堆栈和队列.当使用前三个的时候,应该把他们向上转型为List、Set和Mapo 使用这些标

29、准的集合类时,强制使用泛型的形式明确知道数组长度时使用数组,数组是一种效率最高的存储和随机访问对象引用序列的方式,动态长度时使用ArrayList 尽量使用"private”、"protected”关键字。一旦你把库的特征(包括类、方法、字段)标记为public,你就再也不可能去掉他们。在这种方式下,实现的变动对派生类造成的影响最小,在处理多线程问题的时候,保持私有性尤其重要,因为只有Private的字段才会受到保护,而不用担心被未受同步控制的使用所破坏。 采用类而不是对象引用静态变量和方法 UFDobule常量必须使用UFDouble.ZERO,UFDouble.ONE使

30、用UFBoolean必须采用UFBoolean.valueof(true|false|y|n|Y|N),的形式进行构造,常量必须用UFBoolean.TRUE,UFBoolean.FALSE 禁止后台业务代码使用如下代码try(something()catch(Exceptionex)(newException() 代码中分散的SQL语句尽量能放到一处统一维护1.2.2类 类的结构组织,一般按照如下的顺序: 常量声明静态变量声明 成员变量声明构造函数部分 Finalize部分成员方法部分 静态方法部分这种顺序是推荐的,在实际开发中可以按照一定的尺度修改,原则是程序更易读。如对方法的排序按照重要

31、性,或按照字母顺序排列或按照方法之间的关系排列。 每个方法(包括构造与finalize)都是一个段。多个变量声明按照逻辑共同组成一个段,段与段之间以空行分隔。 类声明时,要指出其访问控制,一般:无修饰符,public,和privateo 方法与方法之间,大的部分之间都需要以空行隔离。 编写通用性的类时,请遵守标准形式。包括定义equals()hasCode。、toString。、Clone(实现Cloneable接口),并实现Comparable和Serialiable接口 对于设计期间不需要继承的类,尽量使用final1.2.3方法 对成员方法,不要轻易的采用public的成员变量。主要的修

32、饰符有public,private,protected,无 空方法中方法声明和函数体可都在一行。如:voidfunc()() 方法和方法之间空一行 方法的文档注释放在方法的紧前面,不能空一行。 避免过多的参数列表,尽量控制在5个以内,若需要传递多个参数时,当使用一个容纳这些参数的对象进行传递,以提高程序的可读性和可扩展性 方法中的循环潜套不能超过2层 对于设计期间不需要子类来重载的类,尽量使用final每个方法尽量代码行数尽量不要超过100行(有效代码行,不包括注释),但必须保证逻辑的完整性 return语句中,不要有复杂的运算。1.2.4变量 对成员变量,尽量采用private 每一个变量声

33、明/定义占一行(参数变量除外),如:inta;intb;比inta,b;更容易读,更容易查找bug 局部变量在使用前必须初始化,一般在声明时初始化 变量的声明要放在程序块的开始位置如:voidmyMethod()(intinti=0;/beginningofmethodblockif(condition)(intint2=0;/beginningof“ifblock)一种例外情况是在for语句中,定义声明不仅不占一行,还在表达式内部,完全采用Eclips生成,如:for(inti=0;i<100;i+) 避免变量的定义与上一层作用域的变量同名。 局部变量在使用时刻声明,局部变量/静态变量

34、在声明时同时初始化 在与常数作比较时常数放在比较表达式的前面如:if(“f(数作比较时常数放在比较表达式的前面obj)j数if(null=obj)达式的1.2.5异常 异常名称必须以Exception结尾 所有异常类都必须支持异常链,能够提供对原始异常的跟踪 方法中throws的异常应尽量明确,没特别理由,不要抛出太顶层的异常 捕捉的异常尽可能精确 控制try/catch的规模,try/catch的作用范围尽可能小 异常捕获的顺序,最可能出现的异常在前,最细粒度的异常在前 数据库连接,socket连接等敏感资源,必须加finally处理 不要吃掉导致业务问题的异常1.2.6格式 方法与方法之间

35、用需要用一空行隔开 switch语句,需要一个缺省的分支 在Eclipse中最好进行代码格式化1.2.7测试用例 测试用例采用JUnit框架进行编写 测试用例的类以Test结尾 对于核心功能测试用例必须覆盖第二章数据库规范2.0PDM文件PDM里面有关各种数据库对象的comment字段不能为空,必须对各种数据库对象作出有助与理解的注释2.1PDM数据类型类型范围SqlserverOracleDb2字符型长度固定CharCharChar可变字符型长度不固定VarcharVarchar2Varchar32位整型-2,147,483,6482,147,483,647IntIntegerinteger

36、精确数值型Decimal(p,s)Number(p,s)Decimal(p,s)日期时间型yyyy-mm-ddhh24:mm:ssChar(19)Char(19)Char(19)布尔型YorMChar(l)Char(1)Char(l)ID/PKChar(20)Char(20)Char(20)大文本textClobclob二进制imageBlobblob 字符型字段的确定。长度固定用char,不固定用varcharo不要将Null与空串视为相同。在不同的数据库中对这两者的理解是不相同的。在Oracle中空串与Null理解一样。如果碰到这种情况统一用Null. 空值问题:所有经常用来做为查询条件的

37、字段都不允许使用空值,引用基础档案的,在基础档案增加表示空值的档案,其他使用N/A表示。2.2元数据数据类型NameDBTypeLengthClassFullNameStringvarchar50java.lang.StringUFIDchar20java.lang.StringIntegerintjava.lang.IntegerUFDoubledecimal28,8nc.vo.pub.lang.UFDoubleUFBooleanchar1nc.vo.pub.lang.UFBooleanUFDatechar10nc.vo.pub.lang.UFDateUFDateTimechar19nc.v

38、o.pub.lang.UFDateTimeUFTimechar8nc.vo.pub.lang.UFTimeUFMoneydecimal28,4nc.vo.pub.lang.UFDoubleIMAGEimagejava.lang.ObjectBLOBimagejava.lang.ObjectCLOBTextjava.lang.StringCUSTOMvarchar500java.lang.StringMEMOvarchar1024java.lang.String2.3命名数据库对象规则最大长度例子表系统模块功能名一名称18smfirm字段名18acccode,accname视图V系统规则名名称(

39、*)18vaccsub触发器tr表名名称(*)18trfirm函数fn名称18fnfun()Checkck表名字段名(*)18ckglaccsubcode主键pk表名18pkglaccsub外键fk_表名字段名(*)此处18fk_accsub_code超过18位处理索引idx表名字段名(*)18idxaccsubcode表空间ts名称18tssys(*)注:由于数据库对象之间的命名规则与最大长度限制可能造成命名存在冲突。如存在,可以通过缩减表名或字段字符来实现。 表名定义采用三级定义方式,最多四级,统一以uh开头,格式:uh_模块名(不超过4个字母)_表名,一二级名称统一规划示例:uh_app

40、t_patient 在一定范围内,相同名称的列名需要具有相同的含义 所有的外键、约束、索引、函数、触发器、存储过程名不允许重复 业务中主子表的命名规则: 主表:系统名名称或系统名名称_h子表:系统名_英文名称_b。 业务中主子子表的命名规则: 主表:系统名_英文名称_h子表:系统名_英文名称_b 子子表:系统名_英文名称_bs一个表a的字段在引用另外一个表b的主键字段时,表a的该字段的命名与表b的主键名称一样。例如:如果表a有一个引用“部门”的字段,其字段直接命名为“pk_dept”。如果有多个字段引用同一个档案,则不用如此处理不能和己有的前缀名重复,NC中己经占用的前缀名如下:模块名称系统规

41、则名模块名称系统规则名模块名称系统规则名平台系统管理smUAPpub财务会计平台dap基础数据bd外部交换平台XX管理会计平台dmp报表&BPM报表iufoBI平台biBPMbpm财务总账管理gl收付报arap固定资产fa存货核算la项目成本jc资金资金结算fts资金监控fvm资金计划fp票据管理fbm信贷管理fi资金预测fi资金计息fi网上银行ebank人力资源人力资源规划HRP职务职能管理OM员工信息管理HI招聘甄选管理RM员工调配管理HI员工离职管理HI政策制度管理HRPM劳动合同管理HRCM培训开发管理TRM考勤管理TBM出差管理HRBT休假管理HRLM加班管理HROM绩效管理

42、PE薪酬管理WA福利管理BM经理自助MSS基础设置HR人力资源取数函数RPT员工自助ESS供应链采购管理P0销售/分销管理so库存管理ic销售价格prm内部交易to供应商管理vrm合同管理Ct委外加工sc发运管理dm供应链公共scm制造设备管理fm成本管理cm制造基础数据pd需求管理mm生产计划mm生产定单mm车间作业sf能力计划crp装配计划mm检修管理er质量管理质量管理qc2.4存储过程为了减少移植的困难,不要使用存储过程。如必须使用,需审批。2.5触发器 不使用触发器,尽量通过程序实现,有利与多数据库移植,如使用,需申请备案 不允许动态创建触发器2.6视图 使用静态视图,不允许动态创建

43、视图 视图中不准包含orderby语法,影响效率 尽量不要出现视图嵌套视图的情况2.7索引 为了保证索引具有提高效率的作用,估计记录数不大于100的表一律不允许建索引o 只用于distinct或gro叩by子句引用的列,不用建立索引产品开发规范监控管理制度1. 产品正式立项后,开发经理及平台部经理需评估开发团队是否需要“开发规范”方面的培训,若需要则纳入培训计划中。2. 若开发团队成员需培训人数较多,需要执行正式培训,由开发经理向平台部申请培训讲师,平台部应按照培训流程组织正式培训。3. 培训完成需有考核或确认记录(答卷或确认书),开发人员确认已对开发规范有明确认识,同意遵照执行。4. 产品开

44、发规范由平台部负责维护,内容变更时需做正式版本发布通知,确认各开发经理均己明确新版本中变更内容,平台部收到开发经理确认回执,版本发布成功。5. 产品开发规范标记黄色的规范要求强制执行,各开发团队必须遵照执行;建议执行的规范可参照执行,但若不遵循建议执行,开发团队须提供所遵循的规范,作为产品特有开发规范,便于后续开发参照。6. 开发经理负责监控团队产品开发规范的落地执行,主要通过代码走查、自查、评审、测试验证等手段。7. 平台部和质量部负责抽查开发规范的执行情况,主要通过工作产品评审、代码走查方式检查,记录并发布问题管理表,开发经理负责在2个工作日内对不规范问题采取纠正措施,确定纠正完成时间。问

45、题修改完成时,开发经理需要反馈问题修改完成状态,通知平台部和质量部验证。 对于数据值变化不大的列,比如只有yes和no,那么不要建索引,否则效率降低。 不允许动态创建索引当创建复合索引时,复合索引的列不超过6列,复合索引的列的总长度不能超过128字节 在复合索引中,所有的列必须来自同一个表中,不能跨表建立复合列复合索引为多列,同复合主键一样将变化显著的列放到复合索引的首位。在复合索引中,列的排列顺序是非常重要的。例如在(COL1,COL2)上的索引与在(COL2,COLD上的索引是不相同的,因为两个索引的列的顺序不同 一个表上的索引不要多于8个规范索引的管理,设计表的时候需要将表的主要查询场景

46、整理形成相应文档,然后根据相应场景设计索引 某些字段(如dr、ts等)设计时不可见。在这些字段上建索引,需要申报审批2.8表 以第三范式的标准严格设计,然后再考虑开发与运行的效率进行反范式规范的冗余设计 不允许动态创建表、约束、外键每个表必须有主键(primarykey),不推荐复合主键。复合主键必须遵守以下规则:越能成为唯一标识的字段(同值重复少)就越放在前面 不要使用用户可编辑的列构成主键一个表的字段在引用另外一个表带编码、名称的字段时,只需引用主键字段,保持应用字段和引用表的主键字段名称相同 没有必要对表中的每一个引用建立主外键关系对于己经存在的表,如果要增加字段,建议一般使用可空字段,

47、如果是非空字段,请给出default值 只对关系非常密切的表建立外键关系,比如主子表,来源去向表 外键的建立的基本原则是不能跨模块建立外键关系。2.9函数 不允许使用自定义函数2.10特殊字段2.10.1时间戳字段名描述数据类型长度精度备注ts时间戳char102.10.2删除标志字段名描述数据类型长度精度备注dr删除标志char12.10.3审计信息字段名描述数据类型长度精度备注creator创建人char20creationtime创建时间char19modifier修改人char20modifiedtime修改时间char192.10.4组织属性所有与组织有所属关系的业务对象和基本档案,

48、必须建立主组织和所属集团两个属性,对应数据库表中的字段为:pkorg和pkgroup,带版本的主组织为pkorgv。codename字段名数据类型长度精度备注masterorg主组织业务组织的具体名称pk_orgchar20businessgroup所属集团pkgroupchar20主组织版本业务组织的具体名称pk_org_vchar202.10.5制单人/审核人字段名描述数据类型长度billmaker制单人varchar20approver审核人varchar202.10.6树形业务对象的内部码codename字段名数据类型长度精度备注innercode内部编码Innercodevarcha

49、r602.10.7多语子段业务对象支持“名称”的多语,最多支持6种语言,每个业务对象的名称包含6个字段:codename字段名数据类型长度精度备注name名称namelvarchar根据需要name2name2varchar根据需要name3name3varchar根据需要name4name4varchar根据需要name5name5varchar根据需要name6name6varchar根据需要name是指具体的名称,这里的name只是示例;实际的示例:例如CustomerName,CustomerName2,CustomerName3,CustomerName4,CustomerName5

50、,CustomerName62.10.8自定义项字段名字字段说明数据库类型JAVA类型vdef1-20表头自定义项120varchar(101)java.lang.Stringvbdef1-20表体自定义项120varchar(101)java.lang.String2.10.9单据常用属性字段名字字段说明数据库类型JAVA类型cbilltypecode单据类型varchar(20)java.lang.Stringcrowno行号varchar(20)java.lang.Stringvtrantypecode交易类型编码varchar(20)java.lang.Stringvtrantypec

51、ode父易类型编码varchar(20)java.lang.Stringctrantypeid交易类型varchar(20)java.lang.Stringvbillcode单据号varchar(40)java.lang.String2.11示例以客户基本信息表定义为例,客户基本信息引用了用户表、组织表、集团表,同时客户又存«实体>>客户基本信息«实体>>客户基本信息"«实体>>、客户联系人旧?联系人主硬膏联系人刍是否默认M分布式1.«实体>>客户银行帐号«实体>>客户收发货

52、地址客户银.首嘿认M客户主段.w账户分类4,客户基本信息主疑窟所屈集团霸所屈组织畲客户编码雷客户名称否客户简称否助记码客户基本分类散地区分类否供应商对应供应商.n依实体>>©用用户廿?用户主键雪用户名称,"用户编码«实体>>客户财务信息«实体>>客户销售信息*客户基本信息u客户财务信息主谈由所属集团组织组织主键曹编码斗名称«实体>>客户信用控制客户基本信息df客户销售信息主键宙所屋集团*困国40住如客商收发.*发货地址M客户基本信息信用控制主键gir所屈集团点所屈信用控制域弯免于信用额度检查否免于帐期检查3基于上级客户信用控制育基于上级客户账期控制在多个联系人、银行账户、财务信息、销售信息和信用信息,多个表之间的关系如下图,图中的每个实体都对应一张表:建立表结构如下:pkcustomerchar(20)主键namevarchar(300)名称(多语)name2varchar(300)name3varchar(300)name4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论