بسم الله الرحمن الرحيم
مقدمة :
قبل الدخول في الحديث عن هذا النمط أعيروني السمع في الخبر التالي
في غضون الشهور السابقة قد طالعتنا وكالة أنباء الأنترنت أن فريق المبرمجون العرب arabteam2000 قد قام بشكل شرعي بتغير شكل ومظهر المنتدي الخاص به إلي تصميم جديد أكثر جاذبية , إنتهي الخبر :D
أمممممممممم ولكن ربما سوف يتلقي هذا الخبر شخص ما بين إثنين
- أحدهما سوف يعجب بالمظهر الجديد لهذا المنتدي فقط .
- والأخر سوف يحاول التمعن في ما ربما قد يكون حدث من خلف الستار
وربما تبادر في ذهنه بعض الأسئلة التالية :
+ هل التغير في مظهر وطريقة عرض هذا المنتدي هل يتبعه تأثير علي بيانات ومحتوي المنتدي من مقالات وموضوعات ؟
وبعد تفكير بسيط سوف يتدارك هذا السؤال بتعقيبه , لا طبعا , لن يكون لطريقة العرض تأثير علي البيانات , وبرهان ذلك أن المنتدي مازال محتفظ ببياناته
+ وربما تبادر إلي ذهنه السؤال الأهم
هل يمكننا فصل الجزء الخاص بتكوين شكل وإسلوب عرض مشروع ما في طبقة منفصلة , بحيث يمكننا تغير هذه الطبقة فقط عندما نريد تحديث وتغير إسلوب العرض كما حدث بذلك المنتدي ؟
إذا تابع معي الحلقة التالية
الحلقة السابعة والأخيرة : MVC Pattern
Model View Controller Pattern أو نمط النموذج والعرض والموجه
يستخدم هذا النمط كفكر في إدراة المشاريع حيث يتم فيه تقسيم المشروع إلي عدة طبقات وهما كما يلي
- طبقة التعامل مع البيانات وقد تم الحديث عن كيفية بناء هذه الطبقة عندما تحدثنا عن نمط Data Model Pattern
- طبقة خاصة بالعرض View : وتختص هذه الطبقة بإسلوب عرض البيانات
- طبقة خاصة بالتوجيه Controller : وتختص هذه الطبقة بتحديد نوع العرض وليس شكل العرض
ولكن ما فائدة هذا النمط
دائما ما نتحدث عن فصل البرنامج إلي عدة طبقات , ولكن ما هي فائدة هذا الفصل أو ما فائدة تلك الطبقات
فإذا تبادر لك هذا الإستفسار , فسوف أطرح عليك قصة صغيرة , يمكنك من بعدها , إستنتاج فوائد هذا النمط بنفسك
قصة صغيرة من تأليفي
بعدما أنتهيت من العمل , قمت بالعودة للمنزل وبعد 10 دقائق وجدت الباب يطرق , وعند فتحي الباب كان هناك أحد أصدقائي المقربين
وبعدما رحبت به , قولت أقدم له حاجة (كرم ضيافه) :)
فقلت له : ماذا لو قمنا بإحضار كوب أو قدح من الشاي , ثم أتبعته بسؤال أخر بقولي : وكم معلقة من السكر تريدها علي الشاي ؟
وبعد سماعي لإجابته بقوله أحب 3 معلقات سكر (ذي تمام) قمت بمزج السكر مع الشاي , وقبل أن أستدير كي أعطي له هذا القدح قلت له تفضل كوب من الشاي يحتوي علي 3 معالق سكر
ولكنه عندئذ قد صدمني بقوله أنا لم أطلب إلا معلقتين من السكر فقط
إذا ما الحل ؟ هل أقوم بزيادة الشاي حتي يتناسب مع الطلب (حتي يتم تقليل نسبة السكر بالشاي) , ولا يعني أقوم بفصل مزيج السكر عن الشاي مرة أخري (طبعا مش هعرف أعملها)
وبعدما إنسرف غاضبا مني , جلست وحدي بأطراف الغرفة أفكر في حل كي أتفادي حدوث تلك المشكلة مرة أخري
وبعد تفكير قلت , أنا مش هوجع دماغي تاني في سؤالي السابق عن عدد قطع أو معالق السكر
طيب أنا سوف أقدم للزائر كوب من الشاي بدون سكر وبجانب هذا الكوب سوف أضع مصدر للسكر يأخذ منه الزائر كما يشاء ( ولا أيه رأيكم )
وقد راق لي هذا الحل كثيرا ,
ولكن بعد ذلك حاولت التمعن لفهم نوع هذه المشكلة , وكيف يمكنني أن أستفيد من ذلك الأمر في مشاكل أخري مشابه ربما تختلف مسمياتها وأشكالها ولكن لو أمعنا النظر لوجدنا أن الأمر كله واحد (فسبحان الواحد)
وسوف أترك لكم هذه المهمة في التفكير .
إنتهت القصة
مثال تطبيقي بسيط
نريد عمل المهام التالية علي جدول المنتجات products التالي
- سرد المنتجات كما بالشكل التالي

