타사 호출을 외부 서비스로 래핑하는 것이 항상 좋은 생각인 이유
래핑하면 공급업체 종속 및 긴밀한 결합을 방지할 수 있습니다. 타사에서 사용 중인 API가 작동을 멈춘다고 상상해 보십시오. 이제 전체 프로젝트에서 서비스 호출을 변경해야 합니다. 래핑된 경우 코드를 한 번만 수정하면 됩니다.
또 다른 이유는 요구 사항에 따라 타사 서비스(또는 클라이언트)를 빌드하고 설정할 수 있다는 것입니다.
예를 들어 보겠습니다.
...
use Kourses\Website;
use Mpociot\VatCalculator\VatCalculator;
...
class VatHelper
{
protected $calculator;
public function __construct(Website $website)
{
$calculator = new VatCalculator();
$calculator->setBusinessCountryCode($website->user->country);
$this->calculator = $calculator;
}
...
}
내 프로젝트에서는
driesvints/vat-calculator
패키지를 사용하여 VAT(부가가치세) 요율을 계산하고 EU VAT 번호를 확인합니다. EU VAT 번호 확인은 외부 API를 호출하여 수행됩니다.VAT 세율 계산은 귀하의 비즈니스 위치를 고려해야 하므로 계산기를 설정할 때 비즈니스 국가 코드를 제공해야 합니다. 내가 작업하고 있는 제품은 SaaS이므로 요청마다 이 매개변수를 지정해야 하며 구성 파일(이 패키지가 지원함)을 통해서는 지정할 수 없습니다. 그래서 내 요구 사항에 따라
VatCalculator
를 "구축"하고 있습니다.이 서비스를 래핑하지 않으면 호출할 때마다 구성해야 합니다. 큰 문제는 아니지만 간단한 예입니다.
간단한 "래핑"을 수행하는 것 외에도 타사 서비스 동작을 약간 수정하는 몇 가지 메서드를 추가했습니다.
...
use KoursesMember;
use KoursesErrorsVatValidationException;
use Exception;
class VatHelper
{
...
public function isValidVatId(string $vatNumber): bool
{
try {
return $this->calculator->isValidVATNumber($vatNumber);
} catch (Exception $exception) {
throw new VatValidationException("VAT validation failed.", 500);
}
}
public function getTaxRate(string $countryCode, string $postalCode = null, string $vatNumber = null): float
{
$isCompany = $this->isValidVatId($vatNumber);
return $this->calculator->getTaxRateForLocation($countryCode, $postalCode, $isCompany);
}
public function getTaxRateForMember(Member $member): float
{
return $this->getTaxRate($member->country, $member->zip, $member->vat_id);
}
}
메서드
isValidVatId
에서 타사 서비스 예외를 포착하고 내 앱과 동기화된 메시지(및 코드)를 사용하여 다시 발생시킵니다. 이제 컨트롤러에서 타사 패키지 예외를 잡을 필요가 없습니다.이 타사 패키지를 변경하기로 결정하면 내 코드를 살펴보고 이 패키지의 모든 언급을 변경할 필요가 없습니다.
getTaxRate
방법에서는 흐름에 더 잘 맞도록 동작을 약간 변경했습니다. 사용자 위치에 대한 세율을 확인하기 전에 VAT 번호를 확인하고 있습니다(비즈니스 위치와 고객 위치에 따라 다름).메서드
getTaxRateForMember
는 필요한 매개변수를 "확산"할 필요 없이 내 $member
개체를 쉽게 전달하고 현재 VAT 요율을 얻을 수 있는 간단한 도우미입니다.이 기술을 사용하면 필요한 경우 외부 서비스 호출 앞에 캐싱을 쉽게 구현할 수 있습니다. 여기서 VAT 번호는 체크할 때마다 달라야 하므로 그렇게 하지 않습니다.
이 래퍼는 Facade 디자인 패턴, Proxy, 심지어 Decorator에서 차용합니다. 디자인 패턴에 대해 자세히 알아보려면 기본 패턴과 실제 예제에 대한 멋진 개요를 제공하는 https://refactoring.guru/design-patterns을 확인하십시오.
Reference
이 문제에 관하여(타사 호출을 외부 서비스로 래핑하는 것이 항상 좋은 생각인 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lukapeharda/why-wrapping-3rd-party-calls-to-external-services-is-always-a-good-idea-46ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)