toB开发范式

news2024/11/18 3:23:58

前言

B端开发,也被称为后台开发或者企业级开发,是针对企业或者组织的业务需求进行的软件开发。在 B 端开发中,我们通常关注的是系统的功能性、稳定性、可扩展性以及安全性,从面向过程编程 -> 面向对象编程 + 组合式编程

以下是 B 端开发体系的一些主要元素:

  1. 技术栈:B 端开发通常涉及到复杂的技术栈,包括编程语言( JavaScript )、框架(React)等等。

  2. 架构设计:因为 B 端业务的复杂性,所以架构设计尤为重要。包括如何有效地分层(视图层,逻辑层,服务层)、如何进行微服务化、如何保证系统稳定性等等。

  3. 性能优化:B 端开发需要关注系统的性能。这不仅包括服务响应速度的提升,还包括如何在高并发环境下保持系统的稳定性。

  4. 安全:B 端开发需要对安全进行严格的考虑,包括数据的加密存储、传输安全、权限控制等等。

  5. 设计模式:针对一些复杂的场景设计,设计模式的建立,往往会带来可靠的代码维护和扩展。

  6. 其他

理解和掌握 B 端开发体系需要一点时间,但是这对于追求成为一名优秀的前端开发者来说,是非常必要的。

我们以典型的B端页面组成为例,上层搜索组件,下层列表展示 + 分页

技术栈

iCE + React + Zustand + SWR + Ant Design + react-intl

架构设计

视图层

// Container 容器
/*
 * @Author: Jiang
 * @Date: 2024-03-05 16:09:33
 * @Last Modified by: Jiang
 * @Last Modified time: 2024-03-05 16:15:01
 */

import { useState } from 'react';
import Search from './components/search/';
import List from './components/list';
import styles from './index.module.less';

const Container = () => {
  const [condition, setCondition] = useState(null);
  const { setStoreFilterConditions, setAdvConditionGroups } = tradeStore();

  return (
    <div className={styles.logPageView}>
      <Search />
      <List />
    </div>
  );
};

export default Container;
/*
 * 列表组件
 * @Author: Jiang
 * @Date: 2024-03-05 16:09:33
 * @Last Modified by: Jiang
 * @Last Modified time: 2024-03-05 16:10:03
 */

import { useState } from 'react';
import Search from './components/search';
import List from './components/list';
import styles from './index.module.less';

const List = () => {
  const [condition, setCondition] = useState(null);
  const { setStoreFilterConditions, setAdvConditionGroups } = tradeStore();

  return (
    <div className={styles.logPageView}>
      <div>123</div>
    </div>
  );
};

export default List;

逻辑层

import { create } from 'zustand';
import containerService from '@/services/system/cacheService';

const initialState = {
  tabCondition: ''
};

export const containerStore = create()((set) => ({
  ...initialState,
  getLocation: ({ location }) => {
    set((state) => ({ ...state, tabCondition: location }));
  },
  reset: () => {
    set(initialState);
  },
}));

服务层

export default {
  async getQueryField(param) {
    const queryParam = {
      catalog: param.catalog,
      codes: typeof param.codes === 'string' ? param.codes.split(',') : param.codes,
    };
    const url = `${config.tradecURL}${config.apiVersion}/databases/query-fields`;
    const data = await request.post(url, queryParam);
    return query_field_format(data);
  },
  // 修改自定义列
  async updateDisplayField(param) {
    let res = await request.post(`${config.tradecURL}${config.apiVersion}/databases/custom-query-columns`, param);
    return {
      list: displayFieldFormat(res.columns, res.id),
      type: res.type ? res.type : 'COMPACT',
    };
  }
}

性能优化

核心,避免重复渲染,useState,useRef,useEffect,这种常用的狗子,很多都搞不清楚

useState

useState 是一个 React Hook,可让您向组件添加状态变量,重点是会重新渲染页面

useRef

useRef 它返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内保持不变。

useEffect

useEffect的依赖数组中,使用的是浅比较来决定是否触发副作用。也就是说,实际比较的是引用,而不是引用的内容。如果指定为数组或对象的引用,那么只有当引用改变(指向一个新的对象或数组)时,才会触发副作用。即使新旧对象或数组的内容完全一样,只要引用不相同,也会触发副作用。

