Javascript에서 Facade 패턴 소개
자세한 내용을 살펴보기 전에 이 특정 패턴으로 해결할 수 있는 몇 가지 예를 살펴보겠습니다.
이름에서 알 수 있듯이 Facade는 건물의 얼굴을 의미합니다. 🏢
거리를 지나가며 건물을 바라보는 사람들은 그 건물의 배선이나 파이프 또는 기타 복잡한 사항이 어떤지 알 필요가 없습니다. 그것은 건물의 모든 복잡성을 숨기고 친근한 얼굴을 보여줍니다.
내가 생각할 수 있는 다른 간단한 비유는 고객 서비스입니다. 문의사항이나 불만사항은 누구나 고객센터로 문의하실 수 있습니다. 고객은 배송 지연 문제를 물류에 직접 문의하거나 잘못된 청구 문제에 대해 금융에 직접 불만을 제기할 필요가 없었습니다. 고객 서비스에 문의하면 고객 서비스에서 이 문제를 해결하고 필요한 정보를 제공합니다.
좋아, 우리는 Facade Pattern이 무엇인지에 대한 아이디어를 얻었습니다. 이것이 프로그래밍과 어떤 관련이 있습니까?
제품 관리자가 John에게 회사 제품 목록을 표시하는 페이지를 만들라고 지시했다고 가정해 보겠습니다. 이 경우 John First 본능은 데이터베이스에서 데이터를 신속하게 검색할 수 있도록 하는 타사 API에 대한 npm 저장소를 즉시 검색합니다. 그는 자신이 찾은 이 타사 API에 대해 매우 확신하고 이 API로 페이지를 만들기 시작했으며 모든 것이 John에게 순조롭게 진행되었습니다. 🚗
잠시 후 그는 또한 모든 곳에서 이 세 번째 페이지 API를 사용하기 시작합니다. 불행히도 주말 동안 그의 PM은 John에게 전화를 걸어 이 타사 API에서 생성된 고약한 버그로 인해 애플리케이션이 손상되었다고 말했습니다. 존이 사용하는 것. 타사 API가 애플리케이션 내에서 긴밀하게 연결되어 있기 때문에 주말 내내 애플리케이션의 버그를 수정했습니다. 🐞

위의 경우에서 볼 수 있듯이. 애플리케이션 내에서 John이 사용하는 API 간에 긴밀하게 연결된 것이 문제의 원인입니다. 이런 일이 우리에게 일어나는 것을 어떻게 막을 수 있습니까? 구출에 외관 패턴! ✨
아래 코드를 살펴보자
import React from 'react'
import axios from 'axios'
function ProductPage({ productId }) {
const [data, setData] = React.useState(null)
React.useEffect(() => {
axios
.get(`product_end_url/${productId}`)
.then(res => res.json())
.then(json => {
setData(json)
})
}, [id])
return data !== null && <div>{JSON.stringify(data, null, 2)}</div>
}
위의 코드에서
axios 라이브러리를 사용하여 구성 요소의 제품 데이터를 가져옵니다. 작은 응용 프로그램에는 문제가 되지 않습니다. 이제 응용 프로그램이 더 커지고 유사한 구성 요소가 여러 개, 수십 또는 수백 개 있다고 상상해 보십시오. 그들은 axios를 직접 사용하여 모든 곳에서 데이터를 가져오고 게시합니다. 그리고 나중에 우리 팀은 axios 종속성을 삭제하고 fetch 사용으로 전환하기로 결정했습니다. 이제 우리는 John과 같은 위치에 있습니다. 🥹아래의 파사드 구현을 살펴보겠습니다.
// API.js
import axios from 'axios'
export default class API {
get(url) {
return axios.get(url)
}f
post(url, options) {
return axios.post(url, options)
}
}
// DetailPage.js
import React from 'react'
import API from './API'
function ProductPage({ productId }) {
const [data, setData] = React.useState(null)
React.ProductPage(() => {
API.get(`product_end_url/${productId}`)
.then(res => res.json())
.then(json => {
setData(json)
})
}, [id])
return data !== null && <div>{JSON.stringify(data, null, 2)}</div>
}
위의 코드에서 코드를 약간 수정했습니다. 코드에 추가 레이어를 추가합니다.
axios 메서드를 사용하여 호출하거나 get() 클래스에서 데이터를 업데이트하기 위해 post()를 호출하는 대신 데이터를 가져오기 위해 API에 직접 액세스하지 않았습니다.이 예제에서 API 계층의 주요 목적은 API 액세스를 위한 모든 논리를 캡슐화하는 것입니다. 따라서 소비자는
API 클래스에서 논리의 구현 세부 사항을 알 필요가 없으며 그냥 소비하면 예상대로 작동합니다. API 클래스의 구현을 fetch 를 사용하도록 변경해 봅시다.// API.js
export default class API {
get(url) {
return fetch(url)
}
post(url, options) {
return fetch(url, {
method: 'POST',
...options,
})
}
}
우리는 이 고안된 예제에서 파사드 패턴을 성공적으로 구현했습니다. 파사드 패턴을 사용함으로써 코드가 더 이상 긴밀하게 결합되지 않습니다. 코드를 더 깔끔하고 모듈식으로 만들 뿐만 아니라 노출된 메서드의 논리 복잡성을 최종 소비자에게 숨겨 가독성을 높이고 코드를 더 쉽게 유지 관리할 수 있도록 합니다.
파사드 패턴에 대한 이 짧은 소개가 우리를 행복한 프로그래머로 만들기 위해 코드를 디자인하는 방법에 대한 새로운 관점을 제공하기를 바랍니다. 🤓
Reference
이 문제에 관하여(Javascript에서 Facade 패턴 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yohanesss/introduction-of-facade-pattern-in-javascript-2gmo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)