Table of Contents
이 템플릿은 진정한 가입자에 대한 개인화 및 동적 콘텐츠가 필요합니다. 이 템플릿을 구축하는 것은 종종 프리젠 테이션 논리 및 건축 세부 사항이 단단히 결합 된 tangled 코드로 이동합니다. Builder]은 최종 표현에서 이메일 집합을 분리하여 깨끗한 솔루션을 제공합니다. 이 디자인 패턴은 유연성이나 유지 보수를 잃지 않고 복잡한 데이터 중심 템플릿을 구성 할 수 있습니다. 환영 시리즈, 또는 거래 영수증을 보내면, 거래 또는 프로모션 영수증을 보내지 않습니다.
Builder 패턴 이해
Builder Pattern은 ]Gang of Four]에서 복잡한 객체의 구조와 결합된 구조입니다. 매개변수의 수십개의 수용을 수용하는 거대한 생성자에 객체를 초기화하는 대신 단계별 메소드를 정의합니다. Director] ] ]] ]]] ]]]]] ]]] ]]]]] ]]]]]] ]]]]]]]]] [FLT:]]]]]]]]] [FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:[FLT:]]]]]]]]]]]
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 그러나 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
Dynamic Email Template의 핵심 구성 요소
Builder Pattern을 적용하기 전에 대부분의 마케팅 이메일 공유가 빌딩 블록을 이해하는 데 도움이됩니다.
- Header – 로고, 회사명, 옵션 헤더 이미지 및 사전헤더 텍스트.
- 바디 섹션 – 영웅 배너, 텍스트 블록, 제품 그리드, 증언, 카운트 다운 타이머, 또는 사용자 정의 콘텐츠 모듈.
- Call-to-action (CTA) – 원하는 행동을 향해 수신자를 구동하는 버튼 또는 링크.
- Footer – Unsubscribe 링크, 물리적 주소, 소셜 미디어 아이콘 및 개인 정보 보호 정책.
- Dynamic placeholder – {% raw %}]{% endraw %}, , ] – 전송 시간에 사용자 당 팝업.
각 구성 요소는 캠페인 유형에 따라 다를 수 있습니다. 프로모션 이메일에는 여러 제품 블록과 카운트 다운 타이머가 포함될 수 있습니다. 암호 재설정 이메일은 비소 및 거래가 될 것입니다. 빌더 패턴은이 다양한 기능을 우아하게 취급합니다.
Builder Pattern을 이메일 템플릿에 적용
1 단계 : Builder 인터페이스 정의
인터페이스는 포함될 수 있는 모든 구성 요소에 대한 방법을 선언합니다. 다음은 TypeScript-like pseudocode의 인터페이스입니다.
interface EmailBuilder {
setHeader(logo: string, company: string): this;
addHeroBanner(imageUrl: string, alt: string): this;
addTextBlock(heading: string, body: string): this;
addProductGrid(products: Product[]): this;
addCtaButton(text: string, url: string): this;
setFooter(unsubscribe: string, address: string): this;
addDynamicPlaceholder(key: string, defaultValue: string): this;
build(): EmailTemplate;
}
각 메소드가 ]를 반환한다는 것을 알립니다. 이 메소드는 클라이언트 코드가 혼동하는 방법을 지원합니다.
2단계: 콘크리트 빌더 만들기
각 콘크리트 빌더는 인터페이스를 구현하고 특정 유형의 이메일을 구성합니다. 예를 들어:
- PromotionalBuilder – 제품 그리드 추가, 제한된 시간 제공, 카운트 다운 타이머.
- TransactionalBuilder – 주문 세부 사항, 상태 경고, 마케팅 장애를 가진 최소 템플릿을 생산합니다.
- NewsletterBuilder – 편집 내용에 대한 멀티 섹션 레이아웃을 만듭니다.
콘크리트 빌더는 내부 제품 객체에 조립 된 구성 요소를 저장합니다. 그들은 또한 기본 값 또는 브랜드 가이드 라인을 적용 할 수 있습니다.
3 단계 : 이사를 구현
이사는 건설의 순서가 아니라 각 부분의 특정하지 않다는 것을 알고 있습니다. 그것은 빌더가 걸리고 주문에 적합한 방법을 호출합니다.
class EmailDirector {
constructPromotional(builder: EmailBuilder): EmailTemplate {
return builder
.setHeader('https://cdn.example.com/logo.png', 'MyBrand')
.addHeroBanner('banner.jpg', 'Spring Sale')
.addTextBlock('Hurry!', 'Offer expires in 24 hours.')
.addProductGrid(fetchFeaturedProducts())
.addCtaButton('Shop Now', 'https://shop.example.com')
.setFooter('unsub link', '123 Main St')
.addDynamicPlaceholder('first_name', 'valued customer')
.build();
}
constructTransactional(builder: EmailBuilder): EmailTemplate {
return builder
.setHeader('logo.png', 'MyBrand')
.addTextBlock('Order Confirmation', 'Your order #{{order_id}} has been placed.')
.setFooter('unsub link', '123 Main St')
.addDynamicPlaceholder('order_id', 'N/A')
.build();
}
}
디렉터는 건설 알고리즘을 격리합니다. 새로운 이메일 유형이 필요하면 디렉터에게 방법을 추가하고 새로운 콘크리트 빌더가 없습니다. 다른 코드 변경.
4 단계 : 최종 템플릿을 구축
Client code 원하는 빌더와 디렉터 방법을 선택:
const builder = new PromotionalBuilder();
const director = new EmailDirector();
const template = director.constructPromotional(builder);
// template.render(userData) or template.toHtml()
resulting object는, 또는 HTML을 직접 생성할 수 있는 간단한 데이터 구조일 수 있습니다. 빌더는 “무엇”의 내용에서 집합의 “how”를 분리합니다.
Real-World Scenario: 대역 카트 이메일
콘크리트 전자 상거래 케이스를 통해 걸어 봅시다. 버려진 카트 이메일은 다음을 포함해야 합니다.
- 고객 이름과 촉감.
- 뒤에 남겨진 제품의 동적인 명부.
- 전환을 격려하는 개인 할인 코드.
- CTA를 취소하려면 취소하십시오.
CartRecoveryBuilder 를 생성하여 를 구현합니다. 내부 상태는 카트 아이템과 생성된 쿠폰을 추적할 수 있습니다. 이사는 호출할 수 있습니다.
constructAbandonedCart(builder: EmailBuilder, cart: Cart): EmailTemplate {
return builder
.setHeader('logo.png', 'ShopNow')
.addTextBlock('Did you forget something?', `Hi ${cart.customerName}, your cart is waiting.`)
.addProductGrid(cart.items)
.addTextBlock('Complete your order within 24 hours and save 10%!',
`Use code: ${generateDiscountCode()}`)
.addCtaButton('Complete Purchase', checkoutUrl(cart.id))
.setFooter('unsubscribe', '123 St')
.addDynamicPlaceholder('discount_code', 'SAVE10')
.build();
}
Builder는 건설 시간에만 카트 데이터를 수신하므로 템플릿 논리는 깨끗하게 유지됩니다. 그리고 콘크리트 빌더가 각 구성 요소 렌더링을 제어하기 때문에 시각적 스타일을 변경하십시오 (예 : 테이블 기반 레이아웃에서 현대 블록 기반 디자인)은 빌더에서만 변경해야합니다. 이사는 터치되지 않습니다.
고급 혜택: Concerns 및 Testability의 분리
Concerns의 별거
Builder Pattern은 각 클래스의 단일 책임에 따라 다릅니다. director]은 순서, builder]]은 조립 및 렌더링하는 방법을 알고 있으며 product] (email Template)는 데이터만 보유합니다. 마케팅 팀은 구성 객체를 제공함으로써 새로운 이메일 유형을 정의할 수 있습니다. 그 후 개발자는 빌드를 구현합니다.
시험 능력
각 빌더 방법은 독립적으로 단 하나 테스트 될 수 있습니다. 제품 그리드를 추가하는 것은 예상 HTML 조각을 생성하거나 동적 플레이스 홀더가 올바르게 주사된다는 것을 확인할 수 있습니다. 통합 테스트는 디렉터가 각 캠페인 유형에 대한 정확한 시퀀스를 구축 할 수 있습니다. 이 모듈성은 크게 회귀 위험을 감소시킵니다.
관련 상품
구성 요소는 빌더에 재사용됩니다. 동일한 발자국 빌더 방법은 홍보, 거래 및 뉴스 레터 빌더로 구성 될 수 있습니다. 브랜드 가이드라인 (색상, 글꼴, 필수 법적 링크)은 공유 빌더 돕기 기능에 집중됩니다.
Marketing Automation Platform과 통합
Directus – headless CMS and content management framework – 이 패턴을 구현하기 위한 우수한 환경을 제공합니다. Directus의 API-first 아키텍처를 사용하면 템플릿 구성, 구성 구성 구성 구성, 구성 내용 블록 및 사용자 데이터를 구조화 컬렉션으로 저장할 수 있습니다. 애플리케이션은 백엔드 (예: Node.js 또는 PHP 서비스)의 Builder 패턴을 사용하여 SMT 또는 API 공급자를 통해 최종 이메일 페이로드를 생성 할 수 있습니다.
예를 들어, 당신은 사용할 수 있는 헤더 이미지, 발기 링크, 및 콘텐츠 스니펫을 Directus 컬렉션에 저장 할 수 있습니다. A Campaign] 수집은 빌더 유형 (프로 모션, 거래) 및 특정 구성 요소를 무시할 수 있습니다. 귀하의 백엔드 코드는 이러한 레코드를 읽고, 적절한 콘크리트 빌더를 즉시 읽고, 최종 이메일 생성하기 위해 디렉터를 호출합니다. 이 템플릿 구성에서 콘텐츠 관리, 자동 소스를 제공하면서 자원을 관리합니다.
이 접근법은 ]Smashing Magazine의 동적 이메일 템플릿 가이드] 및 Mailchimp의 거래 이메일에 대한 모범 사례].
관련 기사
Builder Pattern은 마케팅 자동화에서 동적 이메일 템플릿을 만드는 강력한 도구입니다. 표현에서 건설 분리함으로써, 레거시 코드가 다시 작성하지 않고 새로운 캠페인 유형을 도입 할 수 있습니다. 콘크리트 빌더는 세부 사항 격리 된 세부 사항을 렌더링하고, 디렉터는 명확한 건설 알고리즘을 제공합니다, 결과 코드는 더 많은 테스트 가능하고, 유지적이고 확장 할 수 있습니다. 당신이 맞춤 플랫폼을 구축하고 Directus와 같은 헤드리스 CMS를 확장하는 것은,이를 채택하면 이메일 워크플로우를 간소화하고, 더 많은 커뮤니케이션 워크플로우를 전달하는 데 도움이 될 것입니다.