1. 首页
  2. 金蝶云·星空.二次开发规范

金蝶云星空二次开发规范

目的

为了保障金蝶云星空企业版、标准版(以下简称星空)定制开发质量与性能,保障产品的稳定性,向后兼容性,维护客户信息系统安全,要求所有星空定制开发必须遵守开发规范。

相比2.0,本版本对开发管理体系进一步修订,并对已有规范明细项进行了增补、修订。

适用范围

本规范适用于金蝶云星空企业版、标准版所有定制开发项目,包含并不限于直销、分销、ISV生态产品开发。

定制开发管理规范

岗位配置与职责

  • 实施顾问把控需求,负责需求制定、需求验证、回归测试、部署上线等工作,并对需求的合理性、项目质量负责。
  • 软件开发工程师作为技术负责人承担设计开发、单元测试、功能测试、缺陷修复等工作,并对设计合理性、开发质量负责。

开发平台使用

  • 项目研发过程必须使用星空协同开发云、项目协作系统。
  • 在项目协作系统创建交付项目,并组建项目团队,项目过程管理相关工作包括需求、任务、缺陷等需要以项目协作系统为基础实现信息化、流程化,保留各节点项目文档;具体使用方法参见devops平台帮助菜单中的产品介绍。
  • 在星空协同开发平台建立开发应用,应用名称需要与客户正式名称一致;所有项目实施,开发,伙伴开发者,客户IT等干系人都必须以参与者方式加入应用中,协作开发;开发内容包含但不限于业务对象开发,插件开发,配置文件,第三方组件,自定义客户端等。具体使用方法参见:《协同开发云知识专题》
  • 对于特殊客户定制开发,需要申请延用集成开发平台权限,明确告知使用集成开发平台开发风险,批准后予以开通。

开发过程管理

  • 定制化开发流程包含需求分析、技术设计、代码构建、测试验证、上线发布流程,各个阶段的重点关注点如下。

需求分析

  • 进行业务/应用/技术现状调研,形成需求规格说明书,进行开发工作量初步评估。
  • 需求录入项目协作系统-需求管理,进行需求评审,形成评审记录。

技术设计

  • 进行业务架构、应用架构、数据结构设计,编写详细设计。
  • 形成开发任务录入项目协作系统-任务管理,进行设计评审,形成评审记录。

开发构建

  • 进行业务对象开发、代码编写、单元测试、代码评审;编写测试用例,用例评审;进行环境的搭建并支持开发构建过程。
  • 业务对象开发在协同开发平台进行,代码使用统一的应用源码服务进行开发管理,确认开发迭代完成后,进行在线构建,确认开发成果质量并进行质量问题修复。
  • 通过安装包进行测试环境部署,测试缺陷录入项目协作系统-缺陷管理,并进行跟踪修复。

测试验证

  • 部署集成环境、UAT环境,进行集成测试、UAT测试,缺陷修复。

上线发布

  • 生产环境部署。

开发成果质量管理

  • 开发者在协同开发平台完成开发任务后,进行在线构建,质量检测平台将自动对开发成果进行质量检测、构建制品,并输出质量报告,开发者可以根据质量报告,了解制品质量问题、改进方案,在持续迭代过程中不断提升质量。同时,质量报告也作为制品公有云部署及生态产品上架的重要依据。
  • 质量检测平台对SQL脚本、第三方资源、业务对象检查以及插件代码扫描,综合得到质量报告。具体检测维度和检测项参见上图。
  • 质量报告中,“严重”和“阻断”的质量问题必须修复,且最终质量得分在70分以上,安装包才可以进入测试部署环节。

开发工程管理

系统环境部署要求

  • 建议部署四套环境,分别是 开发环境(以下简称“DEV环境”)、集成环境(以下简称“SIT环境”)、用户验证环境(以下简称“UAT环境”)、生产环境(以下简称“PRO环境”);DEV环境、SIT环境、UAT环境、PRO环境的版本和补丁必须保持一致;通过UAT环境测试后的补丁包才可以正式部署到PRO环境。

