最近在为新项目搭建iOS框架,一直在思考如何搭建高可用App框架,是否可以避免后期重构由于代码质量问题。之前接过很多“烂代码”。结构松散,底层混乱,缺乏规范导致团队开发时代码风格不一。清晰的项目结构和良好的代码规范是保证产品质量的关键。让我分享我的建筑理念。架构图:架构原则:可读性、可维护性和可扩展性。1.思考要做好一件事,思考的时间应该多于执行的时间。首先,根据产品需求和设计图纸,在脑海中构建一个产品结构:1、产品的定位是什么。社交媒体?游戏?运动的?音频和视频?电子商务...您需要弄清楚要创建什么类型的应用程序。不同类型的产品有不同的技术选择。这里我搭建的是一个基本的app架构,可以在此基础上扩展社交、电商、音视频等!2、技术选择是根据当前的产品需求和未来可能的需求(我怎么知道未来的需求是什么?你可以参考竞品,发挥你的想象力。如果产品说:“我们要做IM文字聊天,只有文字!我们不做音视频,以后也不会做!”这样的承诺,如果你相信他的邪恶……背后的故事会很精彩。哈哈哈哈哈哈哈。..所以这个时候你要考虑到后面会有语音+视频聊天,设计的时候不要偷懒,预留一定的空间,哪天产品回去了,你可以微笑着从容应对.扯回正题,再来说说技术选型,通常我会选择一些流行的好用的第三方框架,比如:YYKit,YYKit是一套庞大且功能丰富的iOS组件,包括模型分析、图片加载、缓存等基础服务都是基于Category设计的,简单易用,具有较高的r性能优于一些旧框架。用过的人都很好。其他框架的选择可以根据项目需求在GitHub上搜索。每一个有更多的星星看看,它会给你一些想法。程序员可以保守,但思想不能太保守。2.建立如上图所示的目录结构。我是这样搭建App目录结构的,从下往上,使用Pod来管理第一个三方框架,第三方框架重新封装起来供顶层使用,降低模块之间的耦合度为尽可能多,只是为了清楚起见。三、基础类的封装1、AppDelegate是应用程序的代理。应用级事件委托给它处理,包括启动退出、推送等事件,以及IM、支付等第三方回调。这使得AppDelegate中的代码庞大、错综复杂且非常复杂。不利于阅读和维护,所以我加了一个AppDelegate+AppService类来处理生命周期外的业务。AppDelegate作为事件入口,具体实现直接调用类中的方法,只是为了清楚。2.Modules包含应用程序中的功能模块。根据底部的标签栏,划分并关联实体文件夹(默认为虚拟,实体文件夹需要手动创建拖入)。每个模块都使用MVC模型。可能有人会问为什么Resource和Service文件夹多。MVC是一种设计思想。不是死套路,就是三个文件夹。应根据实际需要适当添加。这里,我选择将数据请求封装在Service中,在VC中调用获取数据。为什么是资源?这里,我觉得当功能模块层数很多的时候,每个大的功能模块对应很多资源,方便在模块中使用。当然也可以放在最外层的Resource文件夹中,创建对应的模块名。这里我选择将常用的放在最外层的Resource中,功能相关的放在模块中的Resource文件夹中,只是为了清晰。3、Manager的定义是一个全局的基础服务,通常使用类方法或单实例实现,主要包括对应用和用户的管理和服务,如网络状态监控、广告页面的应用介绍页面等;快速用户登录和退出操作以及登录状态获取等。只是为了清楚起见。4、Utils文件夹主要是全局通用工具,这些工具来自于三方框架的二次封装,或者是我们自己编写的工具类。在这个项目中,我封装了一个AES加密的网络请求工具,一个全局的Toast提示,一个广告页面等。为了清楚起见。5.Base文件夹用于存放项目的基类。基类的作用包括一些自定义的内容,比如页面样式、空数据页等,使用基类实现统一控制,方便维护,减少冗余。为了更清楚。6.third-party文件夹包含一些第三方类库和第三方封装,比如第三方登录、支付、IM等,我还没有在项目中添加第三方框架。7、全局宏,顾名思义,就是定义一些全局通用的宏。我这里定义了四个:UtilsMacros定义了一些工具宏,比如获取屏幕宽高、系统版本、数据类型校验等;URLMacros定义服务器接口地址和环境开关;FontAndColorMacros定义了全局的颜色值和字体大小,这里建议和设计者维护一个设计规范,例如:定义一个主色宏MainColor,颜色值为0x333333,我们全局使用MainColor宏作为背景色,某天app改版时,颜色值发生变化,我们只需要改0x333333即可,但是其他代码不需要动,同时也可以在一定程度上约束设计者。不要只是添加一种颜色,要使用非常接近的颜色。如果设计者不愿意维护这个规范,你可以试着去争取。打不过,就只能自己维护,只是为了看得更清楚。ThirdMacros包含与第三方框架相关的定义,例如keySecret等。只是为了清楚起见。8.资源文件,上面说了,这里我存放了一些全局的资源文件,我把功能模块放在了模块中的Resource文件夹中,个人喜好,只是为了清晰。9.CocoaPods是iOS项目的依赖管理工具。开发iOS项目不可避免地要使用第三方开源库。CocoaPods的出现让我们节省了搭建和第三方开源库的时间。以上是我的基本架构思路。
