数据库封装类设计
再看别人一个程序的时候,发现他封装的mysql操作类所有的方法都是static的,,而封装的redis类的方法却又都不是static的,请问下这样设计有什么特殊的意义或者有什么特殊的考虑吗?
回复内容:
再看别人一个程序的时候,发现他封装的mysql操作类所有的方法都是static的,,而封装的redis类的方法却又都不是static的,请问下这样设计有什么特殊的意义或者有什么特殊的考虑吗?
没办法评价,他的选择针对他的代码使用的场景也许是适合的,比如有限的数据库对象,且80%以上的请求都需要操作数据库,这样他可以在进程初始化的时候就启动数据库连接,而较少使用redis,而且又有多个redis对象,这样的话如果总是把所有的redis在初始化的时候构造明显就造成了浪费。所以他做了这种选择。
建议学会思考,也要学会学习。
1- 作者写代码时的思路别人只能猜测,不会全中;
2- 不要认为你写不出来,别人写出来,那人家写的就是绝对正确的、优秀的;
3- 先自己答题,再参考别人的答案,千万不要被别人的思想先入为主;
4- 越大的项目出现烂代码的几率就越高,要去其糟粕,因为不可能一个人完成所有开发,而且就算一个人开发也有巅峰和低谷,设计的思路很好,具体编程时由于各种原因无法达到预期是太平常的事情。
回到问题本身,从我个人的经验(以及很多框架)来看,static方法通常都属于工具方法,如DB::factory, App::getModel, Date::format,而对于数据库操作和redis操作,它们明显不属于工具方法,所以不建议静态化。
而对于mysql类所有方法都是static的,从大方向来说其实是败笔。开发者不太可能在DB::insert方法内部进行数据库连接状态检测,所以必然早就连接了数据库,一方面如果当前进程完全不需要数据库介入,这次连接就浪费了,另一方面,这明显延长了数据库连接时间,即如果是迟绑定,本次数据库连接可能只要持续0.05s,而由于预绑定,实际上本次数据库连接持续了0.1s,且其中的0.05s是空闲的,在等待php进程处理其他逻辑,这两方面都增加了数据库压力。
--补充--
如果真的在DB::insert中包含了数据库连接状态检测,一方面增加了额外的逻辑,另一方面不适合多数据库的项目(如果想兼容多数据库,那么在调用insert的时候还要允许传入数据库连接参数,好麻烦)
个人看法,仅供参考。
首先,static的执行效率高,因为脚本运行时就加载到了内存中,而new的话还需要实例化的过程,接着mysql因为sql语句相比较redis的操作方法要复杂,对于mysql封装的方法可能比较复杂,而redis的操作语句比较简单,作者可能懒得进行复杂的封装。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

Docker 환경을 사용할 때 Docker 환경에 Extensions를 설치하기 위해 PECL을 사용하여 오류의 원인 및 솔루션. 종종 일부 두통이 발생합니다 ...

PHP가 MySQL에 연결 한 후 페이지가 비어 있고 Die () 함수가 실패한 이유가 있습니다. PHP와 MySQL 데이터베이스 간의 연결을 배울 때는 종종 혼란스러운 것들이 발생합니다 ...

Apple M1 Chip Mac에서 Redis를 컴파일하고 설치할 때 문제와 솔루션이 발생하면 많은 사용자가 ...

배열은 프로그래밍에서 데이터를 처리하는 데 사용되는 선형 데이터 구조입니다. 때로는 배열을 처리 할 때 기존 배열에 새 요소를 추가해야합니다. 이 기사에서는 각 방법에 대한 코드 예제, 출력 및 시간 및 공간 복잡성 분석을 통해 PHP의 배열 끝에 요소를 추가하는 몇 가지 방법에 대해 논의합니다. 배열에 요소를 추가하는 다양한 방법은 다음과 같습니다. 사각형 브래킷 사용 [] PHP에서 배열 끝에 요소를 추가하는 방법은 사각형 브래킷을 사용하는 것입니다 []. 이 구문은 단일 요소 만 추가하려는 경우에만 작동합니다. 다음은 구문입니다. $ array [] = value; 예

전경에서 SMS 메시지를 배경 비동기 배치를 트리거하는 기능을 구현하는 방법은 무엇입니까? 일부 애플리케이션 시나리오에서는 사용자가 전경 작업을 통해 백그라운드에서 배치를 짧게 트리거해야합니다 ...
