企业信息系统集成框架(设计思路)C++模式

设计要求:

1.企业信息系统框架、第三方产品通过接口层进行分层。

2.企业信息系统框架如何自由的继承第三方产品:通过一个抽象类。(软件设计要求:模块要求松,接口要求紧)。

设计步骤:

1.报文的接受与发送抽象类;

  C++与C语言设计区别:C语言中有个句柄,原因是需要分配一个结构体资源,把发送和接受的信息存储起来。而C++中由于有类的存在,可以直接将这个句柄内容存储在子类中,不需要再单独设置。

2.测试界面面向抽象类框架集成,开始初步完成测试界面.

4.厂商的产品实现(自己的头文件和.cpp文件)

5.搭建加解密产品接入信息系统

1)创建加解密抽象类头文件

2)厂商实现具体内容

3)接入测试层

6.将测试界面的框架集成为一个类(有两种方式:继承与组合)

下面是代码:

1.报文的发送与接收抽象类框架。

 1 #pragma once
 2
 3 //写一套接口,用纯虚函数写;用来接收和发送数据
 4 class CSocketProtocol
 5 {
 6 public:
 7     //客户端初始化
 8     virtual int Init_Socket(/*in*/) = 0;
 9
10     //客户端发送报文
11     virtual int Send_Socket(unsigned char *sendBuf/*in*/, int sendLen/*in*/) = 0;
12
13     //客户端接收报文
14     virtual int Recv_Socket(unsigned char *recvBuf/*in*/, int *recvLen/*out*/) = 0;
15
16     //客户端释放资源
17     virtual int Destroy_Socket(/*in*/) = 0;
18
19     //虚析构函数,可以用来释放所有的子类和基类资源
20     virtual ~CSocketProtocol()
21     {
22         ;
23     }
24 };

2.单个厂商对此抽象类的实现(包含了厂商的头文件和厂商代码的实现)

 1 #pragma once
 2 #include<string>
 3 #include "CSocketProtocol.h"
 4
 5
 6 //注意C++与C最大不通过在这里:C++可以把信息直接存储在类中;C需要创建一个结构体来收发内容
 7 class ProductA : public CSocketProtocol
 8 {
 9 public:
10     //客户端初始化
11     virtual int Init_Socket(/*in*/);
12
13     //客户端发送报文
14     virtual int Send_Socket(unsigned char *sendBuf/*in*/, int sendLen/*in*/);
15
16     //客户端接收报文
17     virtual int Recv_Socket(unsigned char *recvBuf/*in*/, int *recvLen/*out*/);
18
19     //客户端释放资源
20     virtual int Destroy_Socket(/*in*/);
21
22 //设置类的私有属性,将收发的内容存储在类中。
23 private:
24     unsigned char *BaoWen;
25     int len;
26
27 };
 1 #pragma once
 2 #include "ProductA.h"
 3
 4
 5     //客户端初始化
 6 int ProductA::Init_Socket(/*in*/)
 7 {
 8     BaoWen = NULL;
 9     len = 0;
10     return 0;
11 }
12
13 //客户端发送报文
14 int ProductA::Send_Socket(unsigned char *sendBuf/*in*/, int sendLen/*in*/)
15 {
16     if (sendBuf == NULL)
17         return -1;
18
19     this->BaoWen = (unsigned char *)malloc(sizeof(unsigned char)*sendLen);
20     if (!BaoWen)
21     {
22         return -2;
23     }
24     memcpy(BaoWen, sendBuf, sendLen);
25     len = sendLen;
26     return 0;
27 }
28
29 //客户端接收报文
30 int ProductA::Recv_Socket(unsigned char *recvBuf/*in*/, int *recvLen/*out*/)
31 {
32     if (recvBuf ==NULL)
33         return -1;
34     if (recvLen == NULL)
35         return -2;
36     memcpy(recvBuf, BaoWen, len);
37     *recvLen = this->len;
38     return 0;
39 }
40
41 //客户端释放资源
42 int ProductA::Destroy_Socket(/*in*/)
43 {
44     if (BaoWen != NULL)
45     {
46         free (BaoWen);
47         BaoWen = NULL;
48         len = 0;
49     }
50     return 0;
51 }

