기능을 캐스케이드하면 안 되는 이유

하지마! 진심이야, 돌아와서 엉덩이를 물릴거야. 😆

그래서 여기 내가 한 일이 있습니다.



저는 PDF 파일에서 얼굴이 있는 이미지를 추출해야 하는 마이크로서비스를 작업하고 있었습니다. 나는 Symfony를 사용했고 그들의 역할을 담당하는 몇 가지 서비스를 만들었습니다. 예: ImageExtractionService 또는 FaceDetectionService .
일부 오픈 소스 서비스를 사용하여 사진에서 얼굴을 감지하고 PDF 파일에서 이미지를 추출하는 데 사용할 프로그램을 선택하면서 코드 재사용 가능성과 전반적인 코드 품질에 대해 미리 생각하는 것을 잊고 완성된 프로젝트가 꽤 자랑스러웠습니다.

문제



서비스 간에 기능을 계단식으로 배열했습니다. 다음과 같이 생겼습니다.

//ImageExtractionService
$this->faceDetactionService->detect()

//FaceDetectionService
function detect() {
    //some code
    $this->imageService->process()
}

//ImageService
function process() {
    //some code
    $this->cleanupService->cleanUp()
}


이와 같이 연결하면 원하지 않는 연결을 만들게 됩니다. 예를 들어 FaceDetectionService가 "본"항목에만 관심이 있는 경우 해당 데이터를 반환하지 않고 즉시 이미지를 처리하려고 시도하기 때문에 해당 데이터를 얻을 수 없습니다.

어떻게 내 엉덩이를 물게 되었습니까?



글쎄요, 기능이 프로덕션에 들어간 지 며칠 후에 서비스 디버그 옵션이 필요하다는 것을 알았습니다. 하지만 내 코드는 연결되어 있고 PDF를 다운로드하기 위한 링크가 필요하고 이미지를 업로드할 링크가 필요하기 때문에 서비스를 진정으로 분리하지 않는 한 로컬 디버그를 만들 수 없었습니다.

그래서... 하지마! 별도 서비스의 기능을 연결하지 마십시오.



향후 게시물 작성을 지원하고 싶다면 커피 한 잔 사주세요.

좋은 웹페이지 즐겨찾기