theme: cyanosis
好久没有写博客了,最近一直在做项目重构,动刀之深,让我无暇其他。今天终于告一段落了,就总结一下前段时间学习C++时的一些开发心得吧。
因为Android系统️C++ 语言开发的原因,每个 Android开发者都或多或少的涉及过一些C++ 的开发,但是作为一个常年开发Android的人来讲,开发C++时变得不合乎常理,总感觉写的东西就是一个Demo,或者不知道怎么在工程中开发C++。
架构设计
首先,Android开发C++相关的东西,现在变的非常简单,只需要在创建项目时,根据AS的提示创建包含C++ 的开发环境,即可将需要的JNI环境全部创建出来,再稍微了解一下cmake的语法,没什么技术难度。
工具选择
- 纯Android项目 :AS对C++的开发语法支持也是较好的,所以直接在AS中开发即可
- 需要开发多平台项目:由于可能出现多个平台不同特性的开发,我们可以选择更专业的开发工具,比如CLion等.
项目结构
都用C++了,那我们就假设项目较大,使用平台较多吧,这会包含所有的开发场景的。
一般情况下,我们在物理结构上进行如下设计:
说明:
- 应用层(Application Layer):
- 包括Android、iOS和其他多平台应用,负责用户交互和应用逻辑。
- SDK层(Proxy Layer) :
- SDK:提供应用层接口,与C++核心层协作以创建具体的功能实现。
- 配置管理:用于管理配置,包括选择要使用的具体实现的配置。
- C++核心层(C++ Core Layer) :
- C++核心:这一层实现自己的抽象方法,将SDK提供的接口适配到具体的实现上。
- 抽象工厂模式:根据SDK配置来选择创建具体功能实现的工厂。
- 具体功能实现库(Concrete Implementation Libraries)** :
- eg:播放器库(Player Libraries) :包括不同的播放器实现,例如ijkplayer、exoplayer等。
- 其他功能库:包括其他功能的具体实现,根据SDK配置来选择使用其中之一。
- C++基建层:提供通用功能,如日志记录、数据存储等,为C++项目提供基础设施支持。
在开发过程中可以将C++ core 层以下的东西直接在专业软件中开发,link 到AS的目录中即可调试
优点
- 模块化和可维护性:架构将不同功能和职责分离到不同的层级,使得每个层级都可以独立开发、测试和维护。这提高了代码的可维护性,并使开发人员能够更容易识别和解决问题。
- 代码重用性:通过将通用功能放在独立的基建层中,可以在整个C++项目和具体功能实现库之间实现代码重用。这有助于减少冗余代码的编写,提高开发效率。
- 可扩展性:架构的模块化性质意味着可以轻松添加新的具体功能实现,而不必重写整个应用程序。此外,可以在不影响应用层和SDK的情况下扩展通用基建功能。
- 灵活性:通过使用配置来选择具体功能实现,应用程序可以在不改变代码的情况下切换功能实现。这使得应用程序适应不同的需求和环境变得更加容易。
- 解耦合:架构将不同层级之间的关注点分离,使得它们相互独立,并减少了它们之间的紧密耦合。这有助于减小修改一个部分对其他部分的影响,从而提高了系统的稳定性。
- 跨平台支持:由于SDK层的存在,应用层可以跨不同平台共享相同的接口,而C++核心层可以根据平台特定的需求选择适当的具体实现。
- 易测试性:分离业务逻辑和功能实现使得测试更加容易。可以编写单元测试来验证各个层级的功能,从而提高代码的质量。
这样设计之后,C++ 层的东西可以按需插拔。团队开发时互相不会影响,测试也可以单独进行测试。通过采用模块化的架构设计,开发者可以更好地管理复杂性、提高代码质量,并更灵活地适应不同的需求和环境。