3.加解密的抽象类框架。

 1 #pragma once
 2 #include <iostream>
 3
 4 class EncDec
 5 {
 6 public:
 7     //加密函数
 8     virtual int EncData(unsigned char *plain, int plainLen, unsigned char *miBuf, int *miLen) = 0;
 9     //解密函数
10     virtual int DecData(unsigned char *miBuf, int miLen, unsigned char *plainBuf, int *palinLen) = 0;
11     ~EncDec()
12     {
13         ;
14     }
15 };

4.单个厂商加解密的函数实现(包含两部分:厂商的头文件和代码实现)

 1 #pragma once
 2 #include"EncDec.h"
 3 #include "des.h"
 4
 5 class HwEncDec : public EncDec
 6 {
 7 public:
 8     //加密函数
 9     virtual int EncData(unsigned char *plain, int plainLen, unsigned char *miBuf, int *miLen);
10     //解密函数
11     virtual int DecData(unsigned char *miBuf, int miLen, unsigned char *plainBuf, int *palinLen);
12 };
 1 #include"HwEncDec.h"
 2 #include "des.h"
 3
 4 //加密函数
 5 int HwEncDec::EncData(unsigned char *plain, int plainLen, unsigned char *miBuf, int *miLen)
 6 {
 7     if (plain == NULL)
 8         return -1;
 9     if (miBuf == NULL)
10         return -2;
11     if (miLen == NULL)
12         return -3;
13     int ret = 0;
14     ret = DesEnc(plain, plainLen, miBuf, miLen);
15     if (ret != 0)
16     {
17         printf("DesEnc()error:[%d]\n", ret);
18         return ret;
19     }
20     return ret;
21 }
22 //解密函数
23 int HwEncDec::DecData(unsigned char *miBuf, int miLen, unsigned char *plainBuf, int *palinLen)
24 {
25     if (miBuf == NULL)
26         return -1;
27     if (plainBuf == NULL)
28         return -2;
29     if (palinLen == NULL)
30         return -3;
31     int ret = 0;
32     ret = DesDec(miBuf, miLen, plainBuf, palinLen);
33     if (ret != 0)
34     {
35         printf("DesDec()error:[%d]\n", ret);
36         return ret;
37     }
38
39     return ret;
40 }