代码托管

  • 必须使用协同开发云进行项目开发工作,源代码统一使用应用源码服务管理,也可以通过协同开发源码服务实现迭代分支管理。
  • 定制开发源码不允许上传至GitHub等开源代码托管平台。

构建部署流水线(CI/CD)

  • 使用协同开发云在线构建完成构建流水线功能,实现对所有开发成果,包括业务对象、代码、预置数据的一体化构建。

制品库管理

  • 通过在线构建的构建产物kdpkg包,在协同开发云制品库统一管理,可以手动下载制品至本地环境安装,公有云客户可以推送将制品推送至公有云环境安装,ISV产品可以将制品推送至应用市场更新ISV产品包。

业务对象开发规范

命名规范

  • 扩展或新增业务对象时(含转换规则、报表等动态领域模型),其业务对象Key可以选择系统生成的GUID。
  • 如果需要自定义业务对象Key,必须以开发商代码加下划线排头(如:PAAB_xxxxx),且Key长度不允许超过30字符,只能使用字母、下划线。
  • 扩展的字段标识和属性必须以开发商代码加下划线排头(如:PAAB_xxxxx),字段名必须包含开发商代码(如:F_PAAB_xxxxx)。
  • 扩展的任何元素,例如标签控件、页签控件、面板控件等,标识必须以开发商代码加下划线排头(如:PAAB_LableXXX,PAAB_TabXXX等)。

设计规范

  • 不允许对一个业务对象或是单据转换,进行多个平级扩展,如果因为多个安装包,或是多个行业产品导致的平行扩展,必须显式指定设置平行扩展加载顺序。
  • 一个单据的字段总数原则上不要超过50个字段(含隐藏字段)。
  • 框架布局下,停靠上,下,左,右的元素小于等于1个,中间停靠的等于1个,同时,停靠元素的同级上不允许存在绝对布局元素。
  • 字段的默认属性按需设置,例如单据列表默认显示、支持引出、支持引入等需要按照业务进行默认的设置。
  • 网控必须配置,防止并发修改数据导致数据错误。
  • 基础资料表单主键设计建议使用整型,否则不支持单据转换。

代码编写规范

命名规范

  • 工程名称必须以下述标准进行命令,{开发商标识}.{项目}.{工程归类}(如:PPAB.K3Cloud.PrintingSystem.cscproj)。
  • 如果存在细分模块,可以使用四级命名空间,如:{开发商标识}.{项目}.{工程归类}.{模块名}(如:PPAB.K3Cloud.PrintingSystem.ProductionOrder.cscproj)。
  • 命名空间必须与工程名、生成的程序集名称一致。
  • 工程命名遵守大驼峰法则,除了用以分隔的‘.’外,仅允许使用26个大小写英文字母或辅助数字命名。
  • 表单插件工程命名规则:{开发商标识}.{项目}.{工程归类}[.{模块名}].XxxxxBusinessPlugIn(如:PPAB.K3Cloud.PrintingSystem.SaleOrderBusinessPlugIn.cs或PPAB.K3Cloud.PrintingSystem.ProductionOrder.SaleOrderBusinessPlugIn.cs)。
  • 服务操作插件工程命名规则:{开发商标识}.{项目}.{工程归类}[.{模块名}].XxxxxServicePlugIn(如:PPAB.K3Cloud.PrintingSystem.SaleOrderServicePlugIn.cs或PPAB.K3Cloud.PrintingSystem.ProductionOrder.SaleOrderServicePlugIn.cs)。
  • 其他类、方法名、变量等遵守大驼峰、小驼峰命名规则。

