iOS软件开发架构理解
这个东西是硬伤,框架?自带的mvc? 自带的UIViewController UIView UINavigationController 这些算不算?当然算的,cocoa框架嘛,大家都知道。
其实,我想分享的是:整个软件设计的代码结构管理。在阅读了不少源码后,总结出来的好的设计代码结构分布逻辑。
一开始,我们学会了简单的使用UIButton,UIImage等这些常用的视图类的时候,我们其实已经能够写出来一般的软件了。常见的功能,这里添加一点,那里添加一点,这里一个网络请求,这里一个bool类型判断,例如常见的:isDownding? reLoading?
这些,我们经常在ViewController中就直接写了,于是,飞快的打出来:@property(nonatomic, assign)BOOL reLoading; 然后代码中,多处引用的地方进行处理。
而如果加上一个网络请求,数据柔和,加上几个成员变量,NSArray, NSDictionary, 什么的,再接着,多上几个又臭又长的正则匹配什么的。可以想象,这个ViewController已经非常长了。上图演示:

好了,我们开始来改进代码了,第一步,把基本的view独立出来一个view文件的存放,分离出来。这样子至少省了3分之一的代码,再viewController中,而且极大的提高了代码阅读效率。直接看viewController就能看完整体逻辑。而可以先不管具体实现。
然后接着,我们又觉得还是不够,不够精简。对。于是,我们把数据独立出来。对抽象独立出来。建立专门的对象存储数据对象。可以发现,无一例外的,所有的大型软件都会这么做。也可以省了好多代码,提高阅读代码体验,极大的解耦了代码。这两种方法相当的基础,基本上做完了。至少代码可阅读了。入门了。现在的文件结构是这样的:

好看了好多。
好了,我们已经基本排版好了文件结构以及基本的代码分布问题。但是,这只是入门了而已。
下面的就是基于软件的复杂度需求进行变更的:
1.抽离出来网络请求的部分:
原因如下:a.网络请求,总会有错误返回码,能方便的增删查减,代码更容易找。
b.网络请求,虽然自带的网络请求也是可以一句话,BLock返回处理结果,但是,要基于自己的业务逻辑进行封装,一定程度上减少藕合度,提高复用性。
c.对于特俗的网络请求,例如http的post请求,就需要自己独立进行封装数据格式了。
2.基于数据的复杂度,进行相应处理,可以添加自己的业务逻辑的数据库处理操作。可以添加各种自定义类型的数据类。这样做的好处,也是抽离代码,减少耦合。
最后上传一张前人总结的,仅供参考的图片:

这里的分类方式真的只能仅供参考,具体情况还要基于实际项目的分析,不能一概而论的。
That's all。
iOS软件开发架构理解的更多相关文章
- 软件开发架构与网络之OSI七层协议(五层)
本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...
- 1、网络并发编程--简介、软件开发架构、OSI七层协议
python复习 变量与常量 基本数据类型 内置方法 字符编码.文件操作 函数 函数参数.闭包函数.装饰器 面向对象 封装.继承.多态 """ 什么是对象 数据与功能的结 ...
- 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)
一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端 24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器 想体验服务的时候 ...
- python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)
1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...
- python网络编程-Json序列化功能扩展-软件开发架构-OSI七层协议-TCP-01
面向对象补充知识点(面向对象的应用) 扩展json序列化所支持的数据类型(分析源码) import json from datetime import datetime, date # ------- ...
- 软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议
软件开发架构 什么是软件开发架构 1.软件架构是一个系统的草图. 2.软件架构描述的对象是直接构成系统的抽象组件. 3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯. 4.在实现阶段,这些抽 ...
- android开发架构理解
1. android 开发和普通的PC程序开发的,我觉得还是不要过度设计,因为手机开发,项目相对传统软件开发就小很多,而且手机的性能有限,过度设计代码mapping需要消耗的能相对就高,而且手机开发的 ...
- 软件开发架构、网络基础知识、osi七层模型
一.软件开发的架构 涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就可以 ...
- 企业管理软件开发架构之七 Object Control设计与运用
在做查询时,经常遇到一类需求.请看下面的SQL语句查询 SELECT * FROM Company WHERE CompanyCode='Kingston' AND Suspended='N' AND ...
随机推荐
- 【Python】:简单爬虫作业
使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...
- Windows2003系统问题:“无法加载安装程序库wbemupgd.dll,或是找不到函数OcEntry.
“无法加载安装程序库wbemupgd.dll,或是找不到函数OcEntry.请与您的系统管理员联系.特定错误码是 0x7e;" 然后是警告框: " 无法初始化应用程序." ...
- [翻译]Understanding Weak References(理解弱引用)
原文 Understanding Weak References Posted by enicholas on May 4, 2006 at 5:06 PM PDT 译文 我面试的这几个人怎么这么渣啊 ...
- LintCode Search a 2D Matrix II
排好序的二维数组, 从上到下从左到右增大, 给出一个数找出此数组里有多少个这个数. 不用两个循环做, 着手于条件(从左下角开始,若相等往右上跳一个,若小于target往右边跳一个,若大于target往 ...
- bootstrap-10
实现原理: 通过定义容器大小,平分12份(也有分为24份或32份,但12份是最常见的),在调整内外边距,最后结合媒体查询,就制作除了强大的响应式网格系统. 工作原理: 1.数据行(.row)必须包含在 ...
- Notepad++配置Python开发环境
1. 安装Python 1 下载 我选择了32位的2.7版本.https://www.python.org/ftp/python/2.7.8/python-2.7.8.msi 2. 安装 安装的时候可 ...
- Android——什么是3G
第三代数字通讯技术(3id Generation) 3G与2G的主要区别是:在传输声音和数据的速度上的提升. 1995年问世的第一代模拟制式手机1G只能进行语音通话. 1996年出现的第二代GSM C ...
- Python学习笔记——文件操作
python中,一切皆对象. 一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...
- Flume+Kafka+Strom基于伪分布式环境的结合使用
目录: 一.Flume.Kafka.Storm是什么,如何安装? 二.Flume.Kafka.Storm如何结合使用? 1) 原理是什么? 2) Flume和Kafka的整合 3) Kafka和St ...
- Oracle常见的几种等待事件
1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...