Sunday, February 17, 2013

Three Layer Architecture Part II معمارية الطبقات الثلاث

بعد أن اوضحنا معمارية الطبقات الثلاث في المقالة السابقة Three Layer Architecture Part I , سنقوم الأن بتطبيق هذه الطبقات بالترتيب ونبدأ من الأسفل الى الأعلى Bottom-Up , بحيث نقوم بالبداية بخلق قاعدة البيانات ومن ثم نخلق طبقة التطبيق وبعدها طبقة التعامل مع المستخدم , سوف اقسم العمل الى نقاط متسلسلة لأجل تبسيط الأمر على القارئ.

1 - يتم فتح Sql Server لأجل بناء قاعدة البيانات ونقوم بتسميتها DBCompany وسوف تتألف من جدول واحد نسميه Customer يحوي على عدة حقول , شاهد الصورة التالية التي تبين كود Sql :

* وبعد تنفيذ الكود أعلاه سوف يتم خلق الجدول بالشكل التالي :
* وبعد ذلك نقوم بتعبئة بيانات الجدول وبهذا ننتهي من مرحلة بناء قاعدة البيانات.

2 - يتم خلق تطبيق من نوع WPF ندعوه ThreeLayerArchitecture ونقوم بخلق مشروعين من نوع ClassLibrary كما في الصورة التالية :

 3 - نقوم الأن ببناء الطبقة DAL سوف نعتمد ببناء هذه الطبقة على تقنية Entity Framework بحيث سوف نقوم بأستخدم قاعدة البيانات التي خلقناها في الخطوة رقم 1 , أذن لنقوم بتتبع الخطوات التالية:

* نقوم أولا بخلق ملف جديد نظيفه الى طبقة DAL أنظر اللصورة التالية:

* نقوم بأختيار Model كما في الصورة التالية :


* نقوم بأختيار المودل بالأعتماد على قاعدة بيانات مخلوقة مسبقا :


* نختار نوعية مصدر البيانات كما في الصورة ادناه :


* بعد ألأختيار أعلاه يجب أن نحدد السيرفر الخاص بقاعدة البيانات ونحدد قاعدة البيانات التي خلقناها مسبقا انظر الشكل التالي :


* بعد أختيار السيرفر وتحديد قاعدة البيانات سوف تظهر النافذة في الأسفل وبعدها يجب عليك الضغظ على Next :


* يجب عليك الأن أن تختار الجدول الذي تريد أن يتمثل في Model ومن ثم أضغظ على Finish :


* وفي النهاية سوف يتولد EFModel ويتولد Class Diagram مشابه للجدول الموجود في قاعدة البيانات : 













4 - نقوم ألأن بخلق طبقة BL والتي سوف تتعامل مع طبقة DAL أذن يجب عليك أن تظيف مرجع Reference الخاص بطبقة DAL الى BL وأيضا أضافة مرجع او مكتبة System.Data.Entity الموجودة ضمن مكتبة Net. , شاهد الخطوات التالية لأجل تنفيذ الطبقة :

* يتم أولا خلق Interface ندعوه IDataProvider يحوي على Method تقوم بأرجاع قائمة الموظفين , الكود ممثل في الشكل التالي :

* بعدها يتم خلق Class ندعوه DataProvider نجعلة ينفذ IDataProvider  عمله الرئيسي هو أحضار جميع بيانات الخاصة بجدول Customer من قاعدة البيانات وأرجاعها على شكل IList أن تم أستدعائه :

بالطبع يمكنك أن تقوم بأضافة الوظائف والقواعد المنطقية للتحكم بسيران العمليات والتحقق من المرجع والمرسل الى الطبقة الاحقة لكننا الأن نركز حول تطبيق معمارية الطبقات وليس عمل Domain او نواة خاصة بطبقة BL.

5 - نقوم ألأن ببناء الطبقة PL والتي سوف تتفاعل مع المستخدم يتم اولاً أضافة ملف ندعوه ViewModel ومن ثم نسخ فايل App.Config ولصقه في طبقة العرض PL لتسهيل الوصول واستخدام Entities ويجب أن يكون على الشكل التالي :
* نظيف Class الى ملف ViewModel وندعوه MainViewModel والذي سوف يتعامل مع طبقة BL ويعمل Binding مع View لتحقيق جزء من مبدأ MVVM بالطبع كان بأمكاننا أن تقوم بعزل ViewModel على dll منفرد واقصد خلق ClassLibrary لكن أردت أن أبسط التطوير , انظر الشكل التالي الذي يوضح الكود الخاص به :

نلاحظ من الكود أعلاه أن MainViewModel يستلم instance من نوع IDataProvider والذي بدوره يستدعي Method الموجودة داخل طبقة BL ومن ثم يذهب الى طبقة DAL لأرجاع قائمة بالأسماء, ويتسائل القارئ من أين  Constructor الخاص MainViewModel استلم كائن او مثيل من نوع IDataProvider , أنا سوف أجيبك في الخطوة التالي :

* يتم تعبئة DataContext لل MainWindow بمحتويات MainViewModel وهذا حسب هيكلية نمط MVVM بأن كل View لهViewModel أنظر الشكل التالي الذي يوضح الفكرة ويجيبك على السؤال السابق  :

* الأن نقوم برسم الواجه الرسوميةGUI بواسطة لغة XAML والتي سوف تحوي على ListBox ندخل بداخلها Customers من ViewModel , وقد وضعنا Style خاص لأجل أضهار العناصر بشكل جميل أضافة الى تزويد حدث معين عند وصول الماوس لأي عنصر في ListBox يتغير شكله:


* وعند تنفيذ البرنامج سوف تنتج النافذة التالية :





أذن بعد ألأنتهاء من تطبيق الطبقات الثلات يمكننا الأن ان نقوم برسم الشكل التالي الذي يربط التطبيق الذي عملناه مع الهيكلية المعمارية التي أوضحناها في المقالة السابقة :



الخاتمة 
تتعدد معماريات وتصاميم الأنظمة بالأعتماد على حجم وتعقيد المشروع المقترح , فنلاحظ الكثير من مصممين ومطوري الأنظمة يلجأوا الى عائلة المعماريات والتي تشمل معمارية الطبقات الثلاث التي ركزنا عليها في بحثنا مع وجود الكثير من المعماريات التي تعطي تصاميم ومعماريات جيدة ولجميع الأغراض ومثال أخر معمارية المستويات الثلاث 3tier او المتعددة Ntier .ومن خلال التطبيق أعلاه شاهدنا كيفية عزل الأكواد ضمن طبقات وكيفية الأنتقال مابين الطبقات مما يسهل الأختبار والوصول الى الخطأ.وأوضحنا جزء بسيط حول نمط MVVM .يمكنكم تحمل البرنامج من الرابط التالي : http://sdrv.ms/Zk4DqN      

No comments:

Post a Comment