客户端架构设计及应用 | 青训营笔记

72 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

一、本堂课重点内容:

    1. 架构面临的问题 全新业务.历史包袱.技术嫡增.信息流通
    1. 常见的架构手段 业务抽象.分而治之标准规范.组织管理
    1. 架构演进的例子 保持重构.迭代升级 应对衰退
    1. 成为优秀架构师 解决问题.技术储备.贴近业务.热爱编码.始终学习

二、详细知识点介绍:

  1. 架构面临的问题

期望高

  • ·良好的顶层设计,从上到下有统一的认知
  • ·遵循共同的规范,写出让人舒适的代码
  • ·有没有“—劳永逸”的设计,可保基业长青
  • ·什么时候能从架构工作中找到成就惑

责任大

  • ·设计不合理:这谁写的,看小爷我推到重来
  • ·使用不规范:这压根就不该这么用
  • ·逻辑太晦涩:这尼玛谁看得懂
  • 编码坑太多:这特么是隐藏技能啊,悄无声息改代码

事情难

  • 业务历久弥新,历史包袱警加新的场景。
  • 随便动动刀子就拔出萝卜带出泥
  • 技术栈层出不穷,老朽学不动了啊
  • —方面要保持成熟稳定,—方面要积极探索落地

疗效慢

  • 影响复杂度的因子众多,单个因子优化不足以撼动
  • 没有一年半载,—波治理搞不下来
  • 没有特效药,长期在隐隐作痛中前行
  • 往往也只是开了一个“方子”,想要根治得长期健身

小结 ·架构设计是为了解决特定领域不同发展阶段的业务问题·不同领域的架构有明显的技术差异,但也有很多相似性·架构不仅面临技术挑战,还要应对组织业务膨胀的嫡增·移动端需要利用有限的设备资源设计符合小屏幕的架构

  1. 常见的架构手段

架构模型优点 缺点

MVC

  • 模块职责划分明确。主要划分层M,V,C三个
  • View和Controller容易膨胀
  • 模块,利于代码的维护
  • View与Model没有完全分离

MVP

  • . View与Model完全分离,可以修改视图而
  • ·页面逻辑复杂的话,相应的接口也不影响模型,
  • 交互都发生Presenter会变多,增加维护成本
  • Presenter 与View的交互是通过接口来进行
  • 的,方便单元测试

MVVM

  • . ViewModel与View的耦合更彻底,
  • ·数据绑定使得程序较难调试,因为
  • ViewModel只负责处理和提供数据
  • 数据都是自动更新到UI
  • . View Model里面只包含数据和业务逻辑,
  • 没有U,方便单元测试

直接依赖:一个对象A要完成其功能,通常需要依赖于其他对象B、C等,其具体的实现方式就是在对象A中构建(new)其所依赖的对象B、C等,这就相当于A控制了它所依赖的对象、C。

控制反转:打破A直接控制B这层关系,B对象的生命周期交由loC容器来控制,A不用再去寻找和初始化(控制)其所依赖的B、C了,只用等着loC容器的投喂就可以

小结 ·不同架构手段的共同目标是高内聚低耦合·找到适合业务场景的架构而不是炫技滥用.—个复杂的系统是多种架构模型的组合体

  1. 架构演进的例子
  • 表现层:接收用户输入,获取数据,呈现界面
  • 业务层:处理业务数据,数据流转,安全检查
  • 持久层:提供数据的增删改查能力
  • 存储层:按照特定的格式存储数据

image.png

小结 ·架构随业务发展由简单变得复杂是规律·没必要最初用复杂架构来解决简单问题·需要用规范持续重构来对抗代码的腐朽

  1. 成为优秀架构师

定义问题→确定架构→方案落地→结果复盘

亨利福特说,如果我问客户需要什么,他们会告诉我,他们需要一匹更快的马。从亨利福特的这句话,我们可以提炼出一个最直接的问题:客户需要一匹更快的马。立足这个问题本身去找解决方案,可能永远交不出满意的答卷:寻找更好的品种,更科学的训马方式。 思考问题背后的问题,为什么客户需要一匹更快的马?可能客户想要更快的日常交通方式,上升了一个层次后,我们立刻找到了更好的解决方案:造车。 我们不能只局限于问题本身,还需要看到问题背后的问题,然后才能更容易找到更多的解决方案。

image.png

三、实践练习例子:

image.png

image.png

image.png

四、课后个人总结:

清楚地认识了客户端架构设计及应用的技术知识,对于常见架构手段的理解还不够,接下来还是要巩固并勤于编码