当前位置: 首页 > news >正文

谈一谈工作中的前后端功能开发范围

在BS开发中,往往都是团队开发,分为前端和后端,往往经常会遇到此处功能是前端进行功能开发还是后端进行功能开发的讨论,本文以我自己的观点进行论述。

笔者的观点是:

  1. 功能实现的优先性:您强调,无论是前端还是后端开发,重要的是能够实现功能。这种实用主义的观点强调了结果的重要性,而不是过程中的具体实现细节。【不论黑猫白猫,能抓老鼠的就是好猫】

  2. 团队和技术栈的考虑:应该基于团队的技术能力和项目的特点来决定功能的实现方。这表明,技术选择不应仅仅基于技术本身,而应结合团队能力和项目需求。

  3. 前后端分工的考虑

    • 技术特点:如JavaScript在处理计算密集型任务和精确数值计算方面的局限性,这些因素应在分配前后端任务时考虑。
    • 项目需求:并发性和需求的变动性是决定前后端分工的重要因素。例如,高并发应用可能需要将一些任务分配到前端以减轻后端负担。
    • 技术生态:对技术生态的了解也是重要的,因为它可以帮助开发人员利用现有的工具和库来补充他们的解决方案。
  4. 团队成员的态度和能力

    • 一些团队成员可能会推脱责任,而优秀的开发人员应相信自己的技术栈可以完成各种任务。
    • 同时,如果有合理的原因,某些任务可能确实不适合某一端来完成。

1.一般情况说明

笔者个人认为以下情况或多或少说明了一些人物的特点和立场问题

2.1.干不了

干不了,这个不属于我方的范围,应该给到另一端。

在这种情况下并且无法拿出一些实际和理论的说明

  • 我80%认定此类人都在推脱
  • 没有主观能动性,好的开发是相信自己的技术栈可以干任何的事情。

下结论:此类人80%是喜欢推脱的人,10%是大神、10%技术不扎实。

2.2. 不可以做,因为…

此类人,一般可以拿出一定的原因进行问题说明。有的原因是可取的有的原因是不可取的。

3. 前后端工作分工说明

3.1. 功能实现的优先性

在软件工程的实践中,功能的实现是首要任务。在这个阶段,最关键的是确保所需功能得以实现,而不必过于纠结于是否以最优雅或最理想的方式实现。这种实用主义的方法强调了可操作性和实际效果,为项目提供了明确的方向和目标。

3.2. 评估实现的优质和合理性

一旦功能实现的可行性得到确认,下一步是评估其实现方式的优质性和合理性。这涉及到多个方面的考量:

3.2.1. 技术特点的考量
  • 前端限制:诸如JavaScript的单线程模型和执行速度限制等因素,对于某些类型的任务(如计算密集型任务)可能不是最佳选择。在这些情况下,考虑将这些任务分配给后端可能更为合适。
    • JavaScript并不擅长计算密集型操作
  1. 单线程执行模型: JavaScript在浏览器中运行时通常是单线程的,这意味着它在执行长时间运行的复杂计算时可能会阻塞用户界面。虽然现代JavaScript引擎(如V8)进行了优化以提高性能,但它们仍然受限于单线程的限制。

  2. 执行速度: 相比于编译语言如C++或Java,JavaScript作为一种解释型语言,在执行速度上通常较慢。这是因为JavaScript代码在执行前需要先被解释或即时编译,而编译语言在运行前已经被编译为机器码。

  3. 优化限制: 虽然JavaScript引擎如V8进行了大量优化,但它们在优化计算密集型任务方面的能力仍然有限,特别是当与专门为此类任务设计的语言或环境相比。

  4. 内存管理: JavaScript的自动内存管理(垃圾回收)可能导致性能开销,尤其是在进行大规模或复杂的计算时。

    • JavaScript无法进行银行数值计算

