Java高级编程-React 项目的架构和规范

简介:   架构和规范架构是为了解决什么问题呢?我理解是效率问题。通过一个好的架构,能让你很容易地、具备一致性地理解一个系统,在此基础上快速地、可持续地完成业务功能。

 

 

架构和规范

架构是为了解决什么问题呢?我理解是效率问题。通过一个好的架构,能让你很容易地、具备一致性地理解一个系统,在此基础上快速地、可持续地完成业务功能。它保证的有三点:

  • 代码库阅读起来很轻松
  • 添加新功能时能很快,理想情况是,仅添加跟业务有关的代码,跟样式、基础设施相关的东西,在一个较为成熟的项目上,应该都比较稳定了
  • 在演进过程中,仍然能保持添加功能的速度很快

规范是为了解决什么问题呢?我理解是协作问题。大家一个团队工作,命名习惯不同,代码风格不同,水平参差不同,如何保证整体质量和风格面貌?靠规范呗。

那么架构和规范分别有什么例子呢?

架构

比如目录结构、组件层次、状态管理、副作用管理、路由系统、UX 系统(样式方案)、埋点设计、测试策略、持续集成、构建方式、部署方式等属此列。可以看到,为了开发一个业务功能,底下可能需要这么多基础设施支撑。而架构的目的,就是把尽可能的操作(比如路由、埋点、UX 一致性等)变成常量级别的操作、甚至默认标配的操作,这样才能让你开发起来顺畅,做到只关心业务的部分。

  • 目录结构:这个问题与组件层次问题息息相关。在 APP 的场景下,它与 web 又不太一样,APP 往往是首页路由+卡片式堆叠页面。怎么将页面结构映射到目录结构上,怎么保持清晰?是遵循 duck 目录结构设计方式,还是功能式目录结构方式?如果小型项目选择从功能式开始,后续是否有向 duck 结构的迁移路径?需要多少人力?
  • 组件层次:是按照 container component -> presentation component 的结构划分?还是不 care?
  • 状态管理:React Context、mobx、redux,如何选择?
  • 副作用管理:promise 方案?thunk 方案?saga 方案?
  • 类型系统:TS。语言层级的类型系统所带来的架构抽象能力
  • 路由系统:怎么做到让页面增删变成常量级别的操作?怎么支持多种不同的渲染模式(不卸载/卸载)?
  • UX 系统:怎么做到跟 UX 设计保持高度一致?怎么保证只需要常数级别的操作就可以达到这种一致性?如何保证只需要常数级别的操作就可以变更、尝试新的 UX 设计?
  • 埋点设计:数据乃产品之本,怎么设计埋点系统,让它对业务代码的侵入性达到最小?怎么保持细粒度埋点的灵活性?如何做到让埋点变成常量级别的操作?埋点数据结构如何设计?统计如何统计?要生成什么报表?报表的生成如何做到常量级别的操作(即不需要人工执行脚本去统计)?
  • 测试策略:测哪些?测什么?测多细?由谁测?需要制定可落地的测试策略
  • 持续集成:开发方式(分支 or 主干)?自动化测试分别在什么阶段运行?如何让持续集成的配置变成常数级别(而不需要每次换机器都要手动重新搭 CI)?
  • 构建方式:用什么工具进行自动化构建?
  • 持续部署:部署目的地?部署频率?是否能做到每次提交都进行部署?是否能准备与生产环境尽可能接近的 UAT 环境?

规范

比如代码风格、编程风格、命名风格、提交信息、提交粒度、开发习惯、代码整洁程度、单元测试好坏等属此列。

  • 代码风格:Prettier 一键解决
  • 编程风格:Eslint 尽量覆盖
  • 命名风格:明确基本原则后,写入 README 做宪法 + 术语表
  • 提交信息:precommit hook,但没法规范到信息级别,而提交信息是跟提交粒度息息相关的
  • 提交粒度:较难以统一的部分。我还是把它放到架构部分去吧
  • 开发习惯:自暴自弃的部分。比如 TDD 等
  • 代码整洁程度:基本只能用 code review + PR 来规范。这跟开发者是谋生心态还是工匠心态有关,跟组织是技术属性的组织还是政治属性的组织也有关系
  • 单元测试好坏:明确好测试的标准后,制定测试策略 + 写入 README 做宪法 + code review 经常反馈

