热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

手机端技术方案设计的经验总结

由于所接触的业务复杂度高、技术难度大,不能像之前开发APP那样拿到需求后画画流程图、定一下各领域的时间节点和项目里程碑就开干,由于不对技术做笼统并输出技术方案设计文档是讲不清楚项目

  由于所接触的业务复杂度高、技术难度大,不能像之前开发APP那样拿到需求后画画流程图、定一下各领域的时间节点和项目里程碑就开干,由于不对技术做笼统并输出技术方案设计文档是讲不清楚项目的整体实现方案的,即便做出了功能,只需技术指标不达标(比方精确率低、耗时长等),就很难达到和产品预期相符的客户体验。所以需要有和相似于大型项目的服务端技术方案设计一样,对用户端APP做技术方案设计的环节,设计出高性能和高扩展性的技术方案,避免项目风险大、项目目标难达预期、技术债务堆积等问题。
  手机端的技术方案设计,同样要遵循合适(合适优于业界领先)、简单(简单优于复杂)、演化(演化优于一步到位)的准则,以高可用、高性能和高扩展性为目标。相比于服务端的技术方案设计,做事的思路和方法都差不多,只是侧重点不一样而已。
  在做技术方案设计时,我对自己的要求是需要遵循如下几大准则:
1、成事心态:作为架构师,在设计技术方案时要千方百计达成产品需求和目标。即便产品需求实现难度大、目标不切实际、技术上存在瓶颈,经过严谨的分析验证后,在客观陈述技术瓶颈的同时还要基于对客户需求的洞察给出自己对产品方案的建议,推动其它领域一起去促成项目目标的达成;
2、全球视野:对于技术难度大或者没有头绪的事情,多看看同行头部企业是怎样做的,尤其是自己不理解、认为有难度的地方,要通过查阅资料、深入交流等方式,去开阔自己的视野,切忌成了井底之蛙在坐井观天;
3、说到做到:方案设计出来不是架构师工作的终点,而是工作的起点,架构师的厉害之处在于不仅能设计出合适的技术方案,还能将技术方案落地,达成预期目标。要通过在落地过程中遇到的问题去反思复盘,优化自己做技术方案设计的方法、加深对技术的了解。

  下面讲讲我对手机端技术方案设计流程的了解:
一、需求分析:
  需求分析包括产品需求分析和技术需求分析,产品需求主要为功能性需求,技术需求主要为非功能需求,比方性能、稳固性、安全性等,技术需求往往是设计技术方案时的束缚。
  对产品的需求分析,最基本的是要理解做什么?处理客户什么问题?什么时候做完?需要做成什么样子?即要弄清楚产品功能、客户需求、时间节点和产品规格。除了弄清楚这几点之外,还要基于对客户需求的洞察,去挖掘文字背后的隐藏信息,这些你洞察到但产品需求中没有呈现出来的信息,往往就是潜在的需求变更点,即便你将洞察到的需求和疑虑告知产品,产品回复暂时不做考虑,在设计技术方案时也要将这些可能的需求考虑进去加强技术方案的拓展性。具体做法是假想自己就是客户,去模拟客户在特定场景下可能的行为。
  对技术的需求分析,主要是要识别出假如要保障产品在生命周期内持续安全稳固的运行,需要做些什么,这通常都属于非功能性需求,比方:
1、安全性问题:被劫持、被逆向、被抓包等;
2、兼容性问题:在不同设施上运行可能存在的兼容性风险;
3、性能问题:内存泄漏、卡慢、高CPU占用等可能导致整机流畅度和功耗等问题;
4、 合规问题:技术上可能存在的法律风险,比方使用第三方开源库等。

二、方案设计:
  需求分析的主要工作是知道做什么?要做成什么样?什么时候做完?做什么、做成什么样是目标,什么时候做完是束缚。技术方案设计的主要工作是在产品和技术的束缚下,设计技术方案实现项目目标。其实技术方案的设计就是一个工作拆解的过程,现在的项目通常都很复杂、涉及领域众多,只有拆成一个一个地模块,而后由团队相互协作,才能更好的达成项目目标。架构师要做的就是笼统问题、拆解模块、串联各模块搭建方案以及明确每个模块的实现方案,具体到工作上就是三个方面的工作:输出技术架构图、输出核心流程图、明确各模块的技术实现方案。
  技术架构图就是笼统问题和拆解模块的工具,架构图分很多种,其中分层、分模块的架构图最为流行,做技术方案设计的首要任务就是画出基于项目的技术架构图,通过划分为多个笼统的层级实现逻辑上的拆分、通过对单个层级下划分为多个模块实现物理上的拆分。Android平台架构图就是典型的分层、分模块架构,具体如下图所示:

