大家好,我是周旋。今天讲一下什么是前后端分离呢。
额,其实就是前端与后端分离(大废话!),前端只负责界面交互,后端负责功能实现。
1、降龙项目是如何进行前后端分离的
这么空讲概念没有用,我们以降龙算法项目为例,降龙算法项目其实就是前后端分离的。
整个项目的文件夹结构如上图所示,基本所有开源项目也是上面这样的构成:
当然,上面这些和前后端分离没有一毛钱关系,我们只是介绍了下一个项目的文件夹应该有哪些构成。
而下图就是我们的前后端分离部分了,在我们的src源码文件夹内,包含了我们所有的前端代码和后端代码:
降龙项目整个软件构成如下图所示:
我们的软件框架部分以及插件部分,统称为前端,而算法动态库,则成为后端。现在可以理解何为前后端分离了吧?
如果没理解,没关系,继续往下看。
如上图所示,就是没有加载任何插件的降龙软件本身,包括了日志功能、缩略图功能、插件加载功能、插件运行功能等上层功能,属于前端部分。而算法本身的执行,均位于插件内部。
上图是加载了算法插件之后的降龙界面。算法插件加载了降龙算法动态库,然后算法插件的界面负责了算法参数的配置与运行图像的展示,所以算法插件也属于前端部分,负责用户交互。而算法库,则属于后端,负责纯粹的算法功能。
也就是说,我们称软件框架部分和插件,都为前端,而算法库,则成为后端。
2、为什么要前后端分离
前后端分离有若干的好处。
总之,前后端分离是非常有必要的,也是软件开发最基础的一个思想之一,大家做项目时,也应该注意前后端的分离和代码之间的解耦合,培养正确的软件思维。
3、机器视觉中常用的前后端分离方式
机器视觉行业的软件,上位机因为功能都是专机专用,所以可能所有代码不会讲究解耦合,直接所有功能都写在一起了。
但在大型的拖拉拽平台软件中,前后端分离是必不可少的。
例如业内最常见的,就是由C#做前端软件的界面和框架部分,后端功能由C++来做,以动态库的形式提供给前端,由前端C#调用C++动态库来实现前后端分离。那算法库呢?算法库也是独立的一个动态库部分,由对应的后端C++动态库来调用。
举个例子,例如下图的架构:
可以看出和我们最上面的那张降龙算法项目架构的图有什么区别吗?其实中间橙色的后端C++动态库,和我们降龙项目的插件这一层是同样的作用,都是负责将算法接入到我们的软件框架之中,并定义算法的交互界面。区别仅是使用到的技术不同。
再深入讲一下!记得点赞收藏。这两者技术有何不同?
两者都负责将算法接入到我们的软件框架之中,并定义算法的交互界面。技术不同在哪里呢。QT的插件机制,使得我们可以直接用QWidget来定义我们的算法参数配置界面,使用起来非常方便,这得益于QT强大的插件机制。而我们使用C++动态库来封装算法库呢,就无法直接生成参数配置界面了。需要借助一些技术手段。
那要如何实现呢?
一般都会采用json或者xml这种序列化配置语言,来定义我们的算法配置界面,然后当前端C#框架加载我们的动态库时,采用反射或者其它技术形式来解析json或者xml序列化配置文件,进而动态的生成我们算法的参数配置界面。这其实就是整个机器视觉行业平台软件框架的实现最常见的套路了。
能看出来,如果使用QT的话,确实非常方便强大,可以省去很多步骤。