如何在软件开发的道路上更进一步?

我们可能已经在研发的这条道路上持续了5年,甚至更久的时间,如何才能拉开和大众的距离,让自己的工作能力提升一步?架构设计应该是其中一个方向,大到app整个的设计,小到每一个页面、功能,都需要设计。这篇文章根据我的研发经验谈一谈App的架构设计。

一、代码需要可读性

可读性是十分必要的,我们甚至可以在一个UIViewController中完成一个APP的所有功能,它可能有几万行,几十万行代码,该怎么维护,怎么读,写的时候只有你和天明白是怎么回事,过了几天就只有天知道代码为什么这么写了。因为代码太复杂,几十万行得逻辑在你脑子里,估计脑袋会炸掉,现在在MVC框架中Controller有一千行代码,都觉得都痛苦了,更何况是几十万。

所以要本着一个原则,可读性。 代码可以不漂亮。

针对可读性,我们老一辈得人,做了很多尝试,最后有一些被证明是合适的,用起来蛮舒服的,这样的尝试,被总结出来,形成了原则,我们大家共同去遵守,达成共识。比如:六大设计原则

感谢他们,我们是站在他们得肩膀上。

二、代码需要扩展性

扩展性、仁者见仁智者见智,这是十分考验得内功得事情,有些人开始时就可以做出很好的架构,也有工作几年的人依旧不能做出前瞻性得技术思考。代码的扩展性按照我的理解需要有注意如下几个方面:

  • 产品思维
  • 设计规范
  • 技术选型

代码需要产品思维

代码的扩展性与产品思维是离不开的,你要知道产品现在做的什么功能,以后可能会做什么功能,以及要和产品经理聊天,直到他们大致的规划;可能有些产品在实践的过程中慢慢就会发生变化,工程师也要跟随着一起做出改变,而且一旦反向改变,一定要在代码上果断的做出改变,否则,后续的问题会越来越严重。

比如产品定位于直播,那么相应的技术栈就出来了:FFmpegGPUImageAVFoundationOpenGL ESMetal、即时通信。可能会有直播带货,网页,支付等。

当产品经理的操作过于复杂时,记得要battle,(如:产品自己讲着讲着就懵逼了,这是一定battle),不然出来的代码也是一片狼藉,用户估计也不会喜欢。

查看竞品软件更直观、更有效。我们通过以下手段获取有用信息:

  • 竞品的现有功能
  • 竞品的技术选型(简单的逆向、分析出用的Swift还是OC、FFmpeg还是GPUImage、以及用的第三方框架都有哪些)
  • 竞品的规划方向

设计规范驱动代码

为什么代码的扩展性还要考虑设计呢?

我们再研发的过程中很多时候都是和设计打交道,可以说一个好的设计师,可以让我们的代码质量提升,可以减少我们的研发时间,那么对于工程师什么是好的设计师呢?

  • 有规划(知道自己现在以及未来,将会做出是什么样的设计,能找出共性,会抽象)
  • 有逻辑(好的设计图管理、交互的逻辑性,各种极端情况的考虑:如无网络,无数据,大屏幕、小屏幕、全面屏,错误提示,完成提示)

如果设计不够成熟,让他多去看看大厂得软件,学习去吧。同时我们也要帮助设计童鞋进行抽象。

技术选型是骨架

根据产品的方向类型,进行技术选型,技术选型包含以下几个方面:

  • 语言: OC、Swift、RN
  • 编程方式:面向对象、函数式、面向协议
  • 第三方库:这是个自己造轮子还是用别人的轮子得问题
  • 布局方式:autolayout、frame、xib、storyboard

做技术选型时,要调研好社区情况,是否活跃,是否继续维护,支持的iOS系统。比如目前的SwiftUI目前就不适合作为一个商业项目的选型,Flutter,目前也不适合,要考虑之后项目新人的接手难度,招聘情况,虽然各大厂不断鼓吹Flutter,真正用到的很少很少,甚至我发现,各大厂不断开Flutter交流会,但是本身并不使用。无论是SwiftUI还是Flutter距离使用都还有一段考验期,小厂不要去考虑,大厂可以尽情折腾。