禁止使用的代码

  • 禁止所有一切可能威害服务器运行安全的代码,代码标准平台会动态调整,当前已包含的规则:
  • 禁止任何使用进程的代码:(如:Process、ProcessStartInfo、System.Diagnostics…)。
  • 禁止任何读取操作系统用户信息的操作:(如:ProductEnvironmentService、IEnvironmentDetectService、EnvironmentDetect、ProductEnvironment、Environment…)。
  • 禁止使用本地文件操作(网络流操作,平台规定的临时目录除外):(如:System.IO、FileStream、StreamWriter、TextWriter、BufferedStream、MemoryStream、BinaryWriter、File.Create、Directory.CreateDirectory…)。
  • 禁止任何Socket侦听的代码:(如:Socket、System.Net.Sockets、SocketAsyncEventArgs、SocketServiceManager、SocketClientManager…)。
  • 禁止调用管理中心或其他BOS禁用调用接口:(如:GetManagementDataCenterContext、Kingdee.BOS.MC.ServiceHelper、Kingdee.BOS.MC、Kingdee.BOS.MC.App、Kingdee.BOS.MC.ServiceFacade…)。
  • 禁止UnSafe代码使用。

设计规范

  • 禁止在大批量循环中,执行低性能或是高数据量SQL,会导致严重性能问题。
  • 代码中Sql脚本使用KSql规范,KSql具体规范参见《金蝶KSQL规范》

脚本编写规范

KSQL规范

DDL规范

  • 表名视图名必须以开发商标识加下划线排头[{ISV标识符}_T_{名称}](如:ABC_T_USER)。
  • 字段名必须以F下划线加开发商标识加下划线排头[F_{ISV标识符}_{名称}](如: F_ABC_USERNAME)。
  • 表必须有物理主键,建立聚集索引。
  • 主键原则上使用整型(不允许用自增长主键),数据量较小的表可以使用字符型。
  • 禁止修改标准产品视图。
  • 禁止删除物理表(临时表除外)。
  • 不建议使用存储过程。
  • 主键和索引字段的值不允许为null。
  • GUID字段不允许建立为聚集索引。
  • 主从关系表,从表需要引用主表中某个字段,字段名称要求一致,外键字段考虑建立非聚集索引。
  • 一般数量、金额类型:必须使用精确数值类型,如:Decimal,禁止为空,指定默认值为0;禁止使用Double、Float、Money等非精确类型,对这种类型固定为Decimal(23,10)、Decimal(19,6),必须明确指定小数精度。
  • 字符类型,统一使用nvarchar数据类型。
  • Not null属性的字段,必须设置缺省值。
  • 多语言字段单独放在一张表中,外键字段必须建立非聚集索引。
  • 使用ntext数据类型替代text数据类型。
  • 临时表必须显式地创建,使用完毕后必须显式地删除。

DML规范

  • 任何查询都要带查询条件。
  • 查询条件必须使用参数化查询。
  • 保持事务简短并处于一个批处理中。
  • 使用较低的隔离级别。如对于查询报表和序时簿等查询,设置较低的事务隔离级别,提高并发能力。
  • 必须使用join语句进行表间连接,禁止使用where条件进行表连接。
  • Join表数量数量控制在10个以内,如果超出,需要考虑其他实现方案。
  • 预插数据insert前必须按主键匹配删除再插入。
  • 一次批量提交SQL的语句不应该超过500条,如果超过,需要分几次提交。
  • 可以关联物理表实现的SQL语句,不要关联视图。
  • SQL脚本中禁止使用外部联接运算符“*=”和“=*”。
  • ORDER BY子句中的字段别名禁止使用表别名作为前缀。[SQL SERVER2005下执行中断]。
  • 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
  • 不要在where条件中使用函数,否则将不能利用索引。
  • 在where条件中使用明确的字段类型值,避免由于隐式转换而不能正确使用索引。
  • where子句中不要使用case条件。
  • 对于where条件中查询连续的数值,使用between 替代 in。
  • 如果in子句中需要查询的值较多(大于30个),必须使用表函数方式实现。
  • 不允许使用fid in(select fid from … ),必须采用exist(select 1 from … where v.fid = fid)的方式。

API开发规范

  • Api开发必须使用金蝶云星空第三方系统登录授权,由系统管理员确认授权,保障秘钥安全。
  • 已授权的第三方登录信息必须在第三方系统中正确配置,并保障秘钥安全,禁止在未经授权下分发给其他第三方。
  • Api开发必须使用标准SDK,具体SDK下载地址参见:API中心
  • Api开发必须按照接口标准调用金蝶云星空接口,具体接口标准参见:API中心