项目思考一

做技术分成好几个层次:

  • 第一层:把功能做出来,不用考虑代码质量。
  • 第二层:把功能做稳定,不会有太多的bug。
  • 第三层:把功能做得快,能够快速响应需求。

如果是从零开始做项目,迫于经验不足和时间紧迫,都会经历从第一层慢慢向上的过程。遗憾的是,做到第三层是很难的,但不管怎样,追求的过程是充满挑战的,也是受益无穷的。

评价一下我们现在的项目,还应留在第一层。为了能够达到第三层,我和同事们一起想了一些方法和步骤。

ARC

ARC全名Automatic Reference Counting,是苹果公司在WWDC2011上就推出来的一项技术,只在减少程序员的工作,不用再去手动管理内存(典型的费力不讨好),而是由编译器采用智能算法,在编译的时候自动插入内存管理代码。ARC目前已经广泛的被绝大部分开发者所接受,因为它带来了开发效率的提升。我们目前的代码还没有采用ARC,这个改一下不是什么难事,具体做法可参考官方文档

Xib,StoryBoard

Xib、StoryBoard和纯代码到底哪个好,一直被程序员们争个不休。但不可否认的是,苹果公司每次更新XCode,界面工具都会不断被优化以方便开发。尤其是分辨率越来越多以后,一些特性如AutoLayout,最佳使用场景就是界面工具,手写AutoLayout是很复杂的。所以我推荐用Xib乃至StoryBoard,但是并不反对用纯代码,因为有些复杂的UI更适合用代码写。三者可以和平共处,并不是非此即彼的关系。

代码规范

这是老生常谈,不多说了,大家都懂的。前些天草拟了一份规范

模块化

一个软件,尤其是大中型的软件,肯定有很多相对独立的功能。模块化相当于对大系统进行降维,使开发大系统像开发小功能一样容易。而且,有些模块可以被复用,能提升开发的效率和质量。

我们现在的代码虽然是按照业务功能分开写的,但并没有严格的分开。比如登录相关的逻辑就散布在程序的多个地方,如果把登录做成一个模块,对外提供一组接口,登录逻辑要改就很方便,不用在多个地方改。分模块的要义是抽象出一组接口,模块间的通信只依赖于接口。模块的最终形式是.a文件。

API包装层

在很多公司,前后台不属于同一个部门。后开负责开发基本的API,而前台对于返回的数据进行处理。这种处理有时候是很复杂的,因为后台不关心具体前端需求(或者它要为多平台提供支持),所以提供的数据往往是非常原始的。这样就有三种做法:

  • 前台在请求的地方单独处理。
  • 前台有专门的网络层处理。
  • 后台提供一层包装API,将数据进行预处理。

目前我们用的是第一种做法,最好的还是第三种做法。

控件

控件的作用是封装通用的UI组件,写iOS代码大部分时间都是在写UI,所以控件可以大大提高开发速度和质量。
网上有很多开源的组件,我们可以参考,但一定要看明白,不能拿来就用,不然风险太大。向UITableView的刷新、RichLabel等等,都需要控件化。

业务逻辑与视图分离

目前的代码是不分离的,一股脑儿写在ViewController里面。后果就是无法进行单元测试、并且维护性差。分层就可以解决这一问题,业界已经有很多方法:
MVVM
更轻量的 View Controllers
使用 VIPER 构建 iOS 应用

网络层封装

无论是ASI还是AFNetWork,都已经提供了一套基本的Http框架,我们要做的是在此基础上进行一层包装,调用者只需要了解包装层的接口,这样以后替换类库都不会有问题。

数据层封装

把数据层抽象出来,这样代用存储代码就会变得很简单。而且数据层扩展各种存储类型,对业务层代码不需要太大的改动。

动画框架

手势返回是必须要做的。
至于动画框架还没想清楚,因为动画变化多端,所以对框架的通用性就有很高的要求。如果太通用,就和系统API没什么差别了。
这是Facebook推出的POP动画框架,值得参考一下。

Bean规范化

Bean是程序中最基本的对象。没有业务相关的方法,只有属性和存储方法。每个Bean一个文件,目前是所有Bean在一个文件中,不容易查看。

基类

无基类,不框架。基类会随着项目的发展不断演进,基类可以让问哦们少些很多很多的代码。

工具类

代码规范里也提到,工具类的使用有两种误区:

  • Util方法没有单独写在一个文件里面,不具备重用性。
  • 有一个超级Util类,写了一堆不太相关的方法。
    能用Category尽量用Category,对于Util,也要按功能进行区分。

分享框架

分享不是一件特别困难的事,所以最好自己做。用第三方定制UI也是很难实现的,还不如自己做。

上文提出的种种,都是我们要做的,如果按理想情况做完的话,我们就能达到本文开头所说的第三层境界了。但是过程肯定不轻松,也许会在某一点上失败,但是前进的过程又是充满诱惑的,所以加油吧!

时间: 2024-10-22 21:09:34

项目思考一的相关文章

团队作业三——项目思考

