마젠 토의 디자인 패턴은 몇 개입니까?


15

마 젠토 2의 디자인 패턴은 몇 개입니까?

답변:


37

마 젠토 1/2 디자인 패턴

1 부 : MVC

Magento는 DOM 기반 구성 계층을 활용하여 고유 한 MVC 패턴을 사용합니다. xml을 활용하여 일반 Model-View-Controller 아키텍처 위에서 애플리케이션의 구성 및 작업을 수행합니다.

2 부 : 전면 컨트롤러

Magento는 Front Controller 패턴을 사용하여 해당 응용 프로그램의 워크 플로를 구현합니다. 모든 요청에 ​​대해 단일 진입 점 (index.php)이 있습니다. 그것이 어떻게 작동하는지 봅시다.

3 부 : 공장

팩토리 메소드는 Magento에서 클래스를 인스턴스화하는 데 사용됩니다. 클래스 그룹 다음에 클래스 그룹을 나타내는 추상 이름을 전달하는 적절한 메소드를 호출하여 Magento에서 클래스를 인스턴스화합니다. 클래스 그룹과 해당 추상화는 모듈의 / etc / 폴더에있는 구성 XML 파일에 선언되어 있습니다.

제 4 부 : 싱글 톤

Magento의 팩토리 클래스 추상화 및 클래스 그룹과 마찬가지로 Singleton 패턴은 블록과 클래스에 대해 동일하게 인스턴스화됩니다.

5 부 : 레지스트리

레지스트리 패턴은 기본적으로 모든 자원이 사용할 수있는 공용 글로벌 범위에서 오브젝트 또는 데이터를 사용할 수있게하는 패턴입니다.

6 부 : 프로토 타입

Magento의 프로토 타입 패턴은 Abstract Factory 패턴의 확장으로 사용됩니다. 적절한 서브 클래스가 오브젝트에 지정된 적절한 유형을 통해 인스턴스화되도록합니다. 이것은 무엇을 의미 하는가? 기본적으로 부모 유형을 통해 정의 된 특정 클래스를 가져와야 할 때마다 프로토 타입 패턴을 통해 필요한 것을 처리 할 수있는 올바른 클래스를 얻을 수 있습니다.

7 부 : 객체 풀

개체 풀 패턴은 개체를 다시 인스턴스화하고 완료 한 후 파괴하지 않고 계속해서 다시 사용할 수 있도록 개체를 준비합니다. 메모리 소비와 계산주기를 절약 할 수있는 좋은 방법입니다.

8 부 : 반복자

반복자 패턴은 객체가 다른 클래스의 요소를 통과 할 수있는 디자인 패턴입니다. 이를 통해 반복자를 지정할 수 있으며 반복을 허용하는 기본 구조를 변경하지 않고 여러 다른 데이터 세트를 전달할 수 있습니다.

파트 9 : 게으른 로딩

지연로드는 오브젝트가 호출 될 때까지 오브젝트로드를 지연시키는 디자인 패턴입니다. Magento를 사용하면 객체가 아니라 데이터를 사용합니다.

파트 10 : 서비스 로케이터

서비스 로케이터는 사용자가 프로세스를 추상화 계층 내부에 캡슐화하여 서비스를받을 수 있도록하는 디자인 패턴입니다. 이를 통해 사용자는 런타임에 해당 서비스가 무엇인지 알 필요없이 적절한 또는 최상의 서비스를 검색 할 수 있습니다.

11 부 : 모듈

모듈 디자인 패턴은 프로그램 기능을 독립적이고 상호 교환 가능한 모듈로 그룹화하는 것을 강조하는 모듈 식 프로그래밍 형태입니다.

12 부 : 관찰자

관찰자 패턴은 응용 프로그램 실행 중 특정 지점에서 이벤트 리스너가 설정되는 곳입니다. 응용 프로그램의 다른 구성 요소는이 이벤트 리스너에 "훅"되어이 지점에서 코드를 실행할 수 있습니다.

13 부 : 활동적인 기록

