2

異なる種類/クラスの別のインスタンスからインスタンスを作成します。

簡単な例: ORM を使用していて、メール キューをデータベースに保存しています。次に、サードパーティのライブラリを使用して、ある時点で一括メールを送信する必要があります。

あなたのオブジェクト(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()));
}

これはパターンですか?あるインスタンスを別のインスタンスから作成/変換するクラスのような、オブジェクト コンバーターのようなもの...

4

1 に答える 1

0

このパターンに広く使用されている単一の名前は知りませんが、いくつかの一般的な名前は「トランスレーター」と「コンバーター」です。これは、同様のエンティティを表す 2 つの異なるクラス間で変換を行うクラスです。

関連するパターンはアダプター パターンです。サード パーティのメッセージがインターフェイスとして公開されている場合、既存のメール オブジェクトをラップしてサード パーティのインターフェイスを実装するアダプター クラスを作成できます。

于 2012-08-09T02:31:36.290 に答える