종속성을 처리하는 더 나은 방법

종속성은 현재 어디에나 있으며 모든 앱 개발에 항상 필요한 부분입니다. 그러나 때때로 우리의 코드는 쉽게 그들과 고도로 결합될 수 있으며 이것은 매우 위험합니다. 결과적으로 어떤 이유로든 종속성 중 하나가 중단되면 앱이 예상보다 더 빨리 중단될 것이며, 더 나쁜 것은 외부 코드를 제어할 수 없기 때문에 처리하기가 훨씬 더 어려워지는 것입니다. 고려해야 할 또 다른 사항이 있습니다. 많은 종속성을 사용하면 그 중 하나가 변경되는 경우, 종속성을 사용하는 것이 덜 위험하게 만드는 방식으로 종속성을 관리하기 위해 신중하게 계획하지 않는 한 지옥이 될 수 있으며 많은 작업이 필요합니다.

이를 달성하기 위한 "종속성 주입"및 "종속성 반전"을 포함하되 이에 국한되지 않는 몇 가지 접근 방식이 있으며, 이 게시물에서는 종속성 반전과 관련된 전략에 대해 설명합니다.

문제:



nodejs 앱이 있고 난수를 생성하는 라이브러리를 사용해야 한다고 가정합니다. 이것을 인터넷 검색으로 꽤 많이 찾을 수 있었고 라이브러리x-random-generator를 사용하기로 결정했으며 이를 수행하여 난수를 생성해야 합니다.

import xRandomGenerator from `x-random-generator`

const randomNumber = xRandomGeneration.generateRandomNumber()


이 라이브러리도 임의의 ID를 생성하고 다음과 같이 사용한다고 가정해 보겠습니다.

import xRandomGenerator from `x-random-generator`

const randomId = xRandomGeneration.generateRandomId()


우리는 이것을 코드에서 사용했고 최대 X개의 파일에서 이 라이브러리를 사용했으며 모든 것이 잘 작동합니다.

잠시 후 앱이 조금 더 성장하고 이제 특수 문자 집합만 사용하여 임의의 사용자 이름을 사용해야 하는 새로운 기능이 있습니다. 우리는 라이브러리로 돌아가 설명서를 읽은 후 이 라이브러리가 this -_ 를 포함하는 문자 집합을 사용하기 때문에 필요한 임의의 사용자 이름을 생성하는 데 사용할 수 없다는 것을 알 수 있습니다. 사용자 이름에 허용되지 않는 경우 이제 어떻게 해야 합니까?

계속해서 이 기능과 난수 및 난수 ID를 제공하는 y-random-generator라는 멋진 라이브러리를 찾았습니다. 그리고 둘 다 사용할 수 없기 때문에 기존 것을 이것으로 교체해야 하고, 여러 곳에서 사용했기 때문에 기존 라이브러리를 사용하던 파일을 모두 건드려야 하고, 이것은 특히 새 라이브러리에 다른 인터페이스가 있는 경우에는 좋은 생각이 아닙니다.

해결책:



이 문제를 피하기 위해 우리는 의존성을 숨겨야 할 것입니다. 앱의 어떤 부분도 이 코드 부분이 어느 라이브러리에서 오는지 알 수 없어야 합니다. 하나의 구성 요소만 이를 알아야 하며 필요한 메서드만 추상화해야 합니다. 우리가 사용하는 큰 라이브러리에서 사용하십시오.
이 구성 요소는 다음과 같습니다

import yRandomGenerator from `x-random-generator`

export const randomGenerator = {
  randomNumber: yRandomGenerator.generateRandomNumber,
  randomId: yRandomGenerator.generateRandomId,
  randomUsername: yRandomGenerator.generateRandomUsername,
}


우리는 전체 응용 프로그램에서 이 새로운 구성 요소를 사용할 수 있으며 다른 라이브러리로 전환하고자 할 때마다(심지어 매우 다른 인터페이스를 가질 수도 있음) 이 구성 요소는 코드가 여전히 제대로 작동하는지 확인하는 채택자 역할을 할 수 있습니다. 우리의 응용 프로그램.

import ZRandomGenerator from `z-random-generator`

const zRandomGenerator = new ZRandomGenerator()
const zRandomUsernameGenerator = new ZRandomGenerator('abcdefghijklmnopqrstuvwxyz')

export const randomGenerator = {
  randomNumber: zRandomGenerator.numbers().generate,
  randomId: zRandomGenerator.generate,
  randomUsername: zRandomUsernameGenerator.generate,
}


결론:



종속 항목에 대한 결합을 줄이고 그들 중 하나를 업데이트하거나 변경하고자 할 때 우리 자신에게 조금 더 많은 자유를 주기 위해 우리는 항상 추상화 계층 아래에서 종속성을 숨기는 것을 목표로 해야 합니다. 그리고 이것은 심지어 "단일 책임 원칙"을 지지합니다.

좋은 웹페이지 즐겨찾기