软件开发篇1:MFC、MVC、中间件、python与C++主从通信

注一:

1. 科研 = 数学 + 简化,深入浅出。聚焦理论分析与算法创新,工程性设计简化,浅尝辄止。

2. 软件构架的本质手法理解是封装和分层。

注二:

       现在来了一个项目,你可以直接打开VS,然后就开工敲代码吗?不行,你得先创建项目,当使用了分层架构,还需要创建更多的项目,这些项目根据依赖关系进行配置。然后依次引用各种依赖组件进行配置。配置好项目以后,你还得测试各依赖组件是否能正常工作,可能你的运气比较好,一下就全部测试通过。但也有比较背的时候,半天调不通,这时候你会发现环境问题有时比代码Bug更难搞。从头开始创建和配置开发环境是劳神的工作,当你手头有套自己的应用程序框架,情况就大不相同了,它为你提供了现成的开发环境。

参考:http://www.aizhengli.com/yingyongchengxukuangjiashizhan/124/你需要应用程序框架吗.html

一、软件构架模式

1. 目的:通过经验总结,设计一套可重用、可维护、可扩展、灵活性的解决方案

2. 单层框架:用于简单项目,简单、快速。

3. 分层模式:按依赖关系分解子任务组程序,使每个子任务处于一个特定的抽象级别。实现“高内聚低耦合”,易于维护。如:传统三层框架:表现层、业务逻辑层、数据访问层。

4. 应用场景:桌面应用、电子商务Web应用。

参考:https://www.cnblogs.com/jingxiaopu/p/9096907.html  软件架构模式---分层架构V2.0

二、应用程序框架与第三方框架(框架是构架的具体实现)

                                                         

 .Net Framework = 基础类库    第三方框架 = 某个领域封装好的API    

应用程序框架 = 针对整体应用程序的API,简化开发,终极封装

1. 应用程序框架

      背景:敏捷时代的开发过程。面对高昂的学习成本以及大量技术的集成和管理,大部分公司会让经验丰富的老手摸索新技术,并创建应用程序框架,而新手只需要了解该框架的使用即可,大量的技术将被封装到应用程序框架中。虽然打造一套适合本公司或本项目的应用程序框架并不十分困难,但也不是每个公司都有能力完成,在我接触的一些小公司,发现他们对应用程序框架毫无认识,代码异常混乱,开发效率低下

参考:http://www.aizhengli.com/yingyongchengxukuangjiashizhan/121/yinyan.html 应用程序框架开发实战

总结:应用程序框架,将技术封装,降低学习成本,提高开发效率。

2. 第三方框架

       针对某个特定领域提供解决方案

3. 应用程序框架与第三方框架的关系

       随着开源事业的发展,第三方开源框架名目繁多,层出不穷,另外第三方应用平台也多如牛毛。如果在应用程序中直接使用这些三方API,势必被牢牢绑定,无法脱身,当要切换框架或应用平台时,不得不重写应用程序代码。如果把第三方框架或应用平台API封装到应用程序框架中,应用程序仅使用自己框架提供的API,这样就可以轻松切换相关实现了。

三、框架与类的区别

库:一些技术、方法封装成函数

框架:其实就是一条生产线,一整套开发流程,里面配置了各种工具,还有一定的规则,你按照这个框架约定的规则去编写,填充代码,就可以运行出预期的效果了。 

库就像一个个零件,框架就像一辆组装得差不多的整车。

四、微软基础类库(Microsoft Foundation Classes,MFC)

        微软基础类库是微软公司提供的一个类库,以C++类的形式封装网络Windows API,并包含一个应用程序框架,以减少应用程序开发人员的工作量。其中类包含大量Windows句柄封装类和Windows内建控件和组件的封装类。可以在Windows平台做GUI开发使用。

API:操作系统对应用程序约定的封装函数,帮助应用程序访问系统资源,取得系统服务。

句柄:是Windows程序的一个重要概念,在Windows程序中,有各种资源如窗口、图标、光标、画刷等。系统在创建这些资源时会为其分配内存,并返回标识资源的标识号即句柄

MFC vs GLFW  都是做GUI的类库,有时候可以一起使用。

五、跨语言跨平台通信项目几种思路

(一)几种建立通信思路 

1. Socket

客户端/服务器编写实例:https://www.runoob.com/python/python-socket.html

评价:Socket是比较底层编程通信。稳定性等性能可能稍差。

2. Http

Http方法建立通信主要用几个常用的请求(request)有:Get、Post....

这次遇到的C++(client),与Python(server)建立通信,因为传递参数比较简单,用带参数的Get请求实现。

3. 中间件

中间件建立通信应该是延迟最小,性能最好的。比较高效的如phrose,用的比较多thrift。对Java、Php开发的较大工程会比较好。C++方面的材料比较少,本次工作本想用hprose解决,奈何材料太少,thrift需要编译的库也比较多,涉及到环境配置和编译就比较费事,后来用http方法解决了。

整理的一些比较有用的材料:

https://blog.csdn.net/omodao1/article/details/83927282 C++通过HTTP请求Get或Post方式请求Python Flask Json数据

我抄的上面这个,少量修改即可使用,感谢大佬!

https://blog.csdn.net/c_shell_python/article/details/96516627 c++封装HTTP GET请求访问网站

https://blog.csdn.net/wo18237095579/article/details/80482027 为GET和POST请求添加请求参数和请求头

https://blog.csdn.net/linux_hacher/article/details/78753805 python 搭建简单的http server,可直接post文件

https://blog.csdn.net/u014049599/article/details/79998674 C++ 一个简单的实现HTTP GET和POST请求的类

https://blog.csdn.net/print_out/article/details/90609932 C++ vs2017 http简单post/get请求

(二)遇到的一些常用概念:

1、中间件:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息

2、阻塞非阻塞、 同步异步

同步异步关注的是发送调用结束是否等待调动结果

同步指,一次调用没得到结果就不返回,返回就带着返回值。异步指,调用发完直接返回,不管结果。

在http中,单独一个请求是同步的,比如带参Get。Post送服务器数据,Get客户端获取数据,就是异步的。本次工作server处理比较快所以采用带参Get实现,否则可以选择异步。

阻塞和非阻塞关注的是等待调用结果时调用线程是否挂起

阻塞调用是指调用结果返回之前,当前线程会被挂起。即调用线程等待结果。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

可以看出,阻塞非阻塞都是同步。

3、rpc与http协议 

两种远程调用方式,RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

4、ping

系统自带的功能一般被用于检测网络连接的正常与否。进入命令行,Windows用ipconfig,Linux用ifconfig.....

具体参考:https://jingyan.baidu.com/article/47a29f248301a2c014239990.html

5、Json

Json是一种轻量级的数据交换格式。易于人阅读和编写。

6、Flask

       Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。

其他参考资料:HTTP,TCP, socket,RPC 与gRPC都是啥? https://www.jianshu.com/p/959030de7f1c

  • 2
    点赞
  • 3
    评论
  • 9
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 3 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

茶花煮酒

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值