2012-08-09 2 views
2

다른 종류/클래스의 다른 인스턴스를 만듭니다.또 다른 "패턴이 맞습니까? 그렇다면 이름이 무엇입니까"?

간단한 예 : ORM을 사용하고 있고 데이터베이스에 이메일 큐를 저장하고 있습니다. 그런 다음 제 3 자 라이브러리를 사용하여 대량 메일을 보내야합니다.

개체 (단순위한 PHP 여기에 관련이없는, 공용 속성) :

class Mail 
{ 
    /** 
    * @var string 
    */ 
    public $senderText; 

    /** 
    * @var My\App\Entity\User 
    */ 
    public $user; 

    /** 
    * @var \Doctrine\ORM\ArrayCollection 
    */ 
    public $attachments; 
} 

... 목적은 지금까지 다른 사용자의 타사 "메일"된다. 예를 들어, 다음과 같이해야 할 수도 있습니다.

$mail = /* hydrated */; 
$user = $mail->getUser(); 

$mailer = new ThirdPartyMailer(); 

// Fill message properties 
$message = $mailer->createMessage(); 

$fullName = sprintf('%s %s', $user->getFirst(), $user->getLast()); 
$message->addFrom(array($fullName => $user->getEmail())) 

// Create and add attachments 
foreach($mail->getAttachments() as $attachment) 
{ 
    $message->attach($mailer->createAttachment($attachment->getFullPath())); 
} 

패턴입니까? 뭔가 다른 것에서 하나의 인스턴스를 생성/변환 할 책임이있는 클래스와 같은 객체 변환기와 같은 것 ...

+0

이것은 실제로 코드 질문이 아닙니다. 전문 용어 문제이며 대신 [Programmers] (http://programmers.stackexchange.com)에 있어야합니다. 이주 투표. –

+0

@KenWhite, 오케이, 죄송합니다. 나도 투표 중이 야. 편집하다. 마이그레이션을 위해 투표 할 수 없습니다 ... – gremo

답변

0

이 패턴에는 널리 사용되는 이름이 하나도 없지만 일부 일반적인 이름은 "translator"와 "converter"입니다. "- 유사한 엔티티를 나타내는 두 개의 서로 다른 클래스 사이를 변환하는 클래스.

관련 패턴은 adapter pattern입니다. 제 3 자 메시지가 인터페이스로 제공되는 경우 기존 메일 개체를 래핑하고 타사 인터페이스를 구현하는 어댑터 클래스를 만들 수 있습니다.

+0

예, 좋을 것입니다. 사실 (제 3 자) 메시지는 인터페이스를 구현합니다. 하지만 세터는 어떨까요? 구현은 나에게 이해가되지 않는다. – gremo

+0

@Gremo : Message 인터페이스에 setter가 포함되어 있다고 말하는가? – casablanca

+0

예 : https://github.com/swiftmailer/swiftmailer/blob/master/lib/classes/Swift/Mime/Message.php – gremo