저는 Laravel 9를 사용하고 있으며 다음을 포함하는 요청이 있습니다:
배열
따라서 SEASON
매개변수는 array
또는 null
array
또는 null
두 개의 클래스가 있습니다. 하나는 SEASON
기능용이고 다른 하나는 Repository
두 가지 모두 배열
execute
추상 클래스 저장소 { 추상 공용 함수 실행(): 배열; } 클래스 만료는 저장소를 확장합니다. { 공개 함수 실행() { return ['요청에 만료 매개변수가 포함되어 있으며 계절별 동작이 완료되었습니다.']; } } 클래스 시즌이 저장소를 확장합니다. { 공개 함수 실행() { return ['요청에 시즌 매개변수가 포함되어 있으며 만료 동작이 완료되었습니다.']; } }
내 요청에 SEASON이 포함되어 있으면 Season 클래스의 실행 메서드를 호출하고 싶고, 요청에 Expiry가 포함되어 있으면 만료의 실행 메서드를 호출하고 싶습니다. 또는 이를 호출하고 실행 반환을 배열로 병합하여 결과를 얻을 수 있습니다.
['요청에 만료 매개변수가 포함되어 있고 계절별 동작이 완료되었습니다.', '요청에 만료 매개변수가 포함되어 있으며 만료 동작이 완료되었습니다.'];
컨트롤러에서 시도해 본 결과는 다음과 같습니다.
공개 함수 부트스트랩($data) { $parseTopics = 도우미::parseTopicsRequest(); $basicProgram = 새로운 BasicProgramRepository(); $seasonalProgram = new SeasonalProgramRepository($parseTopics['SEASONAL']); $object = count($parseTopics['SEASONAL']) ? $seasonalProgram : $basicProgram; // 다형성 $object->execute()를 반환합니다. }
질문 1: 내 요구 사항을 해결하기 위해 이것을 사용해야 할지 아니면 비슷한 것을 사용해야 할지 잘 모르겠습니다.
$employe = new Program(new BasicProgramRepository());
예상 결과: 예상되는 결과는 시즌 매개변수와 만료 시간이 있는지 여부에 따라 달라집니다. 내가 달성하고 싶은 것은 다른 동작(실행 방법)을 사용하는 것입니다
다형성 접근 방식을 구현하려면 해당 논리를 관리하기 위한 저장소나 무언가를 만드는 것이 좋습니다.
예시입니다.
으아악이렇게 부르시면 됩니다.
으아악이 방법은 매개변수가 지정한 값에만 작동합니다. Season 클래스와 Expiry 클래스의 반환 결과가 거의 같다면 특성별로 관리하는 것이 가장 좋습니다. (예: 예제 코드의 $pattern)
한번 시도해 보세요.
댓글 잘 읽었으니 팔로우 하세요..
예를 들어, getResult()의 결과만 얻는 것을 선호합니다. 따라서 특정 패턴과 너무 많은 로직을 getResult()에 작성해서는 안 됩니다.
특성을 사용하는 경우 다음 예를 참조하세요. 먼저 관리 동작 클래스를 만들어야 합니다.
behavior.php
으아악그런 다음 동일한 수준에 Behavior 디렉터리를 만들어야 합니다. 이 디렉터리를 이동하면 이러한 서명 파일이 생성됩니다.
으아악findAccessibleClass() 메소드는 올바른 클래스를 찾는 역할을 합니다.
그러면 이 메소드를 이렇게 호출할 수 있습니다.
으아악getResult()에 코드가 너무 많으면 해당 코드를 분리하는 것이 가장 좋습니다.
행동 특성을 생성하기 위해 getResult는 행동 논리를 담당할 필요가 없습니다. 즉, 테스트하거나 수정하기가 쉽습니다.
모든 일이 잘 되길 바랍니다.