8年老司机教你,如何写出一份“有理有据使人信服,android原生开发教程

本文主要是介绍8年老司机教你,如何写出一份“有理有据使人信服,android原生开发教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

4.1. App性能要求 (可选)

4.2. App Size 要求 (可选)

  1. 现有架构(可选)
  2. 建议架构

6.1. 引入的第三方框架/SDK的简介 (可选)

  1. 开发时间线
  2. 其他可选架构(可选)
  3. 参考文献

咱先从项目背景开始聊

项目背景

如果大家面试次数够多,应该会有听过一个叫STAR原则的东西,就是介绍自己项目的时候要遵循Situation(背景)->Target(目标)->Action(行动/做法)->Result(结果)这样的顺序,尽量做到简洁。

同样的,项目背景的介绍就是对应了这个STAR原则的S,也可以说是项目的动机,为什么要做这个项目。

这个背景和动机可以是一个产品产生的动机。比如说抖鹰的产
品经理发现竞品快脚发提供了一个新的视频滤镜,而且这个滤镜在竞品快脚 中迅速攀升到用户热度的第一位了,基于我们在产品的数据分析中blalala。。。于是我们也要做这个滤镜。这就是一个简洁明了的项目背景。当然这个背景也可以是一个纯技术方面的问题,比如架构的升级等等,当然如果是架构的升级,那需要在背景里面简单的介绍现有架构的大概的一些局限性(我们下文会提到)。

本人阅读过的一些经典反例就是,背景介绍的第一句话上来就开始直接飙产品/公司内部的一些黑话,比如某个sqlite 的 database的某一个col有问题啊,或者是公司内部的一个SDK的限制等等。这些都是技术细节,不是项目大背景。提前把这些细节说出来是没法在第一段就抓住读者的眼球的,这会让读者失去仔细观看全文的热情,导致最后你的设计文档可能收不到任何有意义的反馈。

项目术语

这一部分就更重要了。项目术语这个部分必须要尽可能的把设计中涉及到的:

  1. 新引用的SDK/框架
  2. 项目之前没用过的语言
  3. 项目/公司内部工具,服务
  4. 产品本身的组件Component.

都过一遍,尤其是对一些刚刚进组的朋友,这对他们会有很大的帮助。很多刚刚入职的朋友初来乍到,可能也不太敢在研讨会上问问题,阅读没有项目术语的文档对他们可以说是直接劝退的。作为一个往高级工程师方向努力的朋友们,扩大自己在组内影响力也是一个至关重要的点,如果你的设计文档可以对初级工程师/刚刚进组的朋友更友好,那么你已经成功了一半了。很多在组里面待了很久的老鸟会懒得在产品本身的组件Component 解释太多,因为他们想当然的会觉得这是一个他自己每天都接触的组件没有必要解释。这其实是不太好的,因为你的文档不是给自己看的,而是给其他组员,甚至老板(老板很多情况下是不了解产品的技术细节的)。

比如你在新的项目中打算使用GraphQL这个查询语言和相应的框架。那么最好的做法是先在术语环节介绍一下:

  1. GraphQL -> 是一种针对图状数据进行查询特别有优势的查询语言
  2. GraphQL Query-> 一种类似于HTTP GET的GraphQL 请求,用来查询后端数据
  3. GraphQL Mutation-> 一种类似于HTTP POST 的GraphQL请求,用来修改后端数据
  4. GraphQL Subscription-> 一种建立在客户端和后端之间的长链接,用来监听后端数据变化请求,大部分GraphQL框架用websocket来实现

有了这上面的介绍,相信你在接下来设计细节说到Query/Mutation的时候就不会有人懵逼了。

技术挑战

这个环节就比较简单了,把该项目的技术难点都列举出来,但是有一个问题要切记:

不要贴源码!不要贴源码!不要贴源码!

很多朋友,包括在写博客的时候都是一言不合直接复制粘贴源码,这样的做法是非常让人讨厌的,说白了就是偷懒,连精炼一下源码,哪怕做一份伪代码加comment的功夫都不肯下。还是那句话,文档是写给别人看的,不是写给自己的。