5.测试界面的集成调用:

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include<iostream>
  3 using namespace std;
  4 #include"CSocketProtocol.h"
  5 #include"ProductA.h"
  6 #include "EncDec.h"
  7 #include "HwEncDec.h"
  8
  9 //测试框架步骤:
 10 //1.先创建一个接口抽象类指针;指向具体的第三方产品
 11 //2.设计接收和发送报文的内存及其长度变量
 12 //3.测试界面面向抽象类框架集成:设计一个函数将;将抽象类的指针和接发报文内容集成起来。
 13
 14
 15 //3.测试界面面向抽象类框架集成
 16 int SekSendAndRecv11(CSocketProtocol *csp, EncDec *ecdc, unsigned char *in, int inLen, unsigned char *out, int *outLen)
 17 {
 18     int ret = 0;
 19     //创建接收密文的内存和长度
 20     unsigned char miWen[1024] = { 0 };
 21     int miwenLen = 0;
 22     //创建接受明文的内存和长度(可以不创建,和密文用同一个)
 23     unsigned char plain[1024] = { 0 };
 24     int plainLen = 0;
 25     //客户端初始化
 26     ret = csp->Init_Socket();
 27     if (ret)
 28     {
 29         printf("Init_Socket()error:[%d]\n", ret);
 30         goto End;
 31     }
 32
 33     //发送数据前先进行加密
 34     ret = ecdc->EncData(in, inLen, miWen, &miwenLen);
 35     if (ret)
 36     {
 37         printf("EncData()error:[%d]\n", ret);
 38         goto End;
 39     }
 40
 41     //客户端发送报文
 42     ret = csp->Send_Socket(miWen, miwenLen);
 43     if (ret)
 44     {
 45         printf("Send_Socket()error:[%d]\n", ret);
 46         goto End;
 47     }
 48
 49     //客户端接收报文
 50     ret = csp->Recv_Socket(plain, &plainLen);
 51     if (ret)
 52     {
 53         printf("Recv_Socket()error:[%d]\n", ret);
 54         goto End;
 55     }
 56
 57     //接受的报文为加密内容,需要解密。
 58     ret = ecdc->DecData(plain, plainLen, out, outLen);
 59     if (ret)
 60     {
 61         printf("DecData()error:[%d]\n", ret);
 62         goto End;
 63     }
 64 End:
 65     //客户端释放资源
 66     ret = csp->Destroy_Socket();
 67
 68
 69     return 0;
 70 }
 71
 72 int main()
 73 {
 74     int ret = 0;
 75     //1.先创建一个接口抽象类指针;指向具体的第三方产品
 76     CSocketProtocol *csp = NULL;
 77     csp = new ProductA ;
 78     EncDec *ecdc = NULL;
 79     ecdc = new HwEncDec;
 80
 81     //2.设计接收和发送报文的内存及其长度变量
 82     unsigned char in[1024];
 83     int inLen;
 84     unsigned char out[1024];
 85     int outLen;
 86     strcpy((char *)in, "ahgquwquwqeyqufnaskmc");
 87     inLen = 10;
 88
 89     //3.设计一个函数将;将抽象类的指针和接发报文内容集成起来。
 90     ret  = SekSendAndRecv11(csp, ecdc, in, inLen, out, &outLen);
 91     if (ret)
 92     {
 93         printf("SekSendAndRecv()error:[%d]\n", ret);
 94         return ret;
 95     }
 96     printf("out: %s\n", out);
 97     printf("outLen: %d\n", outLen);
 98
 99
100     //不要忘了释放基类与子类的资源(虚析构函数可以释放基类与派生类的资源释放)
101     delete csp;
102
103     system("pause");
104     return ret;
105 }

