Alex, birden çok devralma ihtiyaç zamanların en çok nesne yapısı biraz yanlış bir sinyaldir. Durumda size ben sadece çok geniş bir sınıf sorumluluğumuz var bakın sıraladı. Mesaj uygulama iş modelinin bir parçası ise, bu çıkış render hakkında dikkat çekmek gerekir. Bunun yerine, sorumluluğu bölmek ve metin veya html arka uç kullanarak geçti Mesajı gönderir MessageDispatcher kullanabilirsiniz. Ben kodunuzu biliyorum, ama bana bu şekilde taklit izin vermeyin:
$m = new Message();
$m->type = 'text/html';
$m->from = 'John Doe <jdoe@yahoo.com>';
$m->to = 'Random Hacker <rh@gmail.com>';
$m->subject = 'Invitation email';
$m->importBody('invitation.html');
$d = new MessageDispatcher();
$d->dispatch($m);
Mesaj sınıfı için bazı uzmanlık ekleyebilirsiniz Bu şekilde:
$htmlIM = new InvitationHTMLMessage(); // html type, subject and body configuration in constructor
$textIM = new InvitationTextMessage(); // text type, subject and body configuration in constructor
$d = new MessageDispatcher();
$d->dispatch($htmlIM);
$d->dispatch($textIM);
MessageDispatcher geçti ileti nesnesi type
özelliğine bağlı HTML veya düz metin olarak göndermek isteyip bir karar olacağını unutmayın.
// in MessageDispatcher class
public function dispatch(Message $m) {
if ($m->type == 'text/plain') {
$this->sendAsText($m);
} elseif ($m->type == 'text/html') {
$this->sendAsHTML($m);
} else {
throw new Exception("MIME type {$m->type} not supported");
}
}
O Özetle, sorumluluk iki sınıf arasında paylaştırılır. İleti yapılandırma InvitationHTMLMessage / InvitationTextMessage sınıfta yapılır ve gönderme algoritma memuru delege edilmiştir. Bu Strateji Desen denir, bunu daha fazla okuyabilirsiniz here.