其他的欢迎补充。

 

如果对小编所发感兴趣,欢迎关注小编,小编持续更新。

 

架构和规范

架构是为了解决什么问题呢?我理解是效率问题。通过一个好的架构,能让你很容易地、具备一致性地理解一个系统,在此基础上快速地、可持续地完成业务功能。它保证的有三点:

  • 代码库阅读起来很轻松
  • 添加新功能时能很快,理想情况是,仅添加跟业务有关的代码,跟样式、基础设施相关的东西,在一个较为成熟的项目上,应该都比较稳定了
  • 在演进过程中,仍然能保持添加功能的速度很快

规范是为了解决什么问题呢?我理解是协作问题。大家一个团队工作,命名习惯不同,代码风格不同,水平参差不同,如何保证整体质量和风格面貌?靠规范呗。

那么架构和规范分别有什么例子呢?

架构

比如目录结构、组件层次、状态管理、副作用管理、路由系统、UX 系统(样式方案)、埋点设计、测试策略、持续集成、构建方式、部署方式等属此列。可以看到,为了开发一个业务功能,底下可能需要这么多基础设施支撑。而架构的目的,就是把尽可能的操作(比如路由、埋点、UX 一致性等)变成常量级别的操作、甚至默认标配的操作,这样才能让你开发起来顺畅,做到只关心业务的部分。

  • 目录结构:这个问题与组件层次问题息息相关。在 APP 的场景下,它与 web 又不太一样,APP 往往是首页路由+卡片式堆叠页面。怎么将页面结构映射到目录结构上,怎么保持清晰?是遵循 duck 目录结构设计方式,还是功能式目录结构方式?如果小型项目选择从功能式开始,后续是否有向 duck 结构的迁移路径?需要多少人力?
  • 组件层次:是按照 container component -> presentation component 的结构划分?还是不 care?
  • 状态管理:React Context、mobx、redux,如何选择?
  • 副作用管理:promise 方案?thunk 方案?saga 方案?
  • 类型系统:TS。语言层级的类型系统所带来的架构抽象能力
  • 路由系统:怎么做到让页面增删变成常量级别的操作?怎么支持多种不同的渲染模式(不卸载/卸载)?
  • UX 系统:怎么做到跟 UX 设计保持高度一致?怎么保证只需要常数级别的操作就可以达到这种一致性?如何保证只需要常数级别的操作就可以变更、尝试新的 UX 设计?
  • 埋点设计:数据乃产品之本,怎么设计埋点系统,让它对业务代码的侵入性达到最小?怎么保持细粒度埋点的灵活性?如何做到让埋点变成常量级别的操作?埋点数据结构如何设计?统计如何统计?要生成什么报表?报表的生成如何做到常量级别的操作(即不需要人工执行脚本去统计)?
  • 测试策略:测哪些?测什么?测多细?由谁测?需要制定可落地的测试策略
  • 持续集成:开发方式(分支 or 主干)?自动化测试分别在什么阶段运行?如何让持续集成的配置变成常数级别(而不需要每次换机器都要手动重新搭 CI)?
  • 构建方式:用什么工具进行自动化构建?
  • 持续部署:部署目的地?部署频率?是否能做到每次提交都进行部署?是否能准备与生产环境尽可能接近的 UAT 环境?

规范