6.将测试界面的框架集成为一个类(有两种方式:继承与组合)

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include<iostream>
  3 using namespace std;
  4 #include"CSocketProtocol.h"
  5 #include"ProductA.h"
  6 #include "EncDec.h"
  7 #include "HwEncDec.h"
  8
  9 class mainOp
 10 {
 11 public:
 12     mainOp()
 13     {
 14         csp = NULL;
 15         ecdc = NULL;
 16     }
 17     mainOp(CSocketProtocol *csp, EncDec    *ecdc)
 18     {
 19         this->csp = csp;
 20         this->ecdc = ecdc;
 21     }
 22     void setCSP(CSocketProtocol *csp)
 23     {
 24         this->csp = csp;
 25     }
 26     void setEcDc(EncDec    *ecdc)
 27     {
 28         this->ecdc = ecdc;
 29     }
 30     int SekSendAndRecv(unsigned char *in, int inLen, unsigned char *out, int *outLen)
 31     {
 32         int ret = 0;
 33         //创建接收密文的内存和长度
 34         unsigned char miWen[1024] = { 0 };
 35         int miwenLen = 0;
 36         //创建接受明文的内存和长度(可以不创建,和密文用同一个)
 37         unsigned char plain[1024] = { 0 };
 38         int plainLen = 0;
 39         //客户端初始化
 40         ret = csp->Init_Socket();
 41         if (ret)
 42         {
 43             printf("Init_Socket()error:[%d]\n", ret);
 44             goto End;
 45         }
 46
 47         //发送数据前先进行加密
 48         ret = ecdc->EncData(in, inLen, miWen, &miwenLen);
 49         if (ret)
 50         {
 51             printf("EncData()error:[%d]\n", ret);
 52             goto End;
 53         }
 54
 55         //客户端发送报文
 56         ret = csp->Send_Socket(miWen, miwenLen);
 57         if (ret)
 58         {
 59             printf("Send_Socket()error:[%d]\n", ret);
 60             goto End;
 61         }
 62
 63         //客户端接收报文
 64         ret = csp->Recv_Socket(plain, &plainLen);
 65         if (ret)
 66         {
 67             printf("Recv_Socket()error:[%d]\n", ret);
 68             goto End;
 69         }
 70
 71         //接受的报文为加密内容,需要解密。
 72         ret = ecdc->DecData(plain, plainLen, out, outLen);
 73         if (ret)
 74         {
 75             printf("DecData()error:[%d]\n", ret);
 76             goto End;
 77         }
 78     End:
 79         //客户端释放资源
 80         ret = csp->Destroy_Socket();
 81         return 0;
 82     }
 83 private:
 84     CSocketProtocol *csp;
 85     EncDec            *ecdc;
 86 };
 87
 88 int main()
 89 {
 90     int ret = 0;
 91     //1.先创建一个接口抽象类指针;指向具体的第三方产品
 92     CSocketProtocol *csp = NULL;
 93     csp = new ProductA;
 94     EncDec *ecdc = NULL;
 95     ecdc = new HwEncDec;
 96
 97     //继承类的两种使用,调用有参构造和采用注入方式:
 98     //第一种:采用外部注入
 99     mainOp *mop = new mainOp;
100     mop->setCSP(csp);
101     mop->setEcDc(ecdc);
102
103     //第二种:采用调用有参构造
104     //mainOp *mop = new mainOp(csp,ecdc);
105
106     //2.设计接收和发送报文的内存及其长度变量
107     unsigned char in[1024];
108     int inLen;
109     unsigned char out[1024];
110     int outLen;
111     strcpy((char *)in, "ahgquwquwqeyqufnaskmc");
112     inLen = 10;
113
114     ret = mop->SekSendAndRecv(in, inLen, out, &outLen);
115     if (ret)
116     {
117         printf("SekSendAndRecv()error:[%d]\n", ret);
118         return ret;
119     }
120     printf("out: %s\n", out);
121     printf("outLen: %d\n", outLen);
122
123
124     //不要忘了释放基类与子类的资源(虚析构函数可以释放基类与派生类的资源释放)
125     delete csp;
126     delete ecdc;
127     delete mop;
128
129     system("pause");
130     return ret;
131 }

7.代码中的注意点:

  1)头文件“des.h”是我此次所用的加密文件;由于太大,就不上传了,你们可以换成自己的就行。

时间: 2024-10-06 11:56:48

企业信息系统集成框架(设计思路)C++模式的相关文章

企业信息系统集成框架(设计思路)C模式

1.客户端.h文件 1 #pragma once 2 #include<stdlib.h> 3 //A程序员定义接口形式和调用模式 4 5 6 //初始化句柄 7 typedef int(*Init_Socket)(void **handle); 8 9 //发送数据,传入句柄中 10 typedef int(*Send_Socket)(void *handle, unsigned char *sendbuf, int sendLen); 11 12 //从句柄中输出数据给内存 13 type

unity3D 游戏开发之工程代码框架设计思路MVC

unity3D 游戏开发之工程代码框架设计思路MVC 设计目的 1.使工程结构更规范. 2.提高代码可读性,封装性,拓展性 3.提高工作效率. 正文内容: 1.Frame的组成结 (1)视图层(View) (2) 控制层(Control) (3)数据层(Model) 整个Frame是由这三个部分组成,每一层管理属于自己的逻辑,核心思想是游戏逻辑和UI 逻辑独立开.目前遇到的项目工程大多数View和Control逻辑都写在一起,这样后期修改 和维护效率会很低,因为耦合性很高而View又是经常要修改

开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结

又狂撸了一周的代码.简化了0904版本的多数操作. 上一次更新时,总共需要10步,这次简化成3步.嗯嗯,自我感觉不错. 重要的:在创建项目时,可以选择常用模块啦! 第一步:启动CIIP.Designer 第二步:创建Customer业务对象. 第三步:点击生成按钮.出现登录界面,按下确定按钮. 好了,这就是结果,数据是为了方便理解,我录入的. 另外,还有一步创建子表: 生成看结果:多出了一个Order子表. 打不过我吧,就是这么强大~~~~~ <完> 原文地址:https://www.cnbl

