美文网首页
基础框架搭建

基础框架搭建

作者: 李先生的咸柠七 | 来源:发表于2018-09-26 20:25 被阅读0次

    本次框架的内容是结合项目架构、iOS项目结构和android的项目结构模式整理的,属于个人经验总结,如果有不合理地方,请多多指教。
    框架:
    项目框架,使用MVC和MVVM开发模式,更偏向代码结构。

    思想:

    分层
    • UI层
    • 网络层
    • 数据层
    • 业务逻辑层
    • 工具层

    UI层

    构建BaseUI控件库,继承BaseUI控件扩展开发。
    BaseUI是项目UI主结构。
    呈现和交互数据使用,并且用户交互。
    控件封装化,组件化。

    网络层
    Servers:
    https和http请求,格式json或者XML
    请求方式:post和get。仅限制两种。
    参数:公共请求参数和私有请求参数,公共响应参数和私有响应参数。
    公共参数的响应与请求,集成封装。Header和body封装集成。
    将网络请求接口返回对象。
    请求案例:
    网络请求接口+返回对象类型——>封装body和head——>发起请求——>json转对象(成功和失败)——>返回对象实例。
    响应码code和返回日志:封装code对应表。将返回的数据,记录日志。
    加密和签名:
    使用MD5加密和RSA加密。
    RSA
    客户端:
    使用自己的私钥加密,使用服务端的公钥解密。用自己的私钥加签。发送服务端。
    服务端:
    使用客户端的公钥解密和解签验证身份。服务端使用自己的私钥加密,数据传输。
    MD5:
    使用签名规则,生成MD5密文,服务端和客户端匹配MD5密文。
    WEB:
    Web服务,采用的是和H5页面交互和加载逻辑,讲动态页面,使用web动态加载和js代码引入方式,调用原声代码。加密采用MD5密文加密。

    数据层

    规则:文件格式+路径+加密+逻辑处理(增删改查)。

    位置:磁盘和内存,Model和Loaction(本地存储)
    内存:Model对数据整合,将数据封装成可使用对象。
    将网络层的数据以映射的方式,给model赋值。Key和属性名映射表(如果一致不用映射,如果不一致请映射)。
    Location(磁盘)
    格式:FMDB、Plist、txt等等文件,目前统一FMDB和Plist,也可以用cache、NSUserDefault、归档等等方式,可以保存到沙盒或者library中。
    加密
    MD5(敏感信息,匹配使用,例如密码)、RSA非对称加密、采用base64编码方式(注:base64并非加密,只是一种编码格式)。
    数据同步(Dao层):
    操作逻辑:增、删、改、查。
    路径逻辑:UI调用本地,本地检测有无,如果有,则检测内容(是否更新),返回UI,如果没有,网络获取,存入本地,返回UI。

    业务逻辑层
    在ViewModel或者Controller中写入逻辑代码,也就是逻辑控制层。根据模块或者页面来区分不同的业务逻辑。找到业务逻辑中的难点、相同点、不同点。进行划分为:核心技术、公共模块,不同的模块、以及模块之间的通信,提到模块间的通信。

    工具层
    • 使用Pod工具,管理第三方库,
    • 项目中将工具形式开发,降低项目模块之间的耦合度。
    模块间通信
    代码级引用

    模块间通信可以使用代理、协议、block、KVO、KVO和URL的方式来处理,个人建议采用代理、协议和block方式
    两个互相不干系的组件模块之间的通信使用协议(接口)代理block的方式,必要时使用通知监听,(比如:类似SSM方式,定义一个网络请求协议(RequestProtocol),在网络请求工具类(RequestTools,有可能有多个,但是都有同样的网络请求参数和方式,小项目一般一个就能满足)中,实现协议,在不同的网络请求业务封装(Request)类中初始化网络请求工具类,调用网络请求。 在业务层调用Request类,发起网络请求)。
    URL通信:
    使用路由的方式,配置url,进行URLRoute。
    设计模式
    23三种设计模式,在项目中,一般都是综合使用的,多种模式并存,在这里不一一介绍。

    以上就是框架设计思路,下面我们来具体在项目中体现。

    实践:

    需要建立的分组项目结构:
    BaseUI(UI控件基类)
    Config(项目配置文件)
    Extension(自定义扩展类)
    Library(非pod第三方库)
    Modules(模块)
    NetRequest(请求类)
    Resource(资源配置库)
    Tools(工具类)

    Pod第三方框架引入。

    规则:
    遵循统一规则,保证项目统一性,规范性。
    BaseUI
    BaseUI即项目展示层UI逻辑处理。
    项目页面之间的逻辑:
    继承UITabBarViewController,创建可以扩展的PTabBarViewController,集成公共操作逻辑,和自定义逻辑。
    同理:UINavgitationControlle也加以扩展。Button添加index索引和手势事件逻辑。PLabel继承第三方富文本Label开发,扩展项目中的PLabel,UIImageView和Image处理,网络图片和图片大小尺寸处理等等控件的封装。根据项目需要,定义符合项目的控件。
    自定义组件:
    在项目中,使用的到的UI框架,比如:侧滑切换试图或者Excel模式等等容器类UI交互和UI展示组建,构建其生命周期和加载模式,数据绑定可以采用代理方式。采用代码引入的方式,进行控件使用。

    Config

    项目配置库,主要有:URL配置,Color配置,Strings配置,Style配置等等配置性内容。
    URl配置:
    做过服务端开发的都知道,在编写接口的时候,如果遇到公共参数,在封map的时候,都会有相同的key存在,这时一般会将这些参数key编写成一个类里面的public static的属性。同样,在iOS中,将那些公共参数,定义到一个宏里面,在使用的时候调用即可,避免多次使用带来的麻烦。
    将服务端的ip、端口和地址配置到一个宏定义。
    Color配置
    NetRequest(请求类)
    规则:
    采取OKHttp方式,利用AFN和MJExtension两个框架,封装成NetRequest类。接口传入业务参数,返回model对象,并打印json格式日志。
    NetRequest类:
    包括两个网络请求方式,get和post。公共请求、响应参数和错误回调,成功回调,超时回调,网络状态。网络请求接口,需要传入回调代码块内容、具体业务参数和返回对象类型。

    Extension

    扩展类,对项目部分框架或者现有类新型扩展,原因是:框架保持不变,在原来基础上进行扩展,保证项目框架安全。

    Library

    静态库文件存储。将静态依赖库存放,不实用pod的方式。

    Modules

    模块,可以采用MVVM、MVC、MVP等方式。划分模块,请依据项目需求和功能来划分。

    Resource

    资源文件库,将部分资源文件存放其中,在打ipa包时,资源文件是暴漏出去的。所以要做资源文件和代码安全保护,后边我会介绍ipa保护和沙盒保护。

    Tools

    工具类,将我们封装的组件存放其中,比如:本地化管理,安全管理,UI组件,公共模块类等等。

    ipa包安全管理:
    https://download.csdn.net/download/u013896628/10205782

    RSA加密:
    https://download.csdn.net/download/u013896628/10205777

    相关文章

      网友评论

          本文标题:基础框架搭建

          本文链接:https://www.haomeiwen.com/subject/wcijoftx.html