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

从代码操作层面解释什么是“面相对象编程”?

起因:

        今天开了一个小会,会上朋友给我们说了一个事,Java项目上他开发一个小功能 用了很多代码,项目经理发现代码太多,说要优化一下,然后亲自帮同事优化,结果是查库的代码少了至少10条sql,同时代码复杂度降低了很多,代码去掉了有一半,我去翻了这些代码后对这个事情做了一个总结。

问题:

        项目经理在方法间传递用的是对象,同事用的是字符串。项目经理玩的是从1到N,同时玩的是从0到N,所以同事要反复查询数据库去构建那个1 代码就变多了,本质原因是对前端不信任、不放心造成的。

解决方式:

        如果对前端信任或则让前端知道不配合那么功能就不能正常运行,这样就应该要求前端转发更多的带ID的对象来实现接口数据传输,帮后端同事把拿到数据后再查数据库的那一步省掉了,所以省了很多查询库的操作和代码逻辑。(前端只负责转发,这样锅就由后端来背了,前端也轻松)。【当然这也为逆向工程留下了漏洞】

        同时后端的方法尽量用传对象的方式去解决问题,让车跑在轮子上,前后端的数据形成一个闭环,编程的数据流就产生了,非常丝滑!

        关键是开发时间还变少了很多,且开发代码也变少了,以后定位bug也会非常容易。维护起来也简单了。以后扩展起来也容易,因为有足够的冗余对象数据来便于功能的扩展。

        这就是Java跟Php的区别(Php其实也可以这样玩),传说中的java面向对象编程。程序员思考问题的起点是基于表的对象维度而不仅仅是产品的要求,这是编程效率的提升点。

        这就把代码的设计思路维建立在项目设计的维度上了,让起初的项目总体设计来承载目前需求的代码设计的风险,这样也就可以拿着数据库表的设计维度和代码风险去跟产品掰扯了。

总结:也就是以面对象的方式去编程(这个对象包括基础表对象,业务数据传递的vo、dto等),要以他们为轮子去走流程,这些对象背后所代表的维度就是代码编程的轨道,一旦脱离了轨道,代码就会显得非常的混乱和不好管理,内行人说“你的代码是逗的,不是这么写的”,说的就是这个道理。一旦开始逗代码了,项目就开始烂了。

相关文章:

从代码操作层面解释什么是“面相对象编程”?

起因: 今天开了一个小会,会上朋友给我们说了一个事,Java项目上他开发一个小功能 用了很多代码,项目经理发现代码太多,说要优化一下,然后亲自帮同事优化,结果是查库的代码少了至少10条sql&#x…...

【MySQL】SQL优化、char、varchar、外键约束、排查慢sql等重点知识汇总

目录 SQL语句 char和varchar比较 SQL语句如何优化 说一下你理解的外键约束 如何排查慢 sql SQL语句 对库操作 创建数据库 create database 数据库名 删除数据库 drop database 数据库名 显示所有数据库 show databases 选中数据库 use 数据库名 对表操作 创建表…...

git管理常用命令

1、下载代码 git clone 地址2、软件代码提交 1、查看工程中被修改的文件&#xff1a;git status 2.将不需要提交的文件回退&#xff1a;git check <文件路径> 3.更新工程到最新&#xff1a;git pull 4.将本地代码添加到暂存区&#xff1a;git add <将要提交的文件路…...

Python 逢七拍手小游戏2.0