- وأمكانية عرض تفاصيل منتج ما كما بالشكل التالي

تركيب جدول المنتجات كما يلي
CREATE TABLE products ( PRODUCTID int(11) NOT NULL auto_increment, PRODUCTNAME varchar(255) NOT NULL default '', UNITPRICE varchar(255) NOT NULL default '', UNITSINSTOCK varchar(255) NOT NULL default '', DISCONTINUED varchar(255) NOT NULL default '', PRIMARY KEY (PRODUCTID) ) TYPE=MyISAM; # # Dumping data for table `products` # INSERT INTO products VALUES (1, 'Chai', '18', '39', '0'); INSERT INTO products VALUES (2, 'Chang', '19', '17', '0'); INSERT INTO products VALUES (3, 'Aniseed Syrup', '10', '13', '0'); INSERT INTO products VALUES (4, 'Chef Antons Cajun Seasoning', '22', '53', '0'); INSERT INTO products VALUES (5, 'Chef Anton Gumbo Mix', '21.35', '0', '1'); INSERT INTO products VALUES (6, 'Grandma Boysenberry Spread', '25', '120', '0'); INSERT INTO products VALUES (7, 'Uncle Bob Organic Dried Pears', '30', '15', '0'); INSERT INTO products VALUES (8, 'Northwoods Cranberry Sauce', '40', '6', '0'); INSERT INTO products VALUES (9, 'Mishi Kobe Niku', '97', '29', '1'); INSERT INTO products VALUES (10, 'Ikura', '31', '31', '0'); INSERT INTO products VALUES (11, 'Queso Cabrales', '21', '22', '0'); INSERT INTO products VALUES (12, 'Queso Manchego La Pastora', '38', '86', '0'); INSERT INTO products VALUES (13, 'Konbu', '6', '24', '0'); INSERT INTO products VALUES (14, 'Tofu', '23.25', '35', '0'); INSERT INTO products VALUES (15, 'Genen Shouyu', '15.5', '39', '0'); INSERT INTO products VALUES (16, 'Pavlova', '17.45', '29', '0'); INSERT INTO products VALUES (17, 'Alice Mutton', '39', '0', '1'); INSERT INTO products VALUES (18, 'Carnarvon Tigers', '62.5', '42', '0');
أرجو أن تدقق النظر في المخطط التالي

ولن أطيل عليكم في سرد طريقة حل هذا المثال , بل سوف أكتفي أن أتركك تفكر وتستنتج بمفردك كيف يمكنك عمل هذا ,أعلم بأني بهذا الشكل قد أكون مبالغ وغير محق أن أتركك هكذا , ولكن
يا شباب كل هذه السلسلة تعتمد علي التخيل ولا تعتمد علي التلقين لذلك أطلق خيالك في التفكير
و عشان محدش يزعل مني ستجدوا الحل في مرفقات هذا الدرس
تم الإنتهاء من شرح حلقات هذه السلسلة بحمد الله وتوفيقه
إلا أني أسئلكم الدعاء لأخيكم عن ظهر الغيب
المراجع التي إستعنت بها
- كتاب THE DESIGN PATTERNS JAVA COMPANION (JAMES W. COOPER)
- بالإضافه لبعض مقالات موقع http://www.phppatterns.com
والسلام عليكم ورحمة الله وبركاته