这里我用KunMinX juejin.im/user/58ab0d… 大哥的博客里面的伪代码做正面 例子,大家如果看到这一份安卓事件分发的源代码 (KunMinX 大哥如果你看到了觉得不想自己的例子被放进我的文章,请联系我,会及时删掉并替换,在这里先感谢你):

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (mInputEventConsistencyVerifier != null) {
mInputEventConsistencyVerifier.onTouchEvent(ev, 1);
}
// If the event targets the accessibility focused view and this is it, start
// normal event dispatch. Maybe a descendant is what will handle the click.
if (ev.isTargetAccessibilityFocus() && isAccessibilityFocusedViewOrHost()) {
ev.setTargetAccessibilityFocus(false);
}
boolean handled = false;
if (onFilterTouchEventForSecurity(ev)) {
final int action = ev.getAction();
final int actionMasked = action & MotionEvent.ACTION_MASK;
// Handle an initial down.
if (actionMasked == MotionEvent.ACTION_DOWN) {
// Throw away all previous state when starting a new touch gesture.
// The framework may have dropped the up or cancel event for the previous gesture
// due to an app switch, ANR, or some other state change.
cancelAndClearTouchTargets(ev);
resetTouchState();
}
// Check for interception.
final boolean intercepted;
if (actionMasked == MotionEvent.ACTION_DOWN
|| mFirstTouchTarget != null) {
final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
if (!disallowIntercept) {
intercepted = onInterceptTouchEvent(ev);
ev.setAction(action); // restore action in case it was changed
} else {
intercepted = false;
}
} else {
// There are no touch targets and this action is not an initial down
// so this view group continues to intercept touches.
intercepted = true;
}
// If intercepted, start normal event dispatch. Also if there is already
// a view that is handling the gesture, do normal event dispatch.
if (intercepted || mFirstTouchTarget != null) {
ev.setTargetAccessibilityFocus(false);
}

复制代码

是不是瞬间没有任何兴趣了?请注意我还没有全部都复制上来,就只是一小段而已。

再看KunMinX大哥的精简版伪代码:

juejin.im/post/5d3140…

是不是瞬间就豁然开朗了。

写文档也是这样,如果我是审查者看到上来就贴项目内部的源代码的设计文档,对不起,我会直接打零分,贴源代码的设计文档,像极了初中的时候为了凑八百字而生硬的加排比句的作文一样,看起来很丰满,其实都是骨头没有肉。当你自己想钻研技术的时候,一行行的研究源码是没毛病的,但是如果你是要分享给他人的时候,千万别直接复制粘贴。

完成要求

这个环节也不多做介绍,这是和公司/产品内部的需求有关系。比如你做结构的修改,做完之后是否会影响到原有的开发流程,如果有,是否会严重的影响,这些都是需要列出来的。

现有架构和建议架构

一提到架构,很多人都会觉得很虚,感觉无从下手。其实在这方面,流程图和组件通信图都是很好的帮手。有时候可能自己会觉得无从写起,但是其实只要把流程图/组件通信图一画,其实就豁然开朗了。

这里我以我司的一个最近刚刚开源的移动开发框架 Amplify(aws.amazon.com/cn/amplify/)为例。

假如我在我的最新设计中提议使用这么一个新的框架,那么首先我得阐明这个框架是做什么的(PS:这是我自己总结的,和公司文案无关):

Amplify Mobile sdk 给客户端提供了一套离线应用解决方案,它包括了离线存储,和服务端数据增量更新,还有身份验证,日志发送等等移动端所需的功能。该框架以GraphQL语言为基础,通过WebSocket保持和服务器端的实时连接,还有基于时间戳的增量/全量更新保持客户端和服务端的数据一致。

好了,那你们组的高级工程师可能会问,那这个Amplify Mobile SDK内部是大概怎么实现离线还有和服务器端数据一致性的呢?

这个时候组件通信图就派上用场了。话不多说,先上图 (这里我们用 arcentry.com/app/ 来做示范,这个工具提供了很多AWS相关的服务组件图,比较好上手)。

一致性的呢?

这个时候组件通信图就派上用场了。话不多说,先上图 (这里我们用 arcentry.com/app/ 来做示范,这个工具提供了很多AWS相关的服务组件图,比较好上手)。

[外链图片转存中…(img-t5656pGG-1642735303097)]

这篇关于8年老司机教你,如何写出一份“有理有据使人信服,android原生开发教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441096

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s