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

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

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

 

如果对小编所发感兴趣,欢迎关注小编,小编持续更新。
相关文章
|
13天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
5天前
|
IDE Java 物联网
《Java 简易速速上手小册》第1章:Java 编程基础(2024 最新版)
《Java 简易速速上手小册》第1章:Java 编程基础(2024 最新版)
13 0
|
5天前
|
安全 Java 开发者
Java并发编程:深入理解Synchronized关键字
【4月更文挑战第19天】 在Java多线程编程中,为了确保数据的一致性和线程安全,我们经常需要使用到同步机制。其中,`synchronized`关键字是最为常见的一种方式,它能够保证在同一时刻只有一个线程可以访问某个对象的特定代码段。本文将深入探讨`synchronized`关键字的原理、用法以及性能影响,并通过具体示例来展示如何在Java程序中有效地应用这一技术。
|
6天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
7天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。
|
7天前
|
负载均衡 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开发者的关键技能。
|
7天前
|
Java API 数据库
深研Java异步编程:CompletableFuture与反应式编程范式的融合实践
【4月更文挑战第17天】本文探讨了Java中的CompletableFuture和反应式编程在提升异步编程体验上的作用。CompletableFuture作为Java 8引入的Future扩展,提供了一套流畅的链式API,简化异步操作,如示例所示的非阻塞数据库查询。反应式编程则关注数据流和变化传播,通过Reactor等框架实现高度响应的异步处理。两者结合,如将CompletableFuture转换为Mono或Flux,可以兼顾灵活性和资源管理,适应现代高并发环境的需求。开发者可按需选择和整合这两种技术,优化系统性能和响应能力。
|
8天前
|
缓存 监控 Java
Java并发编程:线程池与任务调度
【4月更文挑战第16天】Java并发编程中,线程池和任务调度是核心概念,能提升系统性能和响应速度。线程池通过重用线程减少创建销毁开销,如`ThreadPoolExecutor`和`ScheduledThreadPoolExecutor`。任务调度允许立即或延迟执行任务,具有灵活性。最佳实践包括合理配置线程池大小、避免过度使用线程、及时关闭线程池和处理异常。掌握这些能有效管理并发任务,避免性能瓶颈。
|
8天前
|
设计模式 运维 安全
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第15天】在Java开发中,多线程编程是提升应用程序性能和响应能力的关键手段。然而,它伴随着诸多挑战,尤其是在保证线程安全的同时如何避免性能瓶颈。本文将探讨Java并发编程的核心概念,包括同步机制、锁优化、线程池使用以及并发集合等,旨在为开发者提供实用的线程安全策略和性能优化技巧。通过实例分析和最佳实践的分享,我们的目标是帮助读者构建既高效又可靠的多线程应用。
|
9天前
|
SQL 安全 Java
Java安全编程:防范网络攻击与漏洞
【4月更文挑战第15天】本文强调了Java安全编程的重要性,包括提高系统安全性、降低维护成本和提升用户体验。针对网络攻击和漏洞,提出了防范措施:使用PreparedStatement防SQL注入,过滤和转义用户输入抵御XSS攻击,添加令牌对抗CSRF,限制文件上传类型和大小以防止恶意文件,避免原生序列化并确保数据完整性。及时更新和修复漏洞是关键。程序员应遵循安全编程规范,保障系统安全。