2016年,在一家创业公司,用Swift2.0写项目,现在想想,那是一个错误的决定,不成熟的Swift并不友好,尤其是每个版本不兼容,一年一度的升级,让我们不堪重负,拖累我们的研发进度。

竞品得技术选型是一个重要的参考方向。

三、App需要加速框架(知识库)

公司要积累自己的知识库,也成为加速框架,比如网络,肯定要自己再封装一层吧,各个项目的网络库统一用同一个,这样节省开发者的时间;通常这些加速框架与App的耦合成都不大,可以独立封装。常见的加速模块:

  • 网络模块(上传、下载、加密、重试、缓存、请求以及任务管理)
  • 音视频模块(滤镜、播放、裁剪、合生、AV数据采集)
  • 基础框架(String、Array、Dictionary、TableView、Date等原生框架的补充)
  • 数据(同步、读写、升级、清除缓存)
  • 弹窗(toast、hint、alert)

音视频框架可以细分:图片处理、视频处理、渲染处理。

这些都是公司的宝贵财富,需要一点一点积累,还好我们也是站在巨人的肩膀上,github中有很多可以参考借鉴的例子。完善公司的知识库后,必将如虎添翼,加速开发节奏。

如何提升自己架构设计的感觉?

  • 代码的可读性、扩展性、完善自己的加速框架(知识库)。
  • 勤于思考,在下笔之前,一定要做结构、图表分析。
  • 多沟通,无论是自己的组员还是自己的上司,或者是设计还是产品,往往灵感一触即发。
  • 多读第三方的源码,思考为什么作者这样设计,这样做有什么好处和坏处。
  • 做垂直领域,完善自己的技术壁垒
  • 做宽度领域,多看一些Python、Go、Swift、Java、JS、PHP等语言,见得多才能更全面的分析。

我收藏的第三方库

1.Hue                颜色扩展相关
2.Snapkit           autolayout布局
3.Realm             数据库
4.RxSwift           响应式
5.Hero              转场动画
6.Lottie            设计师动画
7.Alamofire         网络
8.messageKit        聊天UI框架
9.Charts            表格
10.Kingfisher       轻量级下载、图像缓存
11.ImageScout       最小网络代价获得图片大小及类型类
12.Gifu             高性能gif加载
13.Proposer         请求本地设备权限
14.MonkeyKing       无SDK的分享支付(文本、图像、音视频、URL)
15.Wormhole         设备之间的分享iPhone watch
16.Promisekit       异步编程
17.Chamele          颜色框架
18.Reachability     网络监察
19.FloatingPanel    浮动界面
20.LSAnimator       链式动画基于CoreAnimation
21.Blueprints       多种瀑布流
22、SwiftyStoreKit 应用内购
23、SideMenu 左右菜单栏
24、ActiveLabel 替代UILabel
25、Nuke 代替Kingfisher
26、NotificationBanner  app内通知栏
27、XLPagerTabStrip 顶部Tap切换
28、SwiftyCam  相机封装的很好
MonkeyKing 分享平台
Debug:FLEX、VZInspector、MT、GT、Matrix

推荐iOS进阶学习栈:
iOS学习栈(将持续更新)上
iOS学习栈(将持续更新)下
面试题总结:
2020年iOS大厂面试题总结(一)
2020年iOS大厂面试题总结(二)

