ShannonChenCHN/iOS-App-Architecture

读『iOS应用架构谈』系列

ShannonChenCHN opened this issue · 2 comments

读『iOS应用架构谈』系列

读『iOS应用架构谈 开篇(Casa)』

一、当我们讨论客户端应用架构的时候,我们在讨论什么?

1. 共识

市面上大部分应用都是在做以下这些事情:

    ---------------     ---------------     ---------------     ---------------
    |             |     |             |     |             |     |             |
    | 调用网络API  | --> |   展现列表    | --> |  选择列表    | --> |   展现单页   |
    |             |     |             |     |             |     |             |
    ---------------     ---------------     ---------------     ---------------
                               ^                                        |
                               |                                        |
                               |                                        |
                               ------------------------------------------

2. 架构要考虑的事情——支撑上面所说的这些事情的基础

  • APP(基础/核心)
    • 调用网络 API:如何让业务开发工程师方便安全地调用网络API?然后尽可能保证用户在各种网络环境下都能有良好的体验?
    • 页面展示:页面如何组织,才能尽可能降低业务方代码的耦合度?尽可能降低业务方开发界面的复杂度,提高他们的效率?
    • 数据的本地持久化:当数据有在本地存取的需求的时候,如何能够保证数据在本地的合理安排?如何尽可能地减小性能消耗?
    • 动态部署方案:iOS应用有审核周期,如何能够通过不发版本的方式展示新的内容给用户?如何修复紧急bug?
  • 团队
    • 产品、运营:收集用户数据,给产品和运营提供参考
    • 测试:每日app的自动打包,提供给QA工程师的测试工具
    • 业务技术团队:合理地组织各业务方开发的业务模块,以及相关基础模块

二、架构设计的方法

  • 所有事情最难的时候都是开始做的时候
  • 每个架构师一定都有一套自己的方法论
  • 不管你采用什么方法,全局观、高度的代码审美能力、灵活使用各种设计模式一定都是贯穿其中的

1. 搞清楚要解决哪些问题,并找到解决这些问题的充要条件

2. 问题分类,分模块

3. 搞清楚各问题之间的依赖关系,建立好模块交流规范并设计模块

4. 推演预测一下未来可能的走向,必要时添加新的模块,记录更多的基础数据以备未来之需

5. 先解决依赖关系中最基础的问题,实现基础模块,然后再用基础模块堆叠出整个架构

6. 打点,跑单元测试,跑性能测试,根据数据去优化对应的地方

三、什么样的架构师是好架构师?

  • 每天都在学习新技术新**上手速度快,理解速度快
  • 业务出身,或者至少非常熟悉公司所处行业或者本公司的业务
  • 熟悉软件工程的各种规范,踩过无数坑。不会为了完成需求不择手段,不推崇quick & dirty
  • 及时承认错误,不要觉得承认错误会有损你架构师的身份
  • 不为了炫技而炫技
  • 精益求精

四、什么样的架构叫好架构?

按重要性来排列,有以下几点

1. 代码整齐,分类明确,没有common,没有core

2. 不用文档,或很少文档,就能让业务方上手

3. 思路和方法要统一,尽量不要多元

4. 没有横向依赖,万不得已不出现跨层访问

5. 对业务方该限制的地方有限制,该灵活的地方要给业务方创造灵活实现的条件

6. 易测试,易拓展

7. 保持一定量的超前性

8. 接口少,接口参数少

9. 高性能

五、关于架构分层

1. 其实分层这种东西,真没啥技术含量,全凭架构师的经验和素质

2. 为什么流行起来的是三层架构,而不是四层架构或五层架构?

3. 我们怎么做分层?

六、关于Common文件夹