图1 Android 平台架构图
  通过架构图能够清晰明了地知道整个项目有哪些技术领域和哪些技术点组成,假如要让整个项目运作,就需要通过流程将技术架构中的各模块串联起来,技术架构中的每一层和每个模块就像一个一个的齿轮,流程图就像是润滑油,让齿轮之间联动运行起来。在技术方案设计阶段,只要要画出项目的主流程和核心流程即可以了,其它子流程可以在详细设计的时候再画。
  明确整个项目的方案后,还需要明确技术架构中每个子模块的实现方案,在能够满足功能和指标需求的前提下,子模块尽量复用公司或者社会现成资源,其中社会资源包括开源的项目以及通过商务合作的资源,由于快速低成本交付是项目的首要目标。假如没有现成的方案,就需要根据公司的技术实力和项目的束缚,确定是自研还是寻觅技术合作。假如是自研需要走预研流程,在有预研成果对项目有肯定的把握后才能进入工程化。假如是寻觅技术合作,需要做技术方案选型,技术方案选型要基于项目的各维度关注点来选出最合适而非最厉害的方案(合适优于业界领先),在方案选型中呈现的信息必需是经过实际验证得出的,切忌只是做信息的收集,避免由于信息不精确而误判导致潜在的项目风险。

三、方案总结:
  技术方案设计完成后,需要给出总结性的结论,回答团队和领导的疑虑。由于团队中领域众多,大家对技术的了解和认知各有不同,关注的重点也各不相同。所以在给出结论时要用直白简练而非技术性的语言,解答各干系人的关注点。

结论通常包含如下几个方面的内容:
1、 技术上是否实现?
2、 技术上能做到什么程度?
3、 项目上存在哪些风险?有何应对方案?
4、 整个项目的投入情况如何?
  用一句话形容技术上是否实现就可,技术上可行/不可行。前提是要基于项目的束缚,包括产品上和技术上的。
  假如可行,需要输出整个项目以及各技术子模块的技术规格,讲清楚衡量技术实力的指标以及能做到什么程度。

  接下来需要阐述清楚在项目过程中存在的潜在风险,风险包括:
1、 进度风险:进度上存在的风险;
2、 资源风险:人力等资源上存在的风险;
3、 涌现风险:多个技术组合、并行存在的风险,比方功耗、系统资源瓶颈等问题;
4、 体验风险:比方耗时长、操作繁琐等和产品预期不一致的风险问题;
5、 指标风险:受限于项目束缚和技术瓶颈,无法达成产品规格的风险。

  风险的应对方案包括:
1、 消除风险:风险可以消除且对项目没有影响,这种通常不用写出来;
2、 规避风险:无法正面处理,但可以曲线救国的方案,这种情况可能对客户体验或者其它方面有影响,必需写出来讲清楚,要在项目上达成一致;
3、 减小风险:风险无法消除但可以降低风险对项目的影响。

  最后需要讲清楚项目在人力、资金方面的投入成本,便于领导决策项目的价值。能否值得投入,或者调整项目策略。

四、方案落地:
  在方案设计完成,且通过项目内、领导的决策后,接下来需要按照设计的方案落地达成技术规格,在落地的过程中需要重点关注如下几个方面:
1、 分里程碑拆解目标,相似于敏捷开发小步快跑的方式及时交付、遇到问题能快速调整,降低风险,避免一条路走到黑、迟迟看不到效果。
2、 分点专项验证各技术点的达成情况,各个关键的技术点都需要针对性验证和验收,齿轮的质量有保障,多个齿轮组成的系统联动才会有保障。
3、 遇到异常时优先尝试去处理,假如在一段时间内没有进展需及时调整方案;只需是在方案设计阶段经过严格的验证,遇到异常时首先不应否定自己的方案,要想办法尝试处理遇到的问题。假如实在处理不了,要及时调整避免对项目进度造成影响。
4、 工程化的优化是锦上添花的操作,但要正确了解工程化的优化,不是打补丁,而是方案层面的优化,比方多个技术并行减少运行时的耗时;
5、 项目结束后及时复盘总结,优化后续的技术方案设计流程和方法。

  下面是对整篇文章的总结:
1、 技术方案的设计要以全球视野去千方百计做成项目,并且方案设计出来后要能亲身落地,达成项目目标;
2、 技术方案设计要充分洞察产品和技术需求,基于需求通过架构图拆解模块,并通过流程将各模块中的技术点串联起来使整个项目运行起来。对于关键的技术点,要基于严谨的验证分析做出方案选型;
3、 技术方案的评审要给出明确的结论,以各领域都能懂的语言表达清楚技术的可行性、技术规格、风险和应对方案以及项目投入情况;
4、 技术方案设计评审通过不是架构师工作的终点,把技术方案落地达成项目目标才是终点。


推荐阅读
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
    11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ... [详细]
author-avatar
enochsun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有