>  기사  >  백엔드 개발  >  수업 코드를 변경하지 않고 수업 기능을 확장하시겠습니까?

수업 코드를 변경하지 않고 수업 기능을 확장하시겠습니까?

WBOY
WBOY원래의
2016-08-18 09:16:151143검색

첫 번째 사진

수업 코드를 변경하지 않고 수업 기능을 확장하시겠습니까?

현재 애플리케이션은 yaf 프레임워크를 사용하고 있으며 모든 컨트롤러는 继承에서 파생되었습니다. 그러나 이후 기능(권한 관리, 제품 관리, 로그 관리 등)이 증가함에 따라 .), Base_controller 더 이상 부풀어오를 수 없습니다, Base_controller

물론 다양한 기능에 따라 다양한 클래스 파일을 만든 다음 필요에 따라

에서 초기화할 수 있습니다. 하지만 각 기능은 Base_controller과 강력하게 결합되어 있으므로 더 나은 방법이 있는지 궁금합니다. 해결책. Base_controller

지금 생각하고 있는 것은

, (지금 이것밖에 모르니까 젠장), 装饰模式
를 특정 데코레이션 클래스(권한 관리, 로그 관리)로 꾸며서 그러나 데코레이션 모드에서는 데코레이터(Base_controller)와 특정 데코레이터가 모두 동일한 클래스에서 상속되어야 하므로 이제 Base_controller는 다른 클래스에서 상속되었으므로 Base_controller가 역할을 수행할 수 없습니다. 데코레이터, Base_controller

그렇다면 제가 열심히 작성했던 기능적 클래스(권한관리, 제품관리, 로그관리)를 꾸미려면 누구를 써야 할까요?

그럼 제가 잘못된 방향으로 가고 있는 건가요? 장식 모드가 여기에 전혀 적합하지 않은 걸까요, 아니면 다른 디자인이 필요한 걸까요?

답글 내용:

첫 번째 사진

수업 코드를 변경하지 않고 수업 기능을 확장하시겠습니까?

현재 애플리케이션은

프레임워크를 사용하고 있으며 모든 컨트롤러는 yaf에서 파생되었습니다. 그러나 이후 기능(권한 관리, 제품 관리, 로그 관리 등)이 증가함에 따라 .), 继承 더 이상 부풀어오를 수 없습니다, Base_controller Base_controller 물론 다양한 기능에 따라 다양한 클래스 파일을 만든 다음 필요에 따라

에서 초기화할 수 있습니다. 하지만 각 기능은

과 강력하게 결합되어 있으므로 더 나은 방법이 있는지 궁금합니다. 해결책. Base_controller Base_controller지금 생각하고 있는 것은

, (지금 이것밖에 모르니까 젠장),

装饰模式를 특정 데코레이션 클래스(권한 관리, 로그 관리)로 꾸며서 그러나 데코레이션 모드에서는 데코레이터(
)와 특정 데코레이터가 모두 동일한 클래스에서 상속되어야 하므로 이제 Base_controller는 다른 클래스에서 상속되었으므로 Base_controller가 역할을 수행할 수 없습니다. 데코레이터, Base_controller Base_controller그렇다면 제가 열심히 작성했던 기능적 클래스(권한관리, 제품관리, 로그관리)를 꾸미려면 누구를 써야 할까요?

그럼 제가 잘못된 방향으로 가고 있는 건가요? 장식 모드가 여기에 전혀 적합하지 않은 걸까요, 아니면 다른 디자인이 필요한 걸까요?

PHP 특성 사용

초대해주셔서 감사합니다.

위에서 언급한 특성은 실제로 해결책이지만 문제의 핵심은 여기에 없을 수도 있습니다.

장식 모드에 대한 이해가 정확하지 않더라도 큰 문제는 아니며 핵심도 아닙니다


실제 개발에서 BaseController가 부풀어오르는 문제는 겪어본 적이 없습니다. 이는 대개 개발자의 레벨(또는 영역)의 결과이며, 클래스 코드를 변경하더라도 클래스 코드를 변경하지 않는 문제일 수 없습니다. 해결되었으나 재구성이 필요합니다.

일반적으로 BaseController는 컨트롤러에서 제공해서는 안 되는 많은 메서드를 선언하여 발생합니다. 이러한 메서드는 모델에서 선언되거나 도우미에 속해야 합니다. 모델은 공유되므로 모든 컨트롤러에서 해당 메서드를 사용할 수 있습니다. 그리고 Model에서 정의해야 할 메소드가 Controller에 배치되어 있고 Controller가 공개되지 않은 경우, 이때 가장 간단한 해결책은 Base에 배치하는 것입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.