객체는 데이터베이스 테이블의 행을 나타냅니다. 이러한 객체에는 테이블 구조를 나타내는 열을 반영하는 속성과 데이터베이스에서 이러한 속성을 수정할 수있는 방법이 있어야합니다.

마젠 토의 패턴 사용

Mage_Core_Model_Abstract 클래스 이후에 상속되는 클래스는 클래스가 연결된 테이블에서 레코드를로드, 수정, 작성 또는 삭제할 수있는 load (), save () 및 delete () 메소드에 액세스 할 수 있습니다. 또한 Mage_Core_Model_Abstract 클래스는 Varien_Object에서 상속되므로 지정된 객체의 속성을 사용하여 데이터베이스 테이블의 열을 자동으로 매핑하는 마법의 메서드 __set () 및 __get ()에 액세스 할 수 있습니다.

마 젠토 2 추가

서비스 계약 디자인 패턴

Magento는 확장 기반 또는 모듈 식 시스템으로 타사 개발자가 프레임 워크의 핵심 부분을 사용자 정의하고 덮어 쓸 수 있습니다. 이러한 사용자 지정으로 인해 여러 가지 문제가 발생할 수 있습니다. 예를 들어 개발자는 외부 확장으로 수행 된 사용자 지정을 추적해야합니다. 따라서이 마 젠토를 극복하기 위해 서비스 계약 패턴이 나온다. 서비스 계약은 최종 사용자와 비즈니스 계층 간의 계층 역할을하는 일련의 인터페이스입니다. 따라서 최종 사용자에게 커스터마이징을위한 비즈니스 로직을 직접 노출시키는 대신 서비스 계약이라는 계층이 있습니다.

서비스 계약은 Magento의 모듈성을 향상시킵니다. 판매자가 Magento를 쉽게 업그레이드 할 수 있도록 도와줍니다. 외부 및 Magento 모듈이 구현하는 잘 정의되고 내구성있는 API를 보장합니다. REST 또는 SOAP 인터페이스를 통해 비즈니스 로직을 쉽게 노출 할 수있는 방법을 제공하십시오.

개체 관리자

의존성 주입, 싱글 톤, 팩토리, 추상 팩토리, 컴포지트, 전략, CQRS, 데코레이터 등 다양한 패턴으로 구성됩니다. 이들 중 가장 많이 사용되는 패턴에 대해 논의 할 것입니다. 객체 관리자는 매우 큰 역할을 수행하므로 Magento는 직접 사용하는 것을 금지합니다. 객체 관리자는 팩토리, 싱글 톤 및 프록시 패턴을 구현합니다. 클래스 생성자에서 매개 변수를 자동으로 인스턴스화합니다. 앞으로 나아 가기 전에 주사 가능하고 주사 불가능한 물체에 대해 이해하십시오.

피할 수없는 목표

EventManager, CustomerAccountManagementService와 같은 고유 한 ID가 없습니다.

영향을받지 않는 물체

고객, 제품 등 이러한 엔티티는 일반적으로 ID와 상태를 갖습니다. ID가 있기 때문에 우리가 작업해야하는 엔티티의 정확한 인스턴스를 아는 것이 중요합니다.

의존성 주입

이는 magento 1에서 Mage의 대안입니다. 이는 종속 오브젝트를 내부적으로 작성하지 않고 외부 환경을 통해 주입하는 개념입니다. 따라서 필요할 때 리소스를 생성하는 대신 객체를 생성 할 때 리소스를 요구합니다. 이는 필요한 객체를 조롱함으로써 향후 수정 및 테스트가 매우 쉬워집니다.

공장 패턴 또는 공장 클래스 :

Magento 2 Factory 클래스에서 객체 관리자와 비즈니스 코드 사이에 계층을 만듭니다. 팩토리 클래스는 자동 생성되므로 명시 적으로 정의 할 필요가 없습니다. 주사 불가능한 객체에 대한 팩토리 클래스를 만들어야합니다.

프록시 패턴