安全

  • 界面安全(手机号隐私,用户隐私)
  • Http 请求明文
  • Cookie 注入
  • CSV 脚本注入

设计模式

推荐一本书籍,人人都懂设计模式:从生活中领悟设计模式

  • 订阅者模式
  • 组合模式
  • 单例模式
  • 代理模式
  • 策略模式

其他

UI

  • 热区点击
  • 中英文,文字间距排版
  • 鼠标样式(对于链接,鼠标移动上去的小手)
  • 按钮 Loading
  • 占位符,比如没有数据的时候,显示 - ,特别是表格上的数据

逻辑

  • 翻页,比如翻到第二页,删除所有选项,请求的仍然是第二页的数据
  • 代码做好降级方案,比如对象或数组,做判空处理

总结

toB端开发,其实很简单

文章同步更新平台:掘金、CSDN、知乎、思否、博客,公众号(野生程序猿江辰)
我的联系方式,v:Jiang9684,欢迎和我一起学习交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯练习系统(算法训练)ALGO-981 过河马

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后&#xff0c;这匹马表示它不开心了……   于是&#xff0c…

21 卷积层里的多输入多输出通道【李沐动手学深度学习v2课程笔记】

目录 1. 多输入输出通道&相应代码实现 1.1 多输入 1.2 多输出 1.3 1x1 卷积层 1.4 小结 1. 多输入输出通道&相应代码实现 1.1 多输入 为了加深理解&#xff0c;我们实现一下多输入通道互相关运算。 简而言之&#xff0c;我们所做的就是对每个通道执行互相关操作&a…

YOLOv8原创二次改进DCNv3结构:即插即用|使用纯pytorch代码实现,不需要CUDA编译,并针对YOLOv8专门优化模块,基于可变形卷积的超强变种

💡本篇内容:YOLOv8原创改进DCNv3结构:即插即用|使用纯pytorch代码实现,不需要CUDA编译,并针对YOLOv8专门优化模块,基于可变形卷积的超强变种,优势:不需要编译! 💡附改进源代码及教程,用来改进🚀 DCNv3可变形网络结构 VisDrone有效涨点 关键词:DCNv3网络改进…

GTH手册学习注解

CPLL的动态配置 终于看到有这个复位功能了 QPLL SWITCHing需要复位 器件级RESET没发现有管脚引出来 两种复位方式&#xff0c;对应全复位和器件级复位 对应的复位功能管脚 改那个2分频的寄存器说明段&#xff0c;复位是自动发生的&#xff1f;说明可能起效了&#xff0c;但是分…

数字化转型导师坚鹏:基于湖北产业的科技金融创新模式与案例研究

基于湖北产业政策的科技金融创新模式与案例研究 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融有哪些创新模式&#xff1f; 课程特色&#xff1a; 有…

【linux进程信号】信号的产生

【Linux进程信号】信号的产生 目录 【Linux进程信号】信号的产生信号概念生活中的信号技术应用角度的信号注意信号概念用kill -l命令可以察看系统定义的信号列表信号处理常见方式概览 产生信号通过终端按键产生信号调用系统函数向进程发信号由软件条件产生信号由硬件异常产生信…

Pr 模版字体无法修改,始终是红色,解决办法?

1.问题如图所示&#xff1a; 2.【解决办法】&#xff1a;关闭PR&#xff0c;将PR切换为英文&#xff0c;然后重新打开PR&#xff0c;使用该模版就不会出现类似的问题。 具体操作可以参考这篇文章&#xff1a; https://blog.csdn.net/qq_42393720/article/details/128277352

picGo 图床配置 - gitee

记录一下&#xff0c;怕忘记了 PicGo 下载安装 官网下载地址 从下面随意复制一个链接到浏览器上打开 我下载的是.exe版本的&#xff0c;你可以选择自己想安装的方式 安装完之后打开就是这个样子 配置PicGo 首先安装这个插件 安装完之后会有一个gitee&#xff0c;点击&#xff…

【备战蓝桥杯系列】蓝桥杯国二选手笔记一:蓝桥杯中的Java常用语法特性

蓝桥杯Java国二选手笔记一&#xff1a;蓝桥杯中的常用语法特性 前言 参加了好几次蓝桥杯了&#xff0c;C组参加了&#xff0c;Java也参加过&#xff0c;也会用python刷算法。下面给出常用的Java语法特性在蓝桥杯中的使用&#xff0c;以及常见的需要注意的Java语法规范。有准备…

ElasticSearch学习篇10_Lucene数据存储之BKD动态磁盘树

前言 基础的数据结构如二叉树衍生的的平衡二叉搜索树通过左旋右旋调整树的平衡维护数据&#xff0c;靠着二分算法能满足一维度数据的logN时间复杂度的近似搜索。对于大规模多维度数据近似搜索&#xff0c;Lucene采用一种BKD结构&#xff0c;该结构能很好的空间利用率和性能。 …

Linux C/C++下使用Lex/Yacc构建实现DBMS(Minisql)

DBMS&#xff08;数据库管理系统&#xff09;是一种用于管理和组织数据库的软件系统。它的重要性在于提供了一种有效地存储、管理和访问大量数据的方式。本文将深入探讨如何使用C语言、Lex&#xff08;词法分析器生成器&#xff09;和Yacc&#xff08;语法分析器生成器&#xf…

【MySQL篇】 MySQL基础学习

文章目录 前言基础数据类型DDL数据库操作查询数据库创建数据库删除数据库使用数据库 DDL表操作创建表查询表修改表删除 DML-增删改添加数据更改数据删除数据 DQL-查询基础查询条件查询聚合函数分组查询排序查询分页查询编写顺序 DML-用户及权限用户管理权限控制 函数字符串函数…

【刷题】Leetcode 415 字符串相加 和 34 字符串相乘

刷题 Leetcode 415 字符串相加题目描述 思路一&#xff08;模拟大法版&#xff01;&#xff01;&#xff01;&#xff09;Leetcode 34 字符串相乘题目描述 思路一&#xff08;模拟大法版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&…

第三百九十四回

文章目录 1. 概念介绍2. 生命周期及其方法2.1 生命周期2.2 回调方法2.3 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"显示Snackbar的另外一种方法"相关的内容&#xff0c;本章回中将介绍如何监听组件的生命周期.闲话休提&#xff0c;让我们一起Talk Flu…

Linux安装MeterSphere并结合内网穿透实现公网远程访问本地服务

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

机器人大赛有什么用?

机器人大赛在多个方面都具有显著的价值。首先&#xff0c;机器人大赛可以为学生提供一个实践与创新的机会&#xff0c;有助于培养学生的动手实践能力和创新思维。在比赛过程中&#xff0c;学生需要运用所学的知识和技能&#xff0c;设计、制作和调试机器人&#xff0c;这不仅可…

注意!!墙裂推荐几个好用的实用小工具!一定会用到的!

前言 在开发的世界里&#xff0c;面对各种挑战和问题时&#xff0c;拥有一套合适的工具箱至关重要。这不仅能提升我们的工作效率&#xff0c;还能让复杂的任务变得简单&#xff0c;甚至在解决棘手问题的同时&#xff0c;还能让我们的心情略微舒畅。众所周知&#xff0c;有用的…

备战蓝桥杯Day25 - 二叉搜索树

一、基本概念 二叉搜索树&#xff08;Binary Search Tree&#xff09;&#xff0c;又称为二叉查找树或二叉排序树&#xff0c;是一种具有特定性质的二叉树。 定义&#xff1a;二叉搜索树可以是一棵空树&#xff0c;也可以是具有以下特性的非空二叉树&#xff1a; 若其左子树不…

基于51单片机的定时器时钟设计[proteus仿真]

基于51单片机的定时器时钟设计[proteus仿真] 时钟设计检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的定时器时钟设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&…

【MySql学习之路】window环境下MySql安装和安装过程中出现的问题

environment:windows software:mysql 本文主要分享mysql关系型数据库在干净的环境下,第一次安装以及在安装过程中出现的常见问题和解决方法。目前官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。很多人下了zip格式的解压发现没有setup.exe,面对一堆文件无从…