深夜,聊聊架构设计

之前写过架构设计的文章,最近一直在看《从0开始学架构》这个技术专栏,有一些自己的思考,分享给大家,如果在面试中被问及这个问题,大家就可以按照这个思路来回答。

很多读者都是移动端开发,而市面上的书或者专栏基本都是后端,难道架构是天然为后端而生的吗?其实不是,但确实后端架构比客户端以及前端要复杂。

经过我的思考,我试图抽象一些移动端架构的特性出来。

高并发、负载均衡和容灾是后端架构设计的几个核心点,但这几个点在移动端上不存在,原因是所有的请求都会发送到同一个后端,这样移动端和后端就是个多对一的关系,所以移动端自然就没有高并发了。

一、移动端架构设计到底做什么?

常规来看,基本就是MVC、MVP、MVVM以及组件化的东西,这些东西说是架构,但本质上就是模块化的变种,这类东西主要是做业务架构,将一个很大的业务划分为很多小业务,每个小业务就是一个模块。

另一部分架构内容则是技术架构,一般是分层的,最底层是基础框架,包括网络、存储、日志、图片加载等第三方库;中间层则是上层业务经过抽象后所形成的公共业务层,也可以叫做中台,这一块往往包含账号、支付、客服、地图等相对独立的业务;最上层就是核心业务了。从变动性来说,基础框架变动最低,公共业务层次之,上层业务变动最高。

总结来看:移动端架构 = 业务架构(模块化) + 技术架构(分层)

二、为什么要做架构设计?

很多人(包括我)只知道要做架构设计,但不知道为什么要做,如果非要说,大家估计能总结为如下几点:

“为了让项目看起来更有技术含量”
“大家都做架构设计,我也得做”
“提高程序性能和可扩展性,降低后续的维护成本”

其实这些目标都比较抽象,不好衡量,做完架构设计后未必能达到预期。

举个例子,MVP特别流行,MVP的好处就是降低耦合,降低后续维护成本,但事实上,用了MVP后,代码极度膨胀,新增了很多类,代码可读性也差,很多新人上手困难,在一大堆presenter中迷失了,大家想想,这样做维护成本是否真的降低了?

三、架构设计的目标

如果让我再说一遍,我想我的看法有所改变。

为了寻找架构设计的目标,我们要寻找当前项目中的复杂度来源,也就是说看看当前项目中哪个方面最痛最急需改进,举个例子吧,像滴滴出行这种APP,复杂度来自于大量相似的业务线,而且这些业务线又是在不同的团队开发,那团队协作问题就极为迫切,那我们的架构就要围绕这个来。再比如qunar这种旅行APP,它对动态性的要求特别高,因此qunar内部大量使用了react native。

换言之,架构设计的目标是解决当前项目的痛点,如果当前项目没有痛点,那就先别进行架构设计了。

四、如何做架构设计

架构设计要以实用为目的,不要光想着造一个世上最牛逼的架构,这样往往是不靠谱的,我们不是救世主。总结下,架构设计有三个基本原则:

1、合适优于世界领先
适合自己当前业务的就好,不要总想搞世界领先的架构,比如一个用户量100万的系统,光想着对标微信的架构,那微信日活上亿,适合微信的架构未必适合自己。

2、简单优于复杂
如同写代码一样,代码量越少越简单越好,架构设计也是一样,越简单的架构越牛逼。

3、演进优于一步到位
可扩展性我们当然要考虑,但是人不是神,无论你怎么去预测未来的系统演进,总是很大可能会失算。所以架构设计优先解决当下的问题,至于后来的问题,到时候再对架构方案进行改进。

架构设计还要考虑成本,你设计了一个很好的架构,但是需要投入20个人,还要项目停止2个月专门做架构开发,那这种成本就太高,很难推进。拿后端来举例,你设计了一个巨牛逼有效的架构,但需要1000台服务器,然后公司买不起这么多服务器,那也是白搭。

这三个原则也是有优先级的,具体是:
合适优于先进 > 演化优于一步到位 > 简单优于复杂

合适也就是适应当前需要是首位的,连当前需求都满足不了谈不到其他。架构整体发展是要不断演进的,在这个大前提下,尽量追求简单,但也有该复杂的时候,就要复杂,比如生物从单细胞一直演化到如今,复杂是避免不了的。

本次深夜分享先到这,文中描述了我对架构的理解,可能有不妥的地方,还望大家理解,睡了。。。

推荐阅读
你亲手写的代码,正在出卖你
深夜,聊聊设计模式
深夜,分享一个Git小技巧
编程·思维·职场
欢迎扫码关注

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

singwhatiwanna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值