比如代码风格、编程风格、命名风格、提交信息、提交粒度、开发习惯、代码整洁程度、单元测试好坏等属此列。

  • 代码风格:Prettier 一键解决
  • 编程风格:Eslint 尽量覆盖
  • 命名风格:明确基本原则后,写入 README 做宪法 + 术语表
  • 提交信息:precommit hook,但没法规范到信息级别,而提交信息是跟提交粒度息息相关的
  • 提交粒度:较难以统一的部分。我还是把它放到架构部分去吧
  • 开发习惯:自暴自弃的部分。比如 TDD 等
  • 代码整洁程度:基本只能用 code review + PR 来规范。这跟开发者是谋生心态还是工匠心态有关,跟组织是技术属性的组织还是政治属性的组织也有关系
  • 单元测试好坏:明确好测试的标准后,制定测试策略 + 写入 README 做宪法 + code review 经常反馈

其他的欢迎补充。

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:468947140

点击链接加入群聊【Java-BATJ企业级资深架构】:https://jq.qq.com/?_wv=1027&k=5zMN6JB

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

 

如果对小编所发感兴趣,欢迎关注小编,小编持续更新。
相关文章
|
9天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3
|
12天前
|
Java 调度
Java并发编程:深入理解线程池的原理与实践
【4月更文挑战第6天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将从线程池的基本原理入手,逐步解析其工作过程,以及如何在实际开发中合理使用线程池以提高程序性能。同时,我们还将关注线程池的一些高级特性,如自定义线程工厂、拒绝策略等,以帮助读者更好地掌握线程池的使用技巧。
|
12天前
|
设计模式 安全 Java
Java并发编程实战:使用synchronized关键字实现线程安全
【4月更文挑战第6天】Java中的`synchronized`关键字用于处理多线程并发,确保共享资源的线程安全。它可以修饰方法或代码块,实现互斥访问。当用于方法时,锁定对象实例或类对象;用于代码块时,锁定指定对象。过度使用可能导致性能问题,应注意避免锁持有时间过长、死锁,并考虑使用`java.util.concurrent`包中的高级工具。正确理解和使用`synchronized`是编写线程安全程序的关键。
|
15天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【4月更文挑战第3天】 在Java并发编程中,线程池是一种重要的资源管理工具,它能有效地控制和管理线程的数量,提高系统性能。本文将深入探讨Java线程池的工作原理、应用场景以及优化策略,帮助读者更好地理解和应用线程池。
|
10天前
|
Java
Java 并发编程:深入理解线程池
【4月更文挑战第8天】本文将深入探讨 Java 中的线程池技术,包括其工作原理、优势以及如何使用。线程池是 Java 并发编程的重要工具,它可以有效地管理和控制线程的执行,提高系统性能。通过本文的学习,读者将对线程池有更深入的理解,并能在实际开发中灵活运用。
|
7天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
11天前
|
Java
Java并发编程:深入理解线程池
【4月更文挑战第7天】在现代软件开发中,多线程编程已经成为一种不可或缺的技术。为了提高程序性能和资源利用率,Java提供了线程池这一强大工具。本文将深入探讨Java线程池的原理、使用方法以及如何根据实际需求定制线程池,帮助读者更好地理解和应用线程池技术。
15 0
|
12天前
|
缓存 安全 Java
Java并发编程进阶:深入理解Java内存模型
【4月更文挑战第6天】Java内存模型(JMM)是多线程编程的关键,定义了线程间共享变量读写的规则,确保数据一致性和可见性。主要包括原子性、可见性和有序性三大特性。Happens-Before原则规定操作顺序,内存屏障和锁则保障这些原则的实施。理解JMM和相关机制对于编写线程安全、高性能的Java并发程序至关重要。
|
1天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
3天前
|
设计模式 运维 安全
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第15天】在Java开发中,多线程编程是提升应用程序性能和响应能力的关键手段。然而,它伴随着诸多挑战,尤其是在保证线程安全的同时如何避免性能瓶颈。本文将探讨Java并发编程的核心概念,包括同步机制、锁优化、线程池使用以及并发集合等,旨在为开发者提供实用的线程安全策略和性能优化技巧。通过实例分析和最佳实践的分享,我们的目标是帮助读者构建既高效又可靠的多线程应用。