谈一谈App的架构设计相关推荐

  1. Android App的架构设计:从VM、MVC、MVP到MVVM

    随着Android应用开发规模的扩大,客户端业务逻辑也越来越复杂,已然不是简单的数据展示了.如同后端开发遇到瓶颈时采用的组件拆分思想,客户端也需要进行架构设计,拆分视图和数据,解除模块之间的耦合,提高 ...

  2. LiveVideoStackCon讲师热身分享 ( 十一 ) —— 短视频APP的架构设计

    LiveVideoStackCon 2018音视频技术大会是每年的多媒体技术人的盛宴,为了让参会者与大会讲师更多互动交流,我们推出了LiveVideoStackCon讲师热身分享第一季,在每周四晚19 ...

  3. 浅谈一种Android客户端架构设计

    技术发展日新月异,业界各种Android客户端架构设计,五花八门,但我们不能简单地说哪种架构更好,因为脱离业务谈架构是没有任何意义的,适合业务的才是好架构.而架构也不是一成不变的,随着业务的发展,也许 ...

  4. 应对海量并发请求,首席布道师谈微服务的应用架构设计

    何李石 七牛云首席布道师 <Go语言程序设计>译者,Go语言/容器虚拟化技术布道师.实践者. 5年以上互联网创业经验和企业级产品研发.运营经验,同时也是互联网产品基础架构解决方案专家. 随 ...

  5. 阿里P8 “布道师”,谈微服务的应用架构设计(附微服务教程)

    本次分享基于微服务的应用架构设计,内容涉及如何构建一个微服务应用,服务注册与发现,微服务测试和典型的微服务架构设计模式,以及微服务架构在七牛的实践案例. 目录 构建一个微服务应用 服务注册与发现 微服 ...

  6. iOS之深入解析App的架构设计

    一.概述 ① 应用架构 App 架构是软件设计的一个分支,它关心的是如何设计一个 App 的结构.具体来说,它关注于两个方面:如何将 App 分解为不同的接口和概念层次部件,以及这些部件之间和自身的不 ...

  7. Android App整体架构设计

    避免代码臃肿混乱,最根本的是需要代码功底以及对于程序的整体把控和设计能力.除此之外,对于Android App,个人抛砖引玉,提点自己的思路.如果只是轻量级的App或者Web App,在App内做点简 ...

  8. 高质量App的架构设计与思考!

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 最近在做一功能不大.业务也不复杂的小众App,以往做App是发现自己从来没有考虑过 ...

  9. 阿里P8 谈微服务的应用架构设计

    首先我们通过一个最简单的例子来看下如何构建一个微服务应用. 图 1 是一个完整服务的代码,它和普通的应用程序没什么区别,只是功能非常少,业务非常简单.把它编译之后部署在服务端就能跑起来,我们从上往下解 ...

最新文章

  1. 白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系
  2. 珍惜相聚,亦珍惜离别
  3. 2019蓝桥杯省赛---java---C---2(矩阵切割)
  4. matlab设置固定的窗宽窗位,python实现CT窗宽窗位的调整(即指定HU值保存图像)...
  5. 存储桶列表访问权限_十分钟从入门到精通(上)——OBS权限配置
  6. 32位单精度浮点数表示法
  7. 【2020模拟考试T4】【PAT乙】1034 有理数四则运算 (20分) 测试点2
  8. 【工程处理技巧一篇】基于半规则数据的命名实体消歧识别【未完】
  9. 单文件浏览器_浏览器工作原理
  10. 将两个PCB文件合并成一个文件
  11. Facade门面模式
  12. shell题库选择题_linux题库选择及答案
  13. 计算机上显示找不到无线网络连接失败,笔记本找不到无线网络,教您笔记本电脑搜索不到无线网络怎么办...
  14. vmware上用kali破解wifi
  15. Kettle的Web版分享
  16. Minima:为什么 Web3 需要完全去中心化
  17. Hrbust 2294 修建传送门【思维】
  18. ei会议和ei源刊的区别_EI论文发表EI期刊发表EI会议论文EI检索EI源刊
  19. 宝宝大战落幕,互联网金融二战爆发
  20. IObit Driver Booster 无法更新驱动的解决办法

热门文章

  1. ResumUP:指导你走向500强的简历应用 不用不行!
  2. html5 公众号 网站,编辑公众号最实用的三个网站
  3. [软件更新]迅雷 v5.9.5.990 发布
  4. 去误报、高精度,NDR让企业安全防护上一个台阶
  5. 【概念卡片】人文社会学(一)-小说家就是说废话的人
  6. CentOS更改网卡配置
  7. postgresql表中的字段名称包含特殊符号的问题
  8. 安装ubuntu出现花屏_在Ubuntu 18.04系统中挂起,再唤醒就出现花屏的解决办法
  9. Android art模式解析
  10. 一行代码搞定android全屏适配