我们团队做的项目是餐饮系统的设计,这个项目是根据餐饮行业的发展趋势来开发的计算机管理系统. 1.这个领域有什么创新的历史? 俗话说,民以食为天,人类生存离不开食物.有需求就有发展,餐饮行业也是越来越趋于完善,从最开始的一家小店铺,到一间客栈.饭馆,到现代的星级大酒店,店面越来越大,需要管理的东西也随之增加,这时候就需要我们的计算机管理系统来管理这个庞大的团队.从以前的人为主体发展为系统管理,这是一个巨大的创新. 计算机管理更加科学,便捷,是信息化.现代化的重要标志. 2.你的项目是这个领域的先行

大屏项目思考

1.数据可视化:利用人眼的感知能力对数据进行交互的可视表达以增加认知的技术.    数据可视化通俗说就是要用图形讲故事. 可视化主要有以下4种作用: 减少认知负担 减少搜索时间 支持感知推理 传递交流思想 2.项目管理: 1.首先业务方会提出数据收集的需求,并把需求提给PM或者产品经理. 2.PM或者产品经理来整理数据和需求进行排期,PM会将这些整理排期完成的需求提供给设计师. 3.设计师会根据需求对这些数据进行展示设计,设计师完成的设计稿会回头来给业务方进行评审. 4.业务方会对于设计稿进行评

平衡小车项目解读日志

2016/3/31 1.      关于6050陀螺仪模块问题 2.      今天开始着手平衡小车项目,蓝牙模块不用关心,只要知道可以连接,再判断串口发来的指令即可. 3.      好像比较简单的是使用DMP,通过结合DMP,可以将我们的原始数据转换成四元素输出,再通过四元素算出欧拉角,从而得到yawroll 和 pitch. 4.      因为做的是平衡小车,那么就不需要roll 和 yaw,直接通过pitch即可.     2016/4/1 1.      昨天卡在一个比较愚蠢的问题上

小代码 项目(3)M 文件压缩

 <html> <HEAD></HEAD> <BODY>   <textarea rows="10" cols="50"> </textarea>      <FONT style="FONT-SIZE: 120pt; COLOR: green; FONT-FAMILY: Webdings">û</FONT> <textarea rows=&qu

图书馆系统V1-00目录

相关知识点: 01jsp编译的生成java的内容 02sql执行预处理和sql注入 03数据删除和订单ID 04数据增删查改 05过滤分页和排序 06简单的数据爬虫 07权限简单管理 08项目思考和总结 项目功能说明: V1.使用JSP实现 1.支持登录,系统管理员登录后可增加图书管理员,再由管理员增加对应类目的图书 管理员信息的CRUD操作,密码使用随机6位数,[前端]实现排序/搜索/分页 2.图书管理员登录后可对对应类目的图书进行录入修改编辑和删除操作 图书信息的CRUD操作,操作记录到日志

《人月神话》和个人的一些想法

用了5,6个小时把这本提升逼格的书看完了,收获还是挺大的... 重要名词和主要观点解释 1.焦油坑:形容软件开发的困难和挣扎.软件项目也是这样,不论是开发大型软件系统还是小型项目,都会遇到诸多复杂的问题和影响因素,一个一个淹没在焦油坑中. 2.人月神话:人力和时间不是平衡的线性关系,用人力作为生存率的衡量标准是一个神话.缺乏合理的进度安排是造成项目滞后的最主要原因 3.没有银弹:10年内没有任何编程技巧能给软件生存率带来数量级的提高. 软件开发中困难的部分是规格说明.设计和测试这些概念上的结构,

聊聊阿里面试的三个层次!

最近去阿里的菜鸟国际做了一次面试交流,发现大公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导.虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法.但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求.如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余. 一般来说,阿里的面试会有两轮的技术电面,分别交叉检验你的技术基础.后面还有两轮的现场技术面试,主要检验你的项目经验.但从知识体系的角度来看,阿里面试对于

Vue初识

一.  Vue的简单介绍 前端.django的重点简单描述: """ 1.BBS:前后台不分离的web项目 前台页面主要是通过后台逻辑完成渲染 2.Django:Python Web 框架 HttpResponse | ORM | 模板语言 | Forms | Auth 3.前端:HTML5 CSS3 JavaScript jQuery Bootstrap HTML5:页面架构 CSS3:选择器 样式 布局 JS:ES DOM BOM => 选择器拿到标签,操作标签,标

开发10年,“我”已经年薪百万了,你还在小公司里混日子吗?

10年前,出于对计算机的热爱,我成为了一名程序员.不过当时,所谓的程序员其实要求相当低,受限于时代,那些高水平的程序员放到现在看门槛也不高.互联网经过这么多年的高速发展,因为各方资本的狂热追求,国内的互联网企业竞争激烈,越来越多程序员的加入,对于程序员的技能要求也更加严格.更加细分.尤其随着资本市场的逐渐退却,互联网行业热度回归常态,程序员的岗位竞争更加残酷. 这些年来一直都是自己摸索,走了太多弯路.在小公司里混日子感觉自己都快废了,后来沉下心来决定作出改变,翻来覆去研究了大厂的招聘需求,找了相