PHP에서 누가 싱글 톤을 필요로합니까?
싱글 톤에 대한 거의 모든 반대 의견은 기술적 인 관점에서 비롯된 것입니다. 그러나 그 범위도 매우 제한적입니다. 특히 PHP의 경우. 먼저 싱글 톤을 사용하는 몇 가지 이유를 나열한 다음 싱글 톤 사용에 대한 이의를 분석합니다. 먼저, 필요한 사람들 :
-많은 다른 환경에서 사용될 큰 프레임 워크 / 코드베이스를 코딩하는 사람들은 기존의 다른 프레임 워크 / 코드베이스와 함께 작업해야하며, 클라이언트 / 보스의 많은 변화, 심지어 기발한 요청을 구현해야합니다. / 관리 / 단위 지도자들이합니다.
싱글 톤 패턴은 자체 포함 적입니다. 완료되면 싱글 톤 클래스는 포함 된 모든 코드에서 엄격하며 메소드와 변수를 작성하는 방식과 동일하게 작동합니다. 그리고 주어진 요청에서 항상 같은 객체입니다. 두 개의 서로 다른 객체로 두 번 만들 수 없으므로 싱글 톤이 두 개, 세 개의 서로 다른 오래된 스파게티 코드베이스에 삽입 된 경우에도 코드에서 특정 지점에있는 단일 객체가 무엇인지 알 수 있습니다. 따라서 개발 목적으로 더 쉽게 만들 수 있습니다. 프로젝트에 많은 사람들이 있어도 주어진 코드베이스에서 단일 지점이 한 지점에서 초기화되는 것을 볼 때 그것이 무엇인지, 어떻게하는지, 어떻게하는지 알 수 있습니다. 기존 클래스 인 경우 해당 객체가 처음 작성된 위치를 추적해야합니다. 코드에서 특정 시점까지 호출 된 메소드 및 특정 상태 그러나 싱글 톤을 버리고 코딩하는 동안 적절한 디버깅 및 정보 메소드와 추적을 싱글 톤에 버렸다면 정확히 무엇인지 알 수 있습니다. 따라서 다른 철학으로 수행했거나 접촉하지 않은 사람들이 수행 한 코드를 통합해야 할 필요가 있으므로 다른 코드베이스로 작업해야하는 사람들이 더 쉬워집니다. (즉, 더 이상 존재하지 않는 공급 업체 프로젝트 회사)는 아무것도 지원하지 않습니다. 다른 철학으로 수행했거나 접촉하지 않은 사람들이 수행 한 코드를 통합해야 할 필요가 있으므로 다른 코드베이스로 작업해야하는 사람들이 더 쉬워집니다. (즉, 더 이상 존재하지 않는 공급 업체 프로젝트 회사)는 아무것도 지원하지 않습니다. 다른 철학으로 수행했거나 접촉하지 않은 사람들이 수행 한 코드를 통합해야 할 필요가 있으므로 다른 코드베이스로 작업해야하는 사람들이 더 쉬워집니다. (즉, 더 이상 존재하지 않는 공급 업체 프로젝트 회사)는 아무것도 지원하지 않습니다.
-타사 API , 서비스 및 웹 사이트를 다루어야 하는 사람들
자세히 살펴보면, 이전의 경우와 크게 다르지 않습니다. 타사 API, 서비스, 웹 사이트는 제어 할 수없는 외부의 격리 된 코드베이스와 같습니다. 무슨 일이든 일어날 수 있습니다. 따라서 싱글 톤 세션 / 사용자 클래스를 사용하면 OpenID , Facebook , Twitter 등과 같은 타사 제공 업체의 모든 종류의 세션 / 권한 구현을 관리 할 수 있으며 SAME 싱글 톤 객체에서 동시에 모든 작업을 수행 할 수 있습니다. -어떤 코드에 연결해도 특정 지점에서 알려진 상태로 쉽게 액세스 할 수 있습니다. 자신의 웹 사이트 / 애플리케이션에서 SAME 사용자를위한 여러 개의 다른 타사 API / 서비스에 대한 여러 세션을 생성하고 원하는 작업을 수행 할 수도 있습니다.
물론,이 모든 것들은 일반적인 클래스와 객체를 사용함으로써 전통적인 방법으로 어조가 될 수 있습니다. 여기서 중요한 것은 싱글 톤이 더 깔끔하고 깔끔하기 때문에 그러한 상황에서 전통적인 클래스 / 오브젝트 사용에 비해 관리 가능하고 테스트하기가 더 쉽기 때문입니다.
-빠른 개발이 필요한 사람들
싱글 톤의 전역 적 동작은 싱글 톤 클래스를 구성하는 프레임 워크를 사용하여 모든 종류의 코드를보다 쉽게 빌드 할 수있게 해줍니다. 싱글 톤 클래스를 잘 구성하면 확립 된 성숙하고 설정된 메소드를 쉽게 사용할 수 있고 언제 어디서나 일관된 방식으로 사용할 수 있습니다. 수업을 완성하는 데 약간의 시간이 걸리지 만 그 후에는 견고하고 일관되며 유용합니다. 원하는 방식으로 단일 방법으로 많은 방법을 사용할 수 있으며, 이렇게하면 객체의 메모리 공간이 늘어날 수 있지만 빠른 개발에 필요한 시간이 훨씬 더 많이 절약됩니다. 응용 프로그램을 다른 통합 응용 프로그램에서 사용할 수 있으며 클라이언트 / 보스 / 프로젝트 관리자가 몇 가지 수정만으로 요청하는 새로운 기능을 사용할 수 있습니다.
당신은 아이디어를 얻습니다. 이제 싱글 톤에 대한 반대 의견과 유용한 것에 반대하는 부정한 성전으로 넘어가겠습니다 .
-가장 반대 의견은 테스트를 더 어렵게한다는 것입니다.
그리고 실제로 싱글 톤을 디버깅 할 것이라는 사실을 알고 적절한 예방 조치를 취하고 디버깅 루틴을 싱글 톤으로 코딩하여 쉽게 완화 할 수 있더라도 어느 정도까지는 가능합니다. 그러나 이것은 다른 코딩 철학 / 방법 / 패턴과 너무 다르지 않습니다. 단지, 싱글 톤은 비교적 새롭고 널리 보급되어 있지 않으므로 현재 테스트 방법은 비교할 수 없습니다. 그러나 이것은 프로그래밍 언어의 측면에서 다르지 않습니다. 스타일마다 스타일이 다릅니다.
이러한 반대 의견은 응용 프로그램이 개발 된 이유가 '테스트'가 아니며 테스트가 응용 프로그램 개발에 들어가는 유일한 단계 / 프로세스가 아니라는 사실을 무시한다는 점에서 동일합니다. 응용 프로그램은 프로덕션 용도로 개발되었습니다. '싱글 톤이 필요한 사람'섹션에서 설명했듯이 싱글 톤은 코드를 작동시키고 다른 많은 코드베이스 / 응용 프로그램 / 타사 서비스 내부에서 코드를 작성해야하는 복잡성에서 큰 거래를 줄일 수 있습니다. 테스트에서 손실 될 수있는 시간은 개발 및 배포에서 얻는 시간입니다. 이는 특히 타사 인증 / 응용 프로그램 / 통합 시대 (Facebook, Twitter, OpenID 등)에 더 유용하며 다음에 무엇이 있는지 잘 아는 사람에게 유용합니다.
이해할 만하지 만 프로그래머는 경력에 따라 매우 다른 상황에서 일합니다. 그리고 정의 된 부서가 다른 방식으로 정의 된 소프트웨어 / 애플리케이션을 편안한 방식으로, 예산 삭감 / 해고가 임박하지 않고 상대적으로 큰 회사에서 일하는 사람들을 위해 싸고 / 빠르고 / 신뢰할 수있는 방식의 싱글 톤은 그렇게 필요하지 않을 수도 있습니다. 그리고 그들은 이미 가지고있는 것에 방해가 될 수도 있습니다.
그러나 고객 / 관리자 / 프로젝트로부터 많은 다른 요청 (때로는 불합리한)을 구현해야하는 '민첩한'개발의 불참 한 트렌치에서 일해야하는 사람들을 위해 싱글 톤은 앞에서 설명한 이유 때문에 절약의 은혜입니다.
-또 다른 반대는 메모리 풋 프린트가 더 높다는 것입니다
각 클라이언트의 각 요청에 대해 새로운 싱글 톤이 존재하기 때문에 이는 PHP에 대한 이의 제기 일 수 있습니다. 잘못 구성되고 사용 된 싱글 톤을 사용하면 특정 시점에서 많은 사용자가 응용 프로그램에서 서비스를 제공하는 경우 응용 프로그램의 메모리 사용량이 높아질 수 있습니다.
그러나 이것은 코딩하는 동안 취할 수있는 모든 종류의 접근 방식에 유효합니다. 질문해야 할 질문은 이러한 싱글 톤에 의해 유지되고 처리되는 방법, 데이터입니까? 예를 들어, 많은 요청 응용 프로그램에서 필요로하는 경우 싱글 톤을 사용하지 않더라도 해당 메소드와 데이터는 코드를 통해 응용 프로그램에 어떤 형태로나 다른 형태로 나타납니다. 따라서 전통적인 클래스 객체를 코드 처리로 1/3로 초기화하고 3/4로 파괴하면 메모리가 얼마나 절약 될지 문제가됩니다.
이 방법을 사용하면 단일 톤의 사용 여부에 관계없이 질문이 무의미합니다. 불필요한 메소드가 없어야합니다. 따라서 싱글 톤에 대한 이의 제기는 실제로 사용하는 클래스에서 생성 된 객체의 불필요한 메소드, 데이터가 있다고 가정한다는 점에서 유쾌합니다.
- '여러 데이터베이스 연결을 유지 / 불가능하게 만드는 것'과 같은 일부 이의 제기
모든 사람들이 다중 데이터베이스 연결, 다중 데이터베이스 선택, 다중 데이터베이스 쿼리, 주어진 단일 톤의 다중 결과 세트를 단일 톤의 변수 / 배열에 유지하는 한 유지해야 할 때이 반대 의견을 이해할 수조차 없습니다. 그들은 필요하다. 배열에 유지하는 것만 큼 간단 할 수 있지만,이를 적용하기 위해 사용하려는 모든 방법을 발명 할 수 있습니다. 그러나 주어진 싱글 톤에서 변수와 배열을 사용하는 가장 간단한 경우를 살펴 보자.
아래가 주어진 데이터베이스 싱글 톤 안에 있다고 상상해보십시오.
$ this- > connections = 배열 (); (잘못된 구문, 방금 그림과 같이 입력했습니다. 변수의 올바른 선언은 public $ connections = array (); 사용법은 $ this-> connections [ 'connectionkey'] 자연 스럽습니다)
이 방식으로 특정 시간에 여러 연결을 배열로 설정하고 유지할 수 있습니다. 쿼리, 결과 집합 등도 마찬가지입니다.
$ this-> query (QUERYSTRING, 'queryname', $ this-> connections [ 'particulrconnection']) ;;
선택한 연결로 선택한 데이터베이스에 쿼리를 수행하고
$ this- > 결과
'queryname'키가있는 배열. 물론,이를 위해 쿼리 메소드를 코딩해야합니다.
이를 통해 필요한만큼 다른 데이터베이스 연결 및 결과 집합을 거의 무한대로 (자원 제한이 허용하는 한) 유지할 수 있습니다. 또한이 싱글 톤 클래스가 인스턴스화 된 특정 코드베이스의 특정 지점에서 모든 코드 조각에 사용할 수 있습니다.
코스 중, 결과 세트와 필요하지 않은 연결을 자연스럽게 해제해야하지만 말할 필요도 없으며 싱글 톤이나 다른 코딩 방법 / 스타일 / 개념에만 국한되지 않습니다.
이 시점에서 타사 응용 프로그램이나 서비스에 대한 여러 개의 연결 / 상태를 동일한 싱글 톤으로 유지 관리하는 방법을 확인할 수 있습니다. 그렇게 다르지 않습니다.
간단히 말해서, 싱글 톤 패턴은 프로그래밍하는 또 다른 방법 / 스타일 / 철학이며, 올바른 장소에서 올바른 방식으로 사용될 때 다른 방법만큼 유용합니다. 어느 것과도 다르지 않습니다.
싱글 톤을 버리는 대부분의 기사에서 '글로벌'에 대한 언급이 '악'임을 알 수 있습니다.
제대로 사용하지 않고 남용하거나 잘못 사용하는 것은 악한 일입니다. 그것은 어떤 언어, 어떤 코딩 개념, 방법으로 제한되지 않습니다. 'X is evil'와 같은 담요 진술을하는 누군가를 볼 때마다 그 기사에서 도망 치십시오. 특정 관점에서 수년간의 경험을 쌓은 결과 일지라도 제한된 관점의 산물 일 가능성은 매우 높습니다. 일반적으로 주어진 스타일 / 방법에서 너무 많은 일을 한 결과-전형적인 지적 보수 론입니다.
'글로벌은 악하다'에서 'iframe은 악하다'에 이르기까지 끝없는 예를들 수 있습니다. 약 10 년 전, 주어진 응용 프로그램에서 iframe 사용을 제안하는 것조차도 이단이었습니다. 그런 다음 Facebook, 모든 곳에서 iframe이 나오고 무슨 일이 있었는지 살펴보십시오. iframe은 더 이상 나쁘지 않습니다.
여전히 '악'이라고 주장하는 사람들이 있습니다. 때로는 좋은 이유가 있습니다. 보시다시피, 필요하고 잘 작동하는 iframe이 필요하기 때문에 전 세계가 계속 움직입니다.
프로그래머 / 코더 / 소프트웨어 엔지니어의 가장 중요한 자산은 자유롭고 개방적이며 유연한 마음입니다.