SSDT HOOK 框架设计思路

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 代码 3-4 1. 驱动中用户输入PID,通过一系列函数和遍历模块来确定对应的ntdll模块. 2. 在ntdll模块的导出表,通过遍历名字来获取函数导出序号. 其Ntdll中Zw函数开头为 mov eax,序列号,因此我们从第二个字节后获取的就是对应的序列号. 3. 找到索引之后,直接从导出表 KeServiceDescriptorTable 中直接获取,如果记

3月7日信息系统集成第一课的课后作业

作业题目:本节课的重点. 内容如下: (1)国家信息化体系六要素: a)信息技术应用:龙头: b)信息资源:国家信息化得核心任务,取得实效的关键: c)信息网络:是基础,分为电信网.广播电视网和计算机网: d)信息技术和产业: e)信息化人才:成功之本,信息化建设的关键: f)信息系统政策法规和标准规范:根本保障. (2)电子政务: a)需求主导,突出重点. b)政务内网(副省级以上政府部门办公网)和政务外网(政府的业务专网),两网之间是物理隔离.政务外网和互联网之间是逻辑隔离. c)电子政务的

Socket开发框架之框架设计及分析

虽然在APP应用.Web应用.Winform应用等大趋势下,越来越多的企业趋向于这些应用系统开发,但是Socket的应用在某些场合是很必要的,如一些停车场终端设备的接入,农业或者水利.压力监测方面的设备数据采集等,以及常见的IM(即时通讯,如腾讯QQ.阿里旺旺等)的客户端,都可以采用Socket框架进行相关的数据采集和信息通讯用途的,Socket应用可以做为APP应用.Web应用和Winform应用的补充. 1.Socket应用场景 一般情况下,客户端和服务端进行Socket连接,需要进行数据的

公司法的模式与设计思路

摘要:公司法在保障国民经济平稳规范运行中起着重要作用,其作为一种基础性的法律法规,它的具体综述表现了普遍的经济运行规律.通过良好的立法理念和制度设计对市场活动主体进行规制约束和引导,对公司的形成.财产保护.资本交易运作方式等起到根本性的构建作用. 关键词:公司法,公司自治,公司法模式,治理结构,董事会,关联交易 一.公司法的制度模式 家族本位的公司法模式.国家本位的公司法模式和公司本位的公司法模式是世界上现存的三种公司法模式. 因 为历史的原因和家族企业的传统,在东亚法系和一些欧洲国家,为了适应

企业信息平台的快速搭建,框架如何选?

企业信息平台的快速搭建,框架如何选? Web端开发框架如何选 目前,大部分的企业信息集成系统都在web端运行,而搭建框架的选择对一个企业的发展至关重要,不过其最终目的都是要符合企业发展逻辑,助力企业战略的实施. 而在框架的选择上就是一个仁者见仁的事情了,就从底层框架来说,web层的就非常多,而且各有特色,比如:Struts.WebWork.Spring MVC.Tapestry.JSF.WebPage3.0--等等. 那么为什么要使用框架呢? 使用框架的必然性 框架,即framework,说白了

新书出版《.NET框架设计—模式、配置、工具》感恩回馈社区!

很高兴我的第一本书由图灵出版社出版.本书总结了我这些年来对框架学习.研究的总结,里面纯干货,无半句废话. 书的详情请看互动网的销售页面:http://product.china-pub.com/3770890 精彩推荐: “这本书最大的价值就在于告诉你如何在实战中运用平时学到的知识,如何站在不同的角度分析和解决问题.与市面上其他图书不同,这本书中的内容都是清培在工作中遇到实际问题后分析得出的经验.对我而言,里面的各种设计都具有独到的见解,往往能将复杂的问题简化成优雅的模式.”  ——刘星亮,携程