JavaScript中的所有数字都是以64位浮点数的形式存储的(遵循IEEE 754标准),这意味着在处理非常大或者需要非常高精度的数字时可能会遇到精度问题。这在金融计算中尤为重要,因为金融计算通常要求非常高的精确度。

  • 后端的强项:后端通常处理更为复杂的逻辑,数据存储和安全问题。对于需要快速处理大量数据,或者需要保证数据安全和完整性的任务,后端是更合适的选择。

3.2.2. 项目需求的考量

  • 并发性能:高并发应用要求后端具备强大的处理能力。前端可以通过承担一些非关键任务来减轻后端的负担。

在软件并发较高的项目中,可以将一些非必要的操作交到前端去实现,尽量减少后端的并发压力,比如读取Shapefile文件中的图形(往往这样的项目并发不高,只是举例,不必争论),就不要把文件上传到后端,后端再解析为WKT或者GeoJson等再返回给前端了,前端可以使用第三方包自己获取其中的矢量空间范围。

  • 需求的动态性:如果一个项目的需求频繁变更,那么将某些功能实现为可配置和由后端数据驱动可能更为合适,以便快速适应这些变化。

对于此类便需要将需求中经常变化的内容开发为可配置,并由后端数据驱动。前端进行变化,如此就可以使需求的变化不会导致项目的重复部署。

3.2.3. 技术生态的考量

  • 库和工具的支持:了解所使用的技术栈及其生态系统是至关重要的。某些任务可能由于缺乏适当的库或工具支持而更适合在特定端(前端或后端)实现。

  • 社区和文档:一个强大且活跃的开发社区以及丰富的文档资源,可以为开发人员在特定技术选择上提供更多的支持和便利。

综上所述,前后端工作分工不仅仅是一种技术决策,更是一种战略考量,涉及到技术特点、项目需求和技术生态等多个方面。有效的分工可以提高开发效率,优化资源利用,并增强最终产品的性能和用户体验。

相关文章:

谈一谈工作中的前后端功能开发范围

在BS开发中,往往都是团队开发,分为前端和后端,往往经常会遇到此处功能是前端进行功能开发还是后端进行功能开发的讨论,本文以我自己的观点进行论述。 笔者的观点是: 功能实现的优先性:您强调,无…...

Kubernetes 学习总结(46)—— Pod 不停重启问题分析与解决

我们在做性能测试的时候,往往会发现我们的pod服务,频繁重启,通过kubectl get pods 命令,我们来逐步定位问题。 现象:running的pod,短时间内重启次数太多。 定位问题方法:查看pod日志 kubectl get event …...

Vulnhub靶机:Bellatrix

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:Bellatrix(10.0.2.9) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/hogwa…...

深入探讨 AutoGPT:彻底改变游戏的自主 AI

原文地址:Deep Dive into AutoGPT: The Autonomous AI Revolutionizing the Game 2023 年 4 月 24 日 AutoGPT 是一个功能强大的工具,它通过 API 使用 GPT-4 和 GPT-3.5,通过将项目分解为子任务并在自动循环中使用互联网和其他工具来创建完…...

Java Web之网页开发基础复习

tomcat之网页开发基础复习 **声明** :HTML标准规范 </!doctype> <html> : 根标签 <head>: 头部标签 内含<title><meta><link><style> <body>: 主体 <body></body> html标签 单标签: <标签名 \> 双标…...

华容道问题求解第一部分_详细设计(一)之棋子和游戏类_初始化部分

按&#xff1a;因为自控力和能力的原因&#xff0c;这个其实是在和代码同时进行的。 主要 类 说明 这一层是整个项目的基础&#xff0c;将对未来的算法的效率产生重要影响。为了和界面隔离&#xff0c;以及自身逻辑的清晰&#xff0c;下面的两个类是必须的&#xff0c;棋子类…...

【框架】Spring 框架重点解析

Spring 框架重点解析 1. Spring 框架中的单例 bean 是线程安全的吗&#xff1f; 不是线程安全的 Spring 框架中有一个 Scope 注解&#xff0c;默认的值是 singleton&#xff0c;即单例的&#xff1b;因为一般在 Spring 的 bean 对象都是无状态的&#xff08;在生命周期中不被…...

js中的内存泄漏

理解 内存泄漏是计算机,中由于疏忽或者错误造成程序未能释放已经不在使用的内存,知道浏览器结束 垃圾回收机制 js具有自动的垃圾回收机制,垃圾收集器会定期(周期性)的找出那些不在继续使用的变量,然后释放内存 常见的内存泄漏 意外的全局变量 function foo(){bar 123123…...

营业执照年报申报

姿势&#xff1a;营业执照年报申报 借鉴文章&#xff1a;个体工商户年报申报流程&#xff08;不要再花冤枉钱&#xff09; 1、国家企业信用信息公示系统 地址&#xff1a;https://www.gsxt.gov.cn/index.html 2、登录&#xff08;重庆的方式二简单&#xff09;...

Springboot教程(五)——单元测试

idea中一般使用JUnit进行单元测试 基本使用 我们可以在idea的test文件夹下的XXXXApplicationTests内进行单元测试&#xff1a; 可以在Test标注的方法上写测试代码&#xff1a; SpringBootTest class C0101ApplicationTests {Testfun contextLoads() {println("Hello …...

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…...

Unity生命周期函数解析

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity生命周期函数解析 Unity 生命周期函数是在游戏对象的不同阶段被调用的方法&#xff0c;通过这些函数&#xff0c;我们可以在不同的时刻执行特定的代码。在这篇文章中&#xff0c;我们将一步步解析 Unit…...

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进 文章目录 I - 主要原理II - 代码实现2.1 - 自定义类2.2 - 实现 Tab 缩进2.3 - 实现反缩进 III - 参考链接 I - 主要原理 由于 QTextEdit 和 QPlainTextEdit &#xff0c;都无法实现多行选中缩进与反缩进&#xff…...

C++缺陷与思考

数组隐式转换为指针 size_t func(int a[10]) {return sizeof(a); }int a[100]; func(a); // 指针大小 sizeof(a); // 数组大小函数的参数看似是一个数组形式&#xff0c;但事实上他已经退化为指针了&#xff0c;也就是等价于size_t func(int* a)&#xff0c;而数组作为参数传…...

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…...

软件工程基础

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/136446772 一. 软件工程 1、软件危机。具体表现为&#xff1a;软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。 …...

alzet供应商你值得拥有

在20世纪70年代&#xff0c;ALZE公司研发出来一款巧妙的药物输送装置——Alzet osmotic pump。这款产品如胶囊般精致小巧&#xff0c;它既有胶囊的外表&#xff0c;也具有胶囊的作用。在Alzet osmotic pump中藏有可以装配药物溶液的空间。此款胶囊泵如同一个小投递员&#xff0…...

x86中的TSS与任务切换

前言 今天在学习《深入理解Linux内核》的时候&#xff0c;发现出现了一个新的名词TSS&#xff08;Task-State Segment&#xff09;&#xff0c;这还是我第一次了解到原来x86提供了硬件级别的任务切换功能&#xff0c;之前以为任务切换都是操作系统实现的来着&#xff0c;这里也…...

打造去中心化透明储蓄罐:Solidity智能合约的又一实践

一、案例背景 传统的储蓄罐通常是由个人或家庭使用&#xff0c;用于存放硬币或小额纸币。然而&#xff0c;这样的储蓄罐缺乏透明性&#xff0c;用户无法实时了解储蓄情况&#xff0c;也无法确保资金的安全性。 通过Solidity智能合约&#xff0c;我们可以构建一个去中心化…...

Java Mybatis数据库面试题

Java Mybatis数据库面试题 前言1、什么是 Mybatis&#xff1f;2、Mybaits 的优缺点&#xff1a;3、SQL 注入如何防止&#xff1f;4、MyBatis 框架适用场合&#xff1a;5、MyBatis 与 Hibernate 有哪些不同&#xff1f;6、#{}和${}的区别是什么&#xff1f;7、当表中的字段名和实…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...