অ্যালেক্স, বেশিরভাগ সময় আপনার একাধিক উত্তরাধিকারের প্রয়োজন হওয়াই আপনার সিটিকাল কাঠামোটি কিছুটা ভুল signal পরিস্থিতিতে আপনি রূপরেখা দিয়েছি আমি দেখছি আপনার শ্রেণীর দায়িত্ব খুব বিস্তৃত। যদি বার্তা অ্যাপ্লিকেশন ব্যবসায়ের মডেলের অংশ হয় তবে এটি আউটপুট সরবরাহের বিষয়ে যত্ন নেওয়া উচিত নয়। পরিবর্তে, আপনি দায়িত্ব বিভক্ত করতে পারেন এবং ম্যাসেজডিসপাচার ব্যবহার করতে পারেন যা পাঠ্য বা এইচটিএমএল ব্যাকএন্ড ব্যবহার করে বার্তা প্রেরণ করে। আমি আপনার কোড জানি না, তবে আমাকে এটি এইভাবে অনুকরণ করুন:
$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);
এইভাবে আপনি বার্তা শ্রেণিতে কিছু বিশেষীকরণ যুক্ত করতে পারেন:
$htmlIM = new InvitationHTMLMessage();
$textIM = new InvitationTextMessage();
$d = new MessageDispatcher();
$d->dispatch($htmlIM);
$d->dispatch($textIM);
নোট করুন যে মেসেজডিজপাচার কোনও সিদ্ধান্ত নেবে যে এইচটিএমএল হিসাবে পাঠানো হবে বা type
মেসেজ অবজেক্টে সম্পত্তিটির উপর নির্ভর করে সাধারণ পাঠ্য পাঠানো হবে।
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");
}
}
এটির সংক্ষেপে, দায়িত্ব দুটি শ্রেণীর মধ্যে বিভক্ত। বার্তা কনফিগারেশন আমন্ত্রন এইচটিএমএল মেসেজ / ইনভিটেশনটেক্সটমেসেস ক্লাসে করা হয়, এবং অ্যালগরিদম প্রেরণকারীর কাছে প্রেরণ করা হয়। একে কৌশল প্যাটার্ন বলা হয়, আপনি এখানে এটি আরও পড়তে পারেন ।