프록시 클래스는 다른 클래스 대신 작동하는 데 사용되며 Magento 2에서는 때때로 리소스가 고갈 된 클래스 대신 사용됩니다. 프록시 클래스가 무엇인지 이해하려면 프록시 클래스가 발생하는 이유를 살펴 보겠습니다. Magento가 객체 생성을 위해 생성자 주입을 사용하고 객체를 인스턴스화 할 때 생성자의 모든 클래스도 인스턴스화되어 생성자를 통해 인스턴스화 체인이 생성되므로 프로세스 속도가 느려지고 응용 프로그램의 성능에 영향을 줄 수 있습니다 따라서 체인 인스턴스화를 중지하려면 Magento는 프록시 클래스를 사용합니다.

다음 코드를 볼 수 있습니다 :-

Magento\Catalog\Model\Product\Attribute\Source\Status\Proxy

Magento\Catalog\Model\Product\Link\Proxy

위 코드에서 catalogProductStatus 및 productLink에 프록시 클래스를 사용하고 있습니다. 우리가 달릴 때

 php bin/magento setup:di:compile 

Magento는 di.xml을 사용하여 고정 된 규칙을 사용하여 프록시 클래스를 즉석에서 생성하므로 원래 객체를 프록시 클래스 객체로 대체합니다. 이제 프록시 클래스를보고 작동 방식을 이해하겠습니다.

프록시 생성시 Magento가 따르는 일반적인 관례 :-

  • 프록시 클래스의 네임 스페이스는 원본과 동일합니다 (Magento \ Catalog \ Model \ Product \ Attribute \ Source \ Status).
  • 프록시 클래스는 하나의 객체, 즉 객체 관리자 만 확장합니다
  • __sleep, __wake와 같은 특정 함수에서만 호출되는 __sleep, __wake와 같은 마술 함수가 있으며 __clone과 같은 함수는 원래 클래스의 객체를 만들고 필요할 때만 객체를 제공하므로 ( 지연 한 로딩 디자인 패턴 사용 ) 응용 프로그램의 성능 https://devdocs.magento.com/guides/v2.0/extension-dev-guide/proxies.html

플러그인 (인터셉터)

개요

플러그인 또는 인터셉터는 함수 호출을 인터셉트하고 해당 함수 호출 전, 후 또는 주변에서 코드를 실행하여 공용 클래스 함수의 동작을 수정하는 클래스입니다. 이를 통해 모든 클래스 또는 인터페이스에 대한 원래 공용 메소드의 동작을 대체하거나 확장 할 수 있습니다.

퍼블릭 메서드의 동작을 가로 채고 변경하려는 확장은 플러그인이라고하는 플러그인 클래스를 만들 수 있습니다.

이 차단 방법은 동일한 클래스 또는 메서드의 동작을 변경하는 확장 간의 충돌을 줄입니다. 플러그인 클래스 구현은 클래스 함수의 동작을 변경하지만 클래스 자체는 변경하지 않습니다. 구성된 정렬 순서에 따라 순차적으로 호출 될 수 있으므로 이러한 인터셉터는 서로 충돌하지 않습니다.

한계

플러그인은 다음과 함께 사용할 수 없습니다.

ObjectManager

개요

Magento 애플리케이션과 같은 대규모 애플리케이션은 인스턴스화 중에 객체를 구성 할 때 상용구 코드를 피하기 위해 객체 관리자를 사용합니다.

Magento 프레임 워크에서 ObjectManagerInterface 구현은 오브젝트 관리자의 의무를 수행합니다.

책임

객체 관리자는 다음과 같은 책임이 있습니다.

공장과 프록시에서 객체 생성. 요청시 클래스의 동일한 공유 인스턴스를 반환하여 싱글 톤 패턴을 구현합니다. 생성자가 인터페이스를 요청할 때 선호하는 클래스를 인스턴스화하여 종속성 관리 클래스 생성자에서 매개 변수를 자동으로 인스턴스화합니다. https://devdocs.magento.com/guides/v2.0/extension-dev-guide/object-manager.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.