"""逢七拍手游戏介绍&#xff1a;逢七拍手游戏的规则是&#xff1a;从1开始顺序数数&#xff0c;数到有7&#xff0c;或者是7的倍数时&#xff0c;就拍一手。例如&#xff1a;7、14、17......70......知识点&#xff1a;1、循环语句for2、嵌套条件语句if/elif/e…...

基于微信小程序的在线小说阅读系统,附数据库、教程

1 功能简介 Java基于微信小程序的在线小说阅读系统 微信小程序的在线小说阅读系统&#xff0c;系统的整体功能需求分为两部分&#xff0c;第一部分主要是后台的功能&#xff0c;后台功能主要有小说信息管理、注册用户管理、系统系统等功能。微信小程序主要分为首页、分类和我的…...

216. 组合总和 III

找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释: …...

【Java】数组的深浅拷贝问题(二维数组举例)(136)

深拷贝和浅拷贝&#xff1a; 对于数组来说&#xff0c;深拷贝就是相当于拷贝了数组的对象&#xff08;基本数据类型&#xff09;&#xff0c;也就是数组当中的内容。而浅拷贝就是拷贝的是数组的地址&#xff08;引用类型&#xff09;&#xff0c;浅拷贝只是复制了对象的引用地…...

【轮趣-科大讯飞】M260C 环形六麦测试 2 - ROS1功能测试与唤醒、语音识别程序解析

所有内容请看&#xff1a; 博客学习目录_Howe_xixi的博客-CSDN博客https://blog.csdn.net/weixin_44362628/article/details/126020573?spm1001.2014.3001.5502原文在飞书&#xff0c;请联系我获取阅读链接&#xff0c;我太懒了...

油猴(篡改猴)学习记录

第一个Hello World 注意点:默认只匹配了http网站,如果需要https网站,需要自己添加match https://*/*代码如下 这样子访问任意网站就可以输出Hello World // UserScript // name 第一个脚本 // namespace http://tampermonkey.net/ // version 0.1 // descri…...

LeetCode 面试题 05.08. 绘制直线

文章目录 一、题目二、Java 题解 一、题目 已知一个由像素点组成的单色屏幕&#xff0c;每行均有 w 个像素点&#xff0c;所有像素点初始为 0&#xff0c;左上角位置为 (0,0)。 现将每行的像素点按照「每 32 个像素点」为一组存放在一个 int 中&#xff0c;再依次存入长度为 le…...

机器人中的数值优化|【六】线性共轭梯度法,牛顿共轭梯度法

机器人中的数值优化|【六】线性共轭梯度法&#xff0c;牛顿共轭梯度法 往期回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化…...

FastestDet---原理介绍

1.测试指标 2.算法定位 FastestDet是设计用来接替yolo-fastest系列算法,相比于业界已有的轻量级目标检测算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, FastestDet和这些算法根本不是一个量级,FastestDet无论在速度还是参数量上,都是要小好几个数量级的,但是精度自然…...

ORACLE 在内存管理机制上的演变和进化

截止目前&#xff0c;计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中&#xff0c;已成为当前各种软件和应用程序提高数据访问性能&#xff0c;减少访问延迟的最为有效的途径。 然而&#xff0c;内存作为关键的计算资源&am…...

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…...

ps智能填充功能平替:alpaca的安装和使用

为了解决ps beta 智能填充无法使用的问题&#xff0c;需要用alpaca来平替&#xff0c;下面是安装教程&#xff1a; 安装方法&#xff1a; 1、下载插件。 alpaca插件汉化-夸克网盘https://pan.quark.cn/s/1168b447a44e#/list/share 2、 根据使用的PS版本&#xff0c;选择对应文件…...

【前端打怪升级日志之ES6篇】玩转函数

学习资料 阮一峰老师《ECMAScript 6 入门》— 函数的扩展 总结应用 1. 函数参数默认值与对象解构赋值默认值的结合使用 // 场景&#xff1a;方法调用时传参希望只传第二个参数 // 方案1&#xff1a; function foo({x1,y2}){console.log(x,y); } foo({}) //1 2 foo({x:2}) /…...

网址静态码手机制作教程,附图文详解!

网址的静态码是如何生成的呢&#xff1f;静态码是二维码的一种常用类型&#xff0c;一般常见的静态码类型主要是文本或者网址&#xff0c;那么在电脑制作静态码的方法相信很多小伙伴都知道怎么做&#xff0c;那么手机上制作的方法&#xff0c;大家感兴趣吗&#xff1f;下面来给…...

服务器性能测试监控平台export+prometheus(普罗米修斯)+grafana搭建

1. export 数据采集工具 简介&#xff1a; export是prometheus是的数据采集组件的总称&#xff0c;它可以将采集到的数据转为prometheus支持的格式 node_export: 用来监控服务器硬件资源的采集器&#xff0c;端口号为9100mysql_export: 用来监控mysql数据库资源的采集器&…...

【24种设计模式】责任链模式

责任链模式是一种行为设计模式&#xff0c;它允许你将请求沿着处理链进行传递&#xff0c;直到有一个处理者能够处理该请求为止。这种模式将请求的发送者和接收者解耦&#xff0c;使多个对象都有机会处理该请求。 责任链模式的结构 责任链模式由以下几个角色组成&#xff1a;…...

C#异步委托的三种实现 BeginInvoke / EndInvoke / IsCompleted

本文将介绍C#异步委托的三种实现方式&#xff0c;并给出相关示例代码及解析。 注意事项 用委托开启线程的前提是&#xff1a;创建项目时必须选择“.NET Framework"&#xff0c;如果选择的是”.Net Core“&#xff0c;在调用BeginInvoke时&#xff0c;系统会报错”Operati…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...