美文网首页iOS进阶高级
iOS架构设计:动机

iOS架构设计:动机

作者: 忠橙_g | 来源:发表于2018-03-13 21:33 被阅读39次

    在这一系列文章中,让我们来探讨如何创建自己的系统架构。

    什么是系统架构?

    系统架构是系统设计的最高层次。
    系统设计是帮助应用程序代码编写的方法。
    应用程序是实现业务目标的媒介。

    可以忽略它吗?

    即使在编写应用程序之前没有做好系统设计,你在编写任何代码之前依然要思考(如何实现),这就是所谓的意外系统设计,这将导致意外的系统结构(AA)。

    很容易出现的意外架构:
    Q:为什么我们的代码如此丑陋?
    A:历史原因...

    能够学到什么?

    与其根据代码的成长设立准则、约束和模式,不如建立一个正确的体系机构。

    系统架构就像铺设一条铁路,让编程的火车沿着它前行。

    为什么要制定约束?

    准则、约束和模式有助于:

    • 遵循最小惊讶原则
    • 理解现有系统是如何运作的
    • 避免重复造轮子
    • 在社区中分享你的创意

    可以直接使用别人的架构吗?

    你应该向他们学习,但他们可能有许多问题:

    • 不提供增长策略(后续提升)
    • 只适合一个规模的应用程序和团队
    • 组件化和模块级别不确定
    • 角色分工不明确(我看着你的“工人”)
    • 太过死板或难以理解

    我们是否有足够的能力来设计它?

    没有人是足够的,但你懂得越多,越有希望。
    以下建议也许能有所帮助:

    • 阅读关于系统架构和设计模式的著作
    • 不要相信有万能钥匙(没有一种架构是能够适用任何情况的)
    • 在学习中分享对他人有用的知识
    • 从其他平台中汲取经验和灵感
    • 在业余时间尝试你的想法,如果它们很不错,那么就在工作中引进它们
    • 如果有不确定性,暂时推迟决定(先使用稳妥的方法实现,再考虑改进)
    • 与他人讨论想法和实现过程

    如何开始?

    首先,分析目标需求(尽可能完整)

    功能要求

    在最坏的情况下,可以得到一个清晰的功能说明书,如下:

    • 应用程序功能列表
    • 功能之间如何协作
    • 哪些功能不需要连接互联网也能使用
      在这个阶段,可能会认为需求已经足够满足业务,而你有责任对出现的众多问题寻找答案,例如:
    • UI看起来怎么样?
    • 应用程序必须支持哪些设备?
    • 需要做服务器端吗?
      当你想不出其他问题要问时,就可以进入下一阶段了。
    组织的需求

    如果不是一个新的项目,那么可能有很多东西限制你的架构选择,至少要解决这些问题:

    • 团队成员的水平?
    • 他们对我们的架构有什么期待?
    • 我们见了了工具和语言吗?
    • 我们能重用现有的架构吗?

    解决了上面的问题,就可以开始架构了吗?

    是的,可以开始了。通过将功能和组织需求结合起来,您可以开始概述您的想法,并最终组成一个正式的体系结构!但这是一个完全不同的故事…

    这就结束了吗?

    在你的想法正式上线之前,我建议你对它们进行压力测试(根据下面的清单进行全面检查)。
    以你的候选架构为例,尝试回答清单中的问题。

    附:问题清单

    健壮性、可扩展性
    • 能有效地处理不断变化的业务需求吗?
    • 支持在现有项目中逐步采用吗?
    • 允许轻松地替换第三方组件吗?
    • 是否鼓励小的独立组件的组合?
    • 允许稍后向功能添加UI吗?
    • 是否支持在集成而不是组件级别上打破保留循环?
    • 支持人们同时在功能的不同部分工作吗?
    • 是否限制了事件/通知系统对特定层的使用?
    • 是否为偷工减料和技术债务提供了策略?
    可维护性
    • 是否提供了应对重型对象的策略?
    • 是否限制对象的依赖项的数量?
    • 样板代码量是否已经尽可能少了?
    • 不同职责的组件是否已经足够细致?
    • 项目结构是否可以改变?
    • 能够运转正常吗?
    是否易于理解
    • 是否能够清晰的理解如何在组件之间传递数据?
    • 应用流程是否能够理解?
    • 是否避免了暂时依赖?
    • 是否定义了如何存储状态?
    • 是否最大程度地减少全局状态的数量?
    • 允许打开一堆界面吗?
    • 点击推送通知时能正确地跳转到对应界面吗?
    代码质量
    • 是否最大化可测试代码的数量?
    • 是否建议使用runtime?
    • 是否避免了强耦合?
    • 是否允许用同步测试异步代码?
    • 是否支持UI测试?
    • 是否能够捕获异常?

    译自:🚧Designing iOS architecture: Motivation
    如有错误请指正

    相关文章

      网友评论

        本文标题:iOS架构设计:动机

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