نمط تصميم الواجهة هو نمط هيكلي يوفر واجهة مبسطة لمجموعة معقدة من الفئات أو المكتبات أو الأنظمة الفرعية. يتم استخدامه لإخفاء تعقيد الأنظمة وتقديم واجهة أكثر سهولة في الاستخدام وسهلة الاستخدام للعملاء.
الأهداف الرئيسية
تبسيط التفاعل: من خلال إنشاء واجهة واحدة بسيطة، يسهّل نمط الواجهة استخدام نظام معقد دون الكشف عن تعقيداته الداخلية.-
تغليف الأنظمة الفرعية: قد تكون الفئات التي يتكون منها النظام الفرعي معقدة، لكن الواجهة تعمل كطبقة تجريد، مما يسمح للعميل بالتفاعل فقط بطرق بسيطة ومتماسكة.-
الفصل: يساعد النمط على إبقاء العميل منفصلاً عن التنفيذ الداخلي، مما يسهل صيانة النظام وتوسيعه في المستقبل.-
مثال باستخدام PHPMailer ونمط الواجهة
الموقف:
تخيل أن لدينا تطبيقًا يحتاج إلى إرسال رسائل البريد الإلكتروني بطريقة بسيطة. يمكن أن تتضمن عملية إرسال رسائل البريد الإلكتروني إعدادات المصادقة، وخوادم SMTP، وإعداد المرسل، والمستلم، ونص البريد الإلكتروني، والمرفقات، وما إلى ذلك. بدلاً من تعريض هذه العملية المعقدة بأكملها للمستخدم النهائي، يمكننا إنشاء واجهة لتغليف هذه العمليات.
تثبيت PHPMailer عبر الملحن
يتطلب الملحن phpmailer/phpmailer
composer require phpmailer/phpmailer
نظام الدليل
؟الواجهة
┣ ؟سرك
┃ ┗ MailFacade.php
┣ ؟ بائع
┣ ؟composer.json
┗ ؟index.php
composer require phpmailer/phpmailer
التحميل التلقائي
أولاً، دعونا نتأكد من أن
Composer يدير التبعيات ويقوم بتحميل الفئات تلقائيًا بشكل صحيح.
في ملف Composer.json، يمكننا تضمين التحميل التلقائي للفئات من المجلد src وأيضًا إضافة تبعية PHPMailer:
{
"يتطلب": {
"phpmailer/phpmailer": "^6.0"
},
"التحميل التلقائي": {
"بي إس آر-4": {
"التطبيق\\": "src/"
}
}
}
composer require phpmailer/phpmailer
واجهة بريد الفئة
الآن لنقم بإنشاء فئة MailFacade التي ستكون بمثابة الواجهة لتبسيط عملية إرسال رسائل البريد الإلكتروني للمستخدم.
تطبيق مساحة الاسم؛
استخدم PHPMailer\PHPMailer\PHPMailer؛
استخدم PHPMailer\PHPMailer\Exception؛
// فئة الواجهة
فئة واجهة البريد {
بريد $ خاص؛
الوظيفة العامة __ بناء () {
$this->mail = new PHPMailer(true); // أنشئ نسخة جديدة من PHPMailer
$this->mail->isSMTP(); // الإعداد لاستخدام SMTP
$this->mail->Host = 'smtp.example.com'; // قم بتعيين خادم SMTP
$this->mail->SMTPAuth = true; // تمكين مصادقة SMTP
$this->mail->Username = '
[email protected]'; // اسم مستخدم SMTP
$this->mail->Password = 'secret'; // كلمة مرور SMTP
$this->mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // تمكين تشفير TLS
$this->mail->Port = 587; // منفذ خادم SMTP
}
}
composer require phpmailer/phpmailer
طريقة الإرسالالبريد الإلكتروني
// طريقة إرسال بريد إلكتروني بسيط
الوظيفة العامة sendEmail($to, $subject, $body) {
يحاول {
// تعيين المرسل
$this->mail->setFrom('
[email protected]', 'اسم المرسل');
// تعيين المستلم
$this->mail->addAddress($to); // يمكنك إضافة المزيد باستخدام $this->mail->addAddress('
[email protected]');
// قم بتعيين موضوع البريد الإلكتروني ونصه
$this->mail->Subject = $subject;
$this->mail->Body = $body;
$this->mail->isHTML(true); // قم بتعيين نص البريد الإلكتروني لقبول HTML
// إرسال البريد الإلكتروني
$this->mail->send();
صدى "تم إرسال البريد الإلكتروني بنجاح!";
} التقاط (استثناء $e) {
صدى "خطأ في إرسال البريد الإلكتروني: {$this->mail->ErrorInfo}";
}
}
composer require phpmailer/phpmailer
طريقة إرسال البريد الإلكتروني مع المرفقات
// طريقة إرسال بريد إلكتروني مع مرفق
الوظيفة العامة sendEmailWithAttachment($to, $subject, $body, $attachmentPath) {
يحاول {
// نفس التكوين الأساسي كما في الطريقة السابقة
$this->mail->setFrom('
[email protected]', 'اسم المرسل');
$this->mail->addAddress($to);
// تعيين الموضوع والجسم
$this->mail->Subject = $subject;
$this->mail->Body = $body;
$this->mail->isHTML(true);
// أضف المرفق
$this->mail->addAttachment($attachmentPath);
// أرسل البريد الإلكتروني
$this->mail->send();
echo "تم إرسال البريد الإلكتروني مع المرفق بنجاح!";
} التقاط (استثناء $e) {
صدى "خطأ في إرسال البريد الإلكتروني: {$this->mail->ErrorInfo}";
}
}
composer require phpmailer/phpmailer
امتحان
يتطلب "vendor/autoload.php"؛
استخدم App\MailFacade;
// استخدام الواجهة
$mailFacade = new MailFacade();
// إرسال بريد إلكتروني بسيط
$mailFacade->sendEmail('
[email protected]', 'موضوع البريد الإلكتروني', 'نص البريد الإلكتروني بتنسيق HTML');
// إرسال بريد إلكتروني مع مرفق
$mailFacade->sendEmailWithAttachment('
[email protected]', 'الموضوع مع المرفقات', 'هذا هو المرفق الخاص بك', '/path/to/attachment.pdf');
composer require phpmailer/phpmailer
كيف يعمل:
MailFacade: تحتوي هذه الفئة على كل المنطق اللازم لتكوين وإرسال بريد إلكتروني، مما يسمح لمستخدم الواجهة باستدعاء طريقة لإرسال البريد الإلكتروني.-
PHPMailer: يتم إخفاء تعقيد PHPMailer (مثل تكوين SMTP، والمصادقة، وما إلى ذلك) داخل الواجهة.-
فوائد:
البساطة: لا يحتاج رمز العميل (الذي يستخدم MailFacade) إلى معرفة تفاصيل مثل تكوين الخادم وطرق PHPMailer وما إلى ذلك.-
قابلة لإعادة الاستخدام: يمكن استخدام الواجهة في أجزاء مختلفة من التطبيق دون الحاجة إلى تكرار التعليمات البرمجية أو المنطق.-
قابل للصيانة: إذا كان هناك شيء ما في التنفيذ بحاجة إلى التغيير (على سبيل المثال، تبديل خادم SMTP)، فأنت بحاجة فقط إلى تحديثه ضمن فئة MailFacade.-
هذا مثال عملي لكيفية قيام نمط الواجهة بتبسيط التفاعلات مع المكتبات المعقدة مثل PHPMailer.