vs2017做的网站,余姚网站制作公司,网站设计毕业设计任务书,百度一键优化序言 本文分享一个通过数据库#xff08;ORACLE#xff09;的存储过程#xff0c;遵循“对修改封闭#xff0c;对增加开放”的开闭原则#xff0c;实现的可扩展性极强的灵活接口方案。 背景 本人从事离散型MES系统的开发工作#xff0c;近期负责了一个PCBA#xff08;电…序言 本文分享一个通过数据库ORACLE的存储过程遵循“对修改封闭对增加开放”的开闭原则实现的可扩展性极强的灵活接口方案。 背景 本人从事离散型MES系统的开发工作近期负责了一个PCBA电子、手机行业的MES系统二开工作。PCBA行业使用ATE工具自动测试工具进行写号、查号、置标志位等工作写号查号等相关数据需要与MES系统进行数据交互同时MES系统也需要管控ATE工具的作业流程。如查号必须在写号后没有写号的工具不能进行查号等流程管控。由于ATE工具的测试不须人员参与所以MES系统需要开发相关接口给ATE工具端调用进行数据交互和流程管控等工作。 MES系统前期已有途程检查分配IMEI、MAC、BT数据过站等相关基础接口可供ATE工具调用基本能满足要求。但在面对某些客户定制化的需求时如上传软件版本、记录测试内容就必须在原有接口的基础上增加或修改程序然后把C#编写的dll封装成COM组件因为ATE工具使用C编写的更新文档再通知ATE工具编写人员重新连入新版本进行编写和调试最后再更新现有工具的所有版本。别看流程描述起来比较简单但实际操作起来涉及到沟通、部门协作等问题非常繁琐累人。 基于上述原因笔者思考是否有一个方案能够灵活面对客户的定制化需求又不需涉及到太多变更特别是重新编译、重新连入和更新等操作。有志者事竟成经过一番研究与思考后笔者决定采用“存储过程”来进行实现。 整体方案 方案详述 为了更好的讲述该方案下面将以代码或伪代码的方式进行讲述。 接口方法调用存储过程 public bool SetATEData(string iCmdType, string iText, out string oText, out string oErrMessage){return ExecProc.ProcInputPara(iCmdType, iText, out oText, out oErrMessage);} 对该方法的详细介绍如下 Bool SetATEData(String iCmdType, String iText, String oText, String oErrMessage) 参数说明 iCmdType----传入的接口代码如1001可自定义 iText-----------传入此接口参数列表采用键值对的方式传入以“|”分隔例如 “Field1Value1|Field2Value2|Field3Value3|... … ”也可定义其他分隔符如有需要请考虑转义字符 oText----------如接口需要返回参数的列表采用键值对的方式输出以“|”分隔例如 “Key1Value1| Key2Value2| Key3Value3|... … “可为空 oErrMessage----当方法返回false时传出具体的出错信息 注 ExecProc.ProcInputPara(iCmdType, iText, out oText, out oErrMessage)是笔者写的一个静态方法用于调用存储过程。实际应用中需要自行编写。为了做好记录笔者也会上传该静态类仅供参考。 存储过程统一入口 根据传入的iCmdType查询对应的存储过程名称若存在则动态执行该存储过程。 储存存储过程的表格结构如下所示 存储过程的代码ORACLE 11g版本如下所示 CREATE OR REPLACE PROCEDURE PROCDLLBASE (ICMDTYPE IN VARCHAR2,ITEXT IN VARCHAR2,OTEXT OUT VARCHAR2,OERRMSG OUT VARCHAR2,ORESULT OUT INTEGER)
AS
v_Sql varchar2(4000);
v_ProcName TBLPROCGROUP.PROCNAME%TYPE;
i_ProcCount integer;
BEGINSELECT COUNT(1) INTO i_ProcCount from TBLPROCGROUP where PROCIDICMDTYPE;IF i_ProcCount0 THENOERRMSG:CMDTYPE2PROC_NOT_FOUND;ORESULT:0;RETURN;END IF;SELECT PROCNAME INTO v_ProcName from TBLPROCGROUP where PROCIDICMDTYPE;v_Sql:begin || v_ProcName || (:itext,:otext,:oerrmsg,:oresult);end;;EXECUTE IMMEDIATE v_Sql using in ITEXT,out OTEXT,out OERRMSG,out ORESULT;EXCEPTIONWHEN OTHERS THENROLLBACK;OERRMSG:CMDTYPE2PROC_UNKNOWN_ERROR;ORESULT:0;RETURN;
END PROCDLLBASE; 子存储过程 根据业务需求编写对应的存储过程并将iCmdType与存储过程名称关联后储存至TBLPROCGROUP表格中。 子存储过程中涉及到输入参数的解析输入参数的非空性校验及重复性校验这些都是保证系统稳健性的需要。 总结 通过上述方案当客户再有其他需求时只需根据业务逻辑创建存储过程并分配iCmdType与之关联即可实现接口的扩展。 ATE工具开发人员也只需要按照文档的格式传参并解析输出参数即可免却编译程序封装COM组件及更新的繁琐流程。转载于:https://www.cnblogs.com/huangmianwu/p/6133715.html