ধরুন এখানে কোনও Page
শ্রেণি রয়েছে, যা কোনও পৃষ্ঠা রেন্ডারারের নির্দেশের একটি সেট উপস্থাপন করে। এবং ধরুন এখানে এমন কোনও Renderer
শ্রেণি রয়েছে যা কীভাবে পর্দায় কোনও পৃষ্ঠা রেন্ডার করতে জানে। কোডটি দুটি ভিন্ন উপায়ে গঠন করা সম্ভব:
/*
* 1) Page Uses Renderer internally,
* or receives it explicitly
*/
$page->renderMe();
$page->renderMe($renderer);
/*
* 2) Page is passed to Renderer
*/
$renderer->renderPage($page);
প্রতিটি পদ্ধতির উপকারিতা এবং কনসগুলি কী কী? কখন ভালো হবে? অন্য কখন ভাল হবে?
পটভূমি
আরও কিছুটা পটভূমি যুক্ত করতে - আমি একই কোডে উভয় পদ্ধতির ব্যবহার করে নিজেকে খুঁজে পাচ্ছি। আমি তৃতীয় পক্ষের পিডিএফ গ্রন্থাগার ব্যবহার করছি TCPDF
। আমার কোড কোথাও আমি আছে কাজ পিডিএফ উপস্থাপনার জন্য নিম্নলিখিত আছে:
$pdf = new TCPDF();
$html = "some text";
$pdf->writeHTML($html);
বলুন আমি পৃষ্ঠার উপস্থাপনা তৈরি করতে চাই। আমি এমন একটি টেমপ্লেট তৈরি করতে পারি যা পিডিএফ পৃষ্ঠার স্নিপেটকে এমনভাবে রেন্ডার করার জন্য নির্দেশনা রাখে:
/*
* A representation of the PDF page snippet:
* a template directing how to render a specific PDF page snippet
*/
class PageSnippet
{
function runTemplate(TCPDF $pdf, array $data = null): void
{
$pdf->writeHTML($data['html']);
}
}
/* To be used like so */
$pdf = new TCPDF();
$data['html'] = "some text";
$snippet = new PageSnippet();
$snippet->runTemplate($pdf, $data);
1) এখানে লক্ষ করুন যা আমার প্রথম কোড উদাহরণ হিসাবে $snippet
নিজেই চলে । এছাড়া জানেন এবং সাথে পরিচিত হওয়া প্রয়োজন $pdf
, এবং যে কোনো সঙ্গে $data
এটির জন্য কাজ করতে।
তবে, আমি এর PdfRenderer
মতো ক্লাস তৈরি করতে পারি :
class PdfRenderer
{
/**@var TCPDF */
protected $pdf;
function __construct(TCPDF $pdf)
{
$this->pdf = $pdf;
}
function runTemplate(PageSnippet $template, array $data = null): void
{
$template->runTemplate($this->pdf, $data);
}
}
এবং তারপরে আমার কোড এতে পরিণত হয়:
$renderer = new PdfRenderer(new TCPDF());
$renderer->runTemplate(new PageSnippet(), array('html' => 'some text'));
2) এখানে এটি $renderer
গ্রহণের জন্য এটির জন্য প্রয়োজনীয় PageSnippet
এবং যে কোনও $data
প্রয়োজনীয়। এটি আমার দ্বিতীয় কোড উদাহরণের মতো।
সুতরাং, যদিও উপস্থাপক পৃষ্ঠার স্নিপেট পান, উপস্থাপকের ভিতরে, স্নিপেটটি এখনও চালিত হয় । এটি বলতে গেলে উভয় পদ্ধতিরই অভিনয় চলছে। আমি নিশ্চিত না যে আপনি নিজের ওওর ব্যবহারকে কেবল একটি বা কেবল অন্যটিতে সীমাবদ্ধ করতে পারবেন কিনা। উভয়ই প্রয়োজন হতে পারে, এমনকি যদি আপনি একে অপরের মুখোশও করেন।