CRUD 작업을 수행하거나 특정 방식으로 관계를 수정할 때마다 다른 작업을 원한다고 가정 해 봅시다. 예를 들어 누군가가 게시물을 게시 할 때마다 분석을 위해 테이블에 무언가를 저장하려고합니다. 아마도 가장 좋은 예는 아니지만 일반적으로이 "그룹화 된"기능이 많이 있습니다.
일반적으로 이러한 유형의 논리가 컨트롤러에 적용됩니다. 이 기능을 많은 곳에서 재현하고 싶을 때까지는 괜찮습니다. 부분적으로 들어가고 API를 만들고 더미 컨텐츠를 생성하기 시작하면 DRY를 유지하는 데 문제가됩니다.
이를 관리하는 방법은 이벤트, 리포지토리, 라이브러리 및 모델에 추가하는 것입니다. 각각에 대한 나의 이해는 다음과 같습니다.
서비스 : 대부분의 사람들이이 코드를 넣을 수있는 곳입니다. 서비스의 주요 문제는 때로는 특정 기능을 찾기가 어려우며 사람들이 Eloquent를 사용하는 데 집중할 때 잊어 버린 것 같습니다. publishPost()내가 할 수있을 때 라이브러리에서 메소드를 호출해야한다는 것을 어떻게 알 수 $post->is_published = 1있습니까?
내가 잘 작동하는 유일한 조건은 서비스 만 사용하는 것입니다 (그리고 컨트롤러에서 모두 Eloquent에 액세스 할 수 없도록하는 것이 이상적입니다).
궁극적으로 요청이 일반적으로 모델 구조를 따르는 경우 불필요한 추가 파일을 많이 생성하는 것처럼 보입니다.
리포지토리 : 내가 이해 한 바에 따르면 이것은 기본적으로 서비스와 비슷하지만 인터페이스가 있으므로 ORM간에 전환 할 수 있습니다.
이벤트 : 모델 이벤트가 항상 Eloquent 메소드에서 호출되므로 일반적인 컨트롤러처럼 컨트롤러를 작성할 수 있기 때문에 이것이 가장 우아한 시스템이라고 생각합니다. 나는 이것들이 지저분 해지는 것을 볼 수 있으며 누군가 중요한 커플 링을위한 이벤트를 사용하는 대규모 프로젝트의 예를 가지고 있다면 그것을보고 싶습니다.
모델 : 전통적으로 CRUD를 수행하고 임계 커플 링을 처리하는 클래스가있었습니다. CRUD +와 관련된 모든 기능을 알고 있기 때문에 실제로는 쉽게 할 수 있습니다.
간단하지만 MVC 아키텍처에서는 일반적으로 내가 본 것이 아닙니다. 어떤 점에서는 찾기가 더 쉽고 추적 할 파일이 적기 때문에 서비스보다 이것을 선호합니다. 그래도 약간 혼란 스러울 수 있습니다. 이 방법에 대한 몰락과 대부분의 사람들이 왜 그렇게하지 않는지 듣고 싶습니다.
각 방법의 장단점은 무엇입니까? 뭔가 빠졌습니까?