Sunday, December 30, 2012

Architecture and Basic WPF

يركز الدرس على أعطاء مفهوم مختصر حول أمكانيات وخصائص تقنية Windows Presentation Foundation مع وصف الهيكلية المعماريةوالبنية التحتية لهذه التقنية والاصدارات التي ظهرت على مر الاعوام الستة  منذ 2006 الى عام 2012, وايضا تم أخذ الجانب التطبيقي لتوضيح العناصر الرئيسية التي تتميز بها تقنية WPF من حيث Layouts وبعض Controls.ارجو تحميل الملفات المرفقة (العرض التقديمي و البرنامج) من حقل About الموجود في موقع YouTube .





Sunday, December 23, 2012

The main principles for developing WPF applications

يركز الشرح على المبادئ الرئيسية لتقنية WPF وايضا حول اللغة القياسية XAML التي تتواجد في اكثر تقنيات Microsoft وايضا يتطرق الدرس حول مكونات برنامج Expression Studio وتدفق العمل مابين المطور والمصمم, مع أخذ الجانب التطبيقي وذلك بأظهار أنواع تطبيقات تقنية WPF.


Friday, December 21, 2012

WPF and WinForm

يركز الشرح حول الغرض الرئيسي من ظهور تقنية WPF ولغة XAML القياسية , وتم التطرق حول المميزات ومواصفات التقنية الحديثة وفي النهاية تم أخذ الجانب التطبيقي لأظهار البيئة التصميمية للتقنية.ولم نتطرق لبعض الفروقات بين التقنيتين لضيق الوقت ,بالتأكيد توجد بعض التحسينات والمميزات التي ميزت تقنية WPF  عن التقنية التقليدية WinForm :
Other reasons :
***********************************
* Data binding
* UI customization & graphics
* Easier implementation for the MVVM pattern
* The visual designer got much better
* Ability to run in the browser
* Support for pages
*Strong ties to Silverlight



Thursday, December 20, 2012

Build Database in Sql Server 2008

في المقالة السابقة Real Steps for Data Modeling تم خلق نموذج البيانات المنطقي لشركة أحمد لتجهيز الطعام,اليوم سوف نتطرق حول كيفية تحويل نموذج البيانات المنطقي الى نموذج فيزيائي وما يسمى بقاعدة البيانات بحيث يتم عكس جميع المواصفات والخصائص والعلاقات والجداول والمعرفات الى قاعدة البيانات التي يتم خلقها بواسطة بيئة أدارة قواعد البيانات(Database Management System (DBMS ومن هذه البيئات هي بيئة Sql Server 2008 من شركة مايكروسوف ,الشكل التالي يوضح النموذج المنطقي الذي عملناه سابقا :

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

1 - يتم خلق قاعدة بيانات بأسم FoodProcessing أنظر الشكل التالي:





2 - يتم خلق الجداول بأستخدام أدوات بيئة Sql Server أنظر الرسم التالي :






ملاحظة : يمكننا ان نقوم بكل هذه الأجراءات بواسطة لغة الأستعلام Sql ولكن أردنا أن نسهل الأمر على القارئ بأستخدام مباشرة الأدوات التصميمية للبيئة.

3 - يتم تكرارالخطوة 2 لأجل خلق جميع الجداول الموجودة في النموذج المنطقي حتى الوصول الى الجداول التالية .





4 - بعد أكتمال خلق جميع الجداول نأتي الأن الى خلق العلاقات المنطقية بين الجداول وذلك بخلق مرجعية للمفتاح الرئيسي بمعنى خلق علاقة بين PK الذي خلقناه والحقل الشبيه به والذي سوف يدعى بالمفتاح الثانوي FK يمكننا أن نعمل العلاقات من خلال لغة Sql لكننا سوف نستخدم أدوات بيئة Sql Server لأجل خلق العلاقات أرجو متابعة خطوات الرسوم التالية:



نستمر بعمل الخطوة 4 لأجل أكمال جميع العلاقات ,علاقة المشروع مع الزبون هي نفس علاقة جدول الدفع (One to many) اما علاقة الموظفين والمشروع فهي علاقة (Many to many) فيجب عليك سحب المفتاح الرئيسي PK من جدول الموظفين Employee ووضعة على جدول تعيين الموظفين للمشروع Employee_Project وايضا سحب المفتاح الرئيسي من جدول المشروع Project ووضعه على جدول تعيين الموظفين للمشروع.

وأخيرا يظهر الرسم التالي نموذج قاعدة البيانات الكامل :

5 - الأن يمكنك تعبئة الجداول بالبيانات وحفظها والتلاعب بها أضافة الى برمجة قاعدة البيانات من خلال خلق Stores Procedure و View و Trigger الى أخره من الأمور البرمجية.

Monday, December 17, 2012

Real Steps for Data Modeling

بعد أن تعرفنا على المكونات والمستويات الرئيسية لنمذجة البيانات في المقالتين الرئيسيتين Data Modeling , Levels Data Modeling .يمكننا الأن أن نطبق ما تعملناه سابقا ونقوم ببناء نموذج البيانات لمشروع حقيقي وهو(شركة أحمد لتجهيز الطعام) وهي شركة تختص بتنظيم وتقديم وجبات الطعام في حفلات عيد الميلاد ,الأجتماعات الخاصة,تحضير مأدبة غداء.تحتوي شركة أحمد على 6 موظفين يتقاضون رواتبهم بالأعتماد على المشاريع التي تنفذها الشركة وذلك بتخصيص %25 من المبلغ الكلي وهذه النسبة توزع على الموظفين الستة بالتساوي .
عمل شركة أحمد لتجهيز الطعام يبدأ عندما يأتي زبون معين ويطرح مشروع مثلا حفلة عيد ميلاد ,الزبون بدوره يحدد ماهي الوجبات التي يجب ان تحضر في هذه الحفلة مع أعطاء تاريخ واوقات الحفلة ويجب أطلاع الزبون حول القيمة التقديرية للحفلة.
يمكننا الأن ان نحدد العمليات الرئيسية لعمل شركة أحمد وهي : 
. يتم عمل طلبية المشروع المقترح
. يتم تحديد موظفين لأجل اتمام المشروع
. تحضير فاتورة للزبون
. أستلام المبلغ من الزبون
. أعطاء أتعاب ونسبة الموظفين من المشروع عند أنتهائه

العمليات والمعلومات اعلاه تم أخذها من ذوي المصلحة(العميل ,العاملين في الشركة) من خلال المناقشات واللقاءات المستمرة, وبعد معرفة العمليات الرئيسية والجوهر الرئيسي لعمل الشركة يمكنناان نقوم بخلق الكائنات الرئيسية لنموذج البيانات.
الأن نقوم باخذ كل عملية ومناقشتها مع ذوي المصلحة لمعرفة المتطلبات الرئيسية لكل عملية هذه المرحلة تدعى بالمستوى الخارجي External Level
1 -  عمل طلبية المشروع المقترح :
لأجل تنفيذ الطلبية لمشروع معين ولنفرض حفلة عيد ميلاد ,يجب أن        تتوفر معلومات لأجل أتمام العملية وهذا حسب نظرة ذوي المصلحة.اذن   لنرى المعلومات التي تحتاجها العملية :


 2 -  تحديد موظفين لأجل اتمام المشروع :
كما قلنا سابقا أن الشركة تحوي على 6 موظفين يتم تحديدهم لتنفيذ المشاريع المطلوبة من قبل الزبون ,المعلومات سوف تكون على الشكل التالي :

3 -  تحضير فاتورة للزبون :
يتم تحضير فاتورة دفع النفقات الى الزبون ,هذه الفاتورة تحوي على معلومات كاملة حول المشروع والنفقات التي صرفت :

4 - أستلام المبلغ من الزبون :
لأجل تنفيذ استلام النقود من الزبون , الشركة سوف تحتاج الى معلومات حول عملية التسليم ومن قام بالدفع :

5 - نسبة الموظفين من المشروع عند أنتهائه:
لأجل تنفيذ عملية اعطاء أجور الموظفين , يجب على الشركة أن تعرف معلومات حول المشروع وحول الموظفين الذين نفذوا المشروع :

وبعد أكتمال نموذج البيانات الخارجي الذي أعتمد على متطلبات  واحتياجات ذوي المصلحة. نأتي الأن الى فحص جميع العناصر التي رسمناه في الجداول أعلاه والتي تخص عمليات متفرقة تقوم بها الشركة.يتم وضع هذه العناصر داخل مجاميع حسب ملأئمتها مثلا المعلومات حول الزبون الموجودة في الجداول ,توضع هذه المعلومات او ما تسمى بالعناصر في مجموعة ال Client مصطلح مجموعة يسمى في قواعد البيانات بأسم الكائن وبتوليد هذه المجاميع سوف يتولد النموذج المفاهيمي الذي يخلوا من كل التعابير المنطقية والفيزيائية وسوف يكون مرجع ودليل لمطوري قواعد البيانات وخاصة في المرحلة المنطقية.أذن لنرى النموذج المفاهيمي في الرسم التالي :  
وبعد أكتمال النموذج المفاهيمي وتبين الكائنات الرئيسية للشركة يمكننا الأن ان نضيف العلاقات مابين الكائنات أضافة الى تبيين المفتاح الرئيسي Primary Key والمفتاح الثانوي Foreign Key ,وفي النهاية ينتج نموذج المنطقي الذي يحوي العلاقات أضافة أستخدام مبدأ التطبيع Normalization لأجل تقليل التكرارات والوصول الى الأمثلية.سوف نستخدم برنامج يدعى ERWin الذي من خلاله يتم رسم الجداول المنطقية وأضافة المفاتيح وألملامح الرئيسية وبعد أنتهاء هذا النموذج يمكننا أن ننتقل الى بيئة أدارة قواعد البيانات لأجل خلق قاعدة البيانات الحقيقية.
نأتي الأن الى عمل العلاقات مابين الكائنات التي تم خلقها في المرحلة السابقة :
1 - علاقة الزبون مع المشروع (Client -- Project):
تركز العلاقة على حضور الزبون الى الشركة وطلب تنفيذ مشروع معين وليكن حفلة عيد ميلاد ويمكنه ان يطلب أكثر من مشروع ,وكل مشروع يرتبط بزبون واحد .أذن العلاقة هي One to Many .

2 - علاقة الموظف بالمشروع (Employee -- Project):
تعتمد العلاقة على تحديد الموظفين الذين سوف يخدموا المشروع المقترح بمعنى يمكن ان يكون أكثر من موظف يحدد لمشروع معين ,ويمكن أن يكون الموظف الواحد يعيين الى أكثر من مشروع بين فترة واخرى .أذن العلاقة هي Many to Many .

3 - علاقة المشروع بنوع الطعام (Project -- Food type):
المشروع المقترح يجب أن يحوي على قائمة بنوعية الطعام يحددها الزبون عندما يقوم بالطلبية مثلا حفلة عيد ميلاد تتطلب نوعية طعام مختلفة عن مأدبة غداء لرجال أعمال .كل مشروع مقترح من قبل الزبون ممكن أن يحوي على نوعية طعام واحدة أو أكثر من نوعية وفي نفس الوقت كل نوعية طعام يمكن أن توجد في مشروع وأحد أوأكثر .أذن العلاقة هي Many to Many.

4 - علاقة الزبون بالدفع (Client -- Payment):
تركز العلاقة على دفع الزبون جميع المستحقات التي اتفق عليها الطرفين عند بداية المشروع ,وأن كل زبون يملك فاتورة واحدة أو أكثر خاصة به,وكل فاتورة تتبع زبون واحد فقط.

الشكل التالي يوضح النموذج المنطقي التقريبي مغ غياب مبدأ التطبيع :

نلاحظ علاقة الزبون مع المشروع والدفع هي علاقة واحد الى أكثر يتم تنفيذ هذه العلاقة من خلال وضع المفتاح الرئيسي في الجدولين بحيث يتحول الى مفتاح ثانوي ,أما علاقة أكثر الى أكثر يتطلب استخدام مبدأ التطبيع وهو خلق جدول ثالث يحوي المفاتيح الرئيسية للجدولين الذين يملكان علاقة Many to Many , وهذا ينطبق على علاقة المشروع بنوعية الطعام وعلاقة الموظفين بالمشروع.أذن لنشاهد الرسم التالي الذي يوضح الشكل النهائي :

نلاحظ من الشكل أعلاه ظهور الجدول الثالث الذي زودناه بمفتاح أساسي PK لأجل الأبتعاد عن التكرار والوصول السهل للبيانات المختارة.يمكننا أن نحسن نموذج البيانات المنطقي لأنه لحد هذه اللحظة لم يتم خزنه فيزيائيا ولم يتم تحويل الجداول المنطقية الى جداول فيزيائية تحوي أعمدة وصفوف لخزن البيانات وفايلات خاصة لتهيئة الجداول والمفاتيح.بحيث يمكننا أن نضيف بعض العناصر مثلا نضيف حقل تم الدفع في جدول المدفوعات من نوع Boolean يعطي True في حالة دفع الزبون او False في حالة لم يدفع ,او يمكننا أن نضيف حقول معينة الى جدول نوعية الطعام مثلا حقل يعطي أصل الطعام ياباني ,عربي ,أيطالي .يمكنك أن نضيف جدول بأكمله بالرغم أنك يجب أن تحدد جميع الكائنات منذ مرحلة النموذج المفاهيمي لكن ممكن أن تخطر على بال ذوي المصلحة فكرة معينة أثناء التطوير مثلا يقول أريد جدول يتم من خلاله أعطاء الزبائن كارت تخفيض في حالة حجزه لبعض المشاريع مثال زبون حجز طلبية لتأمين مأدبة غداء ضخمة,أذن يتم أعطاءه كارت ذهبي هذا الكارت يحوي %5 تخفيض على القيمة النهائية أذن يجب أن يتصل بجدول المدفوعات وجدول الزبائن أردت أن اوضح من هذا أن كل نظام يمكن أن يختلف بالرغم من تشابه جوهر عمله وذلك بسبب أختلاف الأراء والأفكار والمتطلبات.

وفي النهاية يتم خلق قاعدة البيانات بالأعتماد على نموذج البيانات المنطقي وذلك بأستخدام بيئة أدارة قواعد البيانات مثلا Sql Server Oracle . في المقالة التالية سوف يتم توضيح بناء قاعدة البيانات بواسطة Sql Server 2008 R2 

Thursday, December 13, 2012

Command Pattern

التعريف :

في بعض الأحيان توجد الكثير من التطبيقات التي تنفذ العديد من العمليات على بيانات معينة,مثلا معالجة صورة معينة باستخدام عمليات ومنها (التدوير ,القطع , التلوين ,أضافة فعالية معينة), هذه العمليات تسمى Method , يأتي الأن السؤال كيف يتم تنظيم كل هذه الأوامر والعمليات ضمن تطبيق معين سواء تطبيق للمعالجة النصية او الرسومية.يتم هذا من خلال أستخدام Command Pattern وهو من الأنماط المتميزة لأجل تفاعلات واجهة المستخدم الرسومية (GUI),فهو يسمح وبسهولة بتغليف logic لأجل تنفيذ العمليات , ويستخدم بكثرة في البرامج التي تحوي الكثير من الأوامر والأزرار والبرامج التي تستخدم خاصية Undo/Redo.يعمل هذا النمط على تحويل جميع الطلبات Request الى كائنات Objects ويعطيها الى public interface .النمط يضمن ان كل كائن يتلقى الأوامر Command الخاصة به,ويقلل الأقتران بين المنادي Invoker الذي ينادي العملية والمستلم Reviser  هو الكائن الذي يتلقى الطلبية request وينفذها.لنأتي الى تعريف Gang of Four .

Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log 
requests, and support undoable operations.

يقوم النمط بتغليف جميع الطلبيات request  الأتية من المنادي invoker من خلال تحويلها الى كائنات وتمريرها الى المستلم receiver لأجل تنفيذها action , مما يزود سهولة بتعيين الأوامر الخاصة لكل كائن . 

التنفيذ:

يتم أولا شرح هيكلية النمط Command من خلال لغة UML وذلك من خلال Class Diagram التالي :

نشاهد من الرسم التالي ثلاث كائنات رئيسية :

Client : وهو مسؤول على خلق Concrete Command الذي يرث من الكلاس Command بمعنى عندما يتم الضغط على زر معين يتم مباشرة خلق Command محدد خاص به يسمى concrete command ويحمل الى receiver لأجل تنفيذه.

Invoker : يحدد متى يتم تنفيذ الأمر Command بمعنى المستخدم يضغط على الزر لأجل حمل الطلب الذي يحوي على Concrete Command الذي تم خلقه من قبل Client  الى receiver لأجل تنفيذه.

Receiver : وهو يحوي على كل المعلومات المنطقية لتنفيذ العملية Action  للأمر المحدد Concrete Command لأجل تنفيذه .

الكود:

الأن سوف نقوم بكتابة الكود علما ان الكود مكتوب بلغة #C وبأستخدام بيئة Visual Studio 2010 ,وأن الكود مكتوب لأجل تعريف هيكلية النمط Command وسوف يتألف من المكونات التالية :

خلق هيكلية نمط Command:

1. يتم خلق كلاس receiver لأجل حمل الطلب ومن ثم تنفيذ الفعالية المطلوبة action لأجل الطلب request.ونلاحظ احتوائه على جميع العمليات المنطقية.

2. ومن ثم يتم خلق كلاس command من نوع abstract وخلق كلاس concrete command يرث من كلاس command بحيث يقوم الأبن بتمرير كائن receiver الى الأب لأجل ضمان أن كل كائن يحوي الأوامر الخاصة به .ويحوي الكلاس Command على عملية Execute التي يتم توريثها الى كل Concrete command يتم خلقه لأجل تنفيذ العمليات المنطقية في receiver 

 3. الأن يتم خلق كلاس invoker لأجل تنفيذ ال command بحيث يتم تمرير الكائن Command عبر عملية موجودة بداخله لأجل خزن حالة Concrete Command وتوجد عملية أخرى لأجل التنفيذ خاصة ب Concrete Command  المحدد بحيث نضمن ان كل كائن ينفذ الأوامر الخاصة به ويحوي على receiver خاص به لأجل تنفيذ Action الخاصة بال Concrete Command .

 تنفيذ النمط Command:


نأتي الأن لشرح الخطوات :

A - يتم خلق متلقي لأجل الطلبات الذي سوف يقوم بحمل الطلب لتنفيذه
B - يتم خلق كائن Command وتمرير المتلقي receiver وهنا أستخدمت منهجية الكائنية المنحنى والتي تدعى polymorphic .
C - يتم تمرير receiver الى الأب Command لأجل خزن حالة المتلقي الخاصة ب Concrete Command
D - يتم خلق منادي invoker لأجل بدأ تنفيذ ال Command 
E - يتم تنفيذ عملية SetCommand والتي من خلالها يمرر الكائن Command لأجل خزن حالة Concrete Command وضمان ان كل كائن يحوي على المعلومات الخاصة به.
F - وبعدها يتم أستدعاء ExecuteCommand من خلال أستخدام الكائن invoker
G - يتم استدعاء العملية Execute الخاصة بال Concrete Command الذي خلق في البداية.
H - وأخيرا يتم تنفيذ المتلقي الذي يحمل الطلب والذي يقوم بتنفيذ فعالية الطلب  Action.

المخرجات :

أذن بعد تنفيذ الكود سوف يتم طباعة التالي : 


النتيجة :

يتم عكس نظرة برمجة كائنية المنحنى OOP من خلال استخدام Polymorphic و Inheritances .
.  يقوم بتغليف جميع الطلبات request في كائنات.
.  يستخدم بكثرة في التطبيقات التي تحوي Menu action مثل (Open,File,Save,Copy Edit).
.  جميع ال Concretes Commands ترث من كلاس رئيسي مجرد وهو Command ولهذا السبب يتم أستخدام هذا النمط في عمليات ال Undo/Redo وهي خزن الحالات السابقة والحالات الاحقة مثال: Microsoft Office يحوي الخاصية.

Sunday, December 9, 2012

Singleton Pattern

التعريف :

في بعض الأحيان نحتاج الى كائن وحيد او مايسمى بالمثيل (instance) لأجل كلاس (class) معين .بحيث يكون الكلاس مسؤول على خلق instance وحيد من نوع ثابت static وفي نفس الوقت يزود ممر مفتوح او نقطة عالمية(global point) لأجل الوصول الى instance المخلوق.هذه الهيكلية تعرف كنمط أساسي يسمى Singleton Pattern  وهو من أبسط أنماط
Gang of Four  .وحسب تعريف (GoF):

Ensure a class has only one instance and provide a global point of access to it.

القيود :

  • التأكد من خلق instance وحيد لأجل كلاس class.
  • تزويد نقطة او ممر مفتوح global point لأجل الوصول الى instance.

التنفيذ :

لأجل تنفيذ هيكلية نمط Singleton يتطلب :
  1. خلق كلاس ونسميه Singleton.
  2. خلق member من صنف static ويحمل نوع الكلاس.
  3. خلق Constructor  لأجل الكلاس من نوع Protected. 
  4. خلق method من صنف static من نوع عام public تقوم هذه العملية بأرجاع instance.
في الرسم التالي سوف نوضح الرسم الهيكلي للنمط بواسطة لغة UML 

 نلاحظ من الرسم وجود عضو instance_ وحيد يتم خلقه بواسطة العملية Instance الموجودة داخل الكلاس Singleton.

الكود : 

الأن سوف نقوم بكتابة الكود علما ان الكود مكتوب بلغة #C وبأستخدام بيئة Visual Studio 2010 ,وأن الكود مكتوب لأجل تعريف هيكلية النمط Singleton :

خلق هيكلية نمط Singleton :


الترقيم في الكود أعلاه يعكس مرحلة التنفيذ أعلاه .نلاحظ وجود الممر العالمي global point الذي يمكن رؤيته من جميع الكلاسات الموجودة ضمن التطبيق , ومن خلاله يتم خلق instance_ الوحيد وفي كل مرة يتم أستدعاء هذا الممر Instance يتم أرجاع instance_ الوحيد.

 تنفيذ النمط Singleton :

سوف يتم خلق كائنين من نوع كلاس Singleton وسوف نوضح الكود من خلال الشكل التالي الذي يوضح العملية الأجرائية لخلق الكائن s1 :

A - يتم خلق الكائن s1 وذلك بالذهاب مباشرةالى كلاس Singleton بحيث يذهب الى العملية Instance .
B - يتم التحقق من member المسمى instance_ هل هو يساوي null بمعنى غير مخلوق بالكامل او تم خلقه .
C - نعم يساوي null أذن يتم خلق instance_ بالكامل وتؤشيره الى كلاس Singleton .
D - يتم خلق Constructor  مباشرة .
E - وأخيرا يتم أرجاع الكائن مخلوق ومؤشر بالكامل الى s1.

العملية الأجرائية لخلق الكائن s2.

A - أيضا الذهاب الى Instance الموجودة داخل كلاس Singleton 
B - التأكد من الكائن instance_ هل محدد مسبقا ام يساوي null بمعنى غير محدد ومؤشر الى كلاس معين ,اذن النتيجة محدد مسبقا ولا يساوي null.
E - وبما أن الكائن instance_ مؤشر  يتم أرجاعه الى الكائن s2.

المخرجات :

أذن بعد تنفيذ الكود سوف يتم التأكد من الكائنين هل متساويين بمعنى يحملان نفس النوع ومؤشران الى نفس الكائن instance_ , وبالتأكيد سوف يكون الأخراج هو التشابه :

النتيجة :

  • خلق كائن وحيد على طول حياة التطبيق يوفر كفاءة ومساحة للذاكرة 
  • النمط جدا مفيد بالأتصال بقواعد البيانات بحيث يوفر ممر أتصال وحيد ومؤمن من الأختراق .
  • يستخدم بكثرة في Logger وذلك عندما تريد تسجيل معلومات في فايل معين ويكون التسجيل بخلق كائن وحيد ومن خلال ممر عالمي 

Friday, December 7, 2012

Levels Data Modeling

نمذجة البيانات تخدم غرضين أساسين : الغرض الأول يركز على المستوى العالي (height level) والذي يكون سهل الفهم من قبل المستخدمين وذوي المصلحةبمعنى قريب لفهم الأنسان وبعيد عن تعقيدات البرمجة وهيكلية البيانات مما يساعد على خلق اتصال مع المستخدمين وذوي المصلحة, الغرض الثاني يركز على المستوى المفصل بحيث يكون مفصل بشكل كافي لخدمة المطورين من خلال عمل مرجع متكامل (نموذج بيانات) والذي سوف يعتمد عليه المطورين لأجل تصميم وخلق قاعد البيانات وقد تم شرح مفهوم نمذجة البيانات وتم أخذ مثال بسيط في المقالة السابقة Data Modeling

والأن سوف أتطرق حول المستويات الرئيسية لنمذجة البيانات : 

1.المستوى الخارجي (External Level):

 عندما ننظر الى مستخدم معين في نظام معين نرى ان المستخدم الموجود ضمن مجموعة معينة يهتم بجانب محدد من النظام مثال: مستخدم يعمل محاسب (accounting) في مجموعة المحاسبين نرى أنه يهتم ببعض المعلومات التي يستفيد منها في عمله (معلومات المستخدم, معلومات الطلبية , معلومات حول الفواتير والدفع) ونشاهد مستخدم أخر يعمل جرد للمخزن (inventory)في مجموعة الجرد نرى أنه يهتم بمعلومات مختلفة ومنها(معلومات المنتجات , معلومات حول المخزن والواردات والصادرات ).أذن كل المستخدمين في مجموعة مستخدمين معينة(User group) يكونوا مهتمين بجانب معين من نموذج البيانات , ولذلك سمية بالمستوى الخارجي لأن جميع المستخدمين ينظرون الى النظام الذي سوف يخلق في المستقبل على أنه مكون من قطع وكل قطعة تضم معلومات معينة تهم مجموعة معينة محتوية على مستخدمين ينتمون اليها ويستفيدوا من البيانات الموجودة في القطعة المنتمية الى مجموعتهم.واقصد من هذا ان نموذج البيانات في هذا المستوى سوف يكون عبارة عن قطع وعند أكتمال هذه القطع التي سوف تملأ من قبل متطلبات المستخدمين سوف يتم لحم هذه القطع مع بعضهاالبعض لتكوين المستوى الثاني لنموذج البيانات وهو النوذج المفاهيمي.في هذا المستوى تجرى عدة لقاءات وأتصالات مع مستخدمين متواجدين في مجموعات معينة لمعرفة كافة أحتياجاتهم من البيانات ,أذن لنأتي الأن الى أخذ مثال يوضح المستوى الخارجي :يوجد لدي ثلاث مستخدمين وكل ستخدم ينتمي الى أحدى المجموعات الثلاث وهي المحاسبة , التسويق , جرد المخازن .



الرسم أعلاه يوضح المجموعات الثلات أضافة الى مجموعة البيانات التي حددها كل مستخدم منتمي الى مجموعة معينة , نشاهد المحاسبة المنتمية الى مجموعة المحاسبين مهتمة بمجموعة بيانات محددة تم تحديدها من قبلها ومن زملائها المنتمين الى مجموعة المحاسبين ,ونلاحظ المسوق المنتمي الى مجموعة التسويق أيضا يهتم بمجموعة بيانات مختلفة مع وجود بعض التشابه , واما جرد المخازن نرى أنه ايضا يهتم ببيانات أخرى تفيده في الجرد .لقد قمنا بخلق قاعدة ومرجع متكامل لمعرف أحتياجات المستخدمين وذوي المصلحة وشكلنا قطع بيانات وهي مجموعة البيانات التي حددها كل مستخدم منتمي الى مجموعة معينة هذه القطع تسمى نموذج البيانات الخارجي (External Data Model).الأن سوف نأتي الى دمج قطع البيانات في المستوى التالي .

2. المستوى المفاهيمي (Conceptual Level):

وهو مستوى يتألف من الأفكار والمتطلبات العامة التي ولدت في المستوى الخارجي , يركز على توليد مفهوم سهل وواضح المعالم للمستخدمين وذوي المصلحة.في هذا المستوى يتم تصوير الكائنات وانواعها وخصائصها أضافة الى توضيح القيود على هذه الكائنات وفي نفس الوقت نشاهد أختفاء تعقيدات هيكلية البيانات ويكون النموذج بعيد عن كل الأعتبارت الفيزيائية فهو يركز على توليد جسر مفهوم مع المستخدمين ولذلك يعتبر اداة أيصال سهلة الفهم.يعتمد المستوى المفاهيمي على نمذج البيانات الخارجي الذي تولد في المستوى السابق بحيث يقوم بترتيب مجاميع البيانات ضمن كائنات ذات تسمية محددة مثلا (الزبون) ومن ثم أخذ البيانات المتلائمة التي ولدت في المقاطع ووضعها داخل الكائن وهذ ما نشاهده في الرسم التالي:



نلاحظ من الرسم أنه تم توليد ثلاث كائنات وتم أخذ بعض البيانات من نمذج البيانات الخارجي ووضعها داخل الكائنات وذلك من خلال التركيز على سياق البيانات مثلا :معلومات الزبون في نمذج البيانات الخارجي ماهي؟ الجواب :(رقم الموظف,الاسم,العنوان,المدينة,رقم الهاتف )هذه البيانات تخص الزبون أذن يمكنني أن أولد كائن اسميه الزبون (Customer) يحوي معلومات الزبون ليكون أكثر فهم للمستخدم وذوي المصلحة ,وهكذا يتم تطبيق العملية على بقية البيانات.الأن وبعد أكتمال النموذج البيانات المفاهيمي يمكننا أن ننتقل الى المستوى التالي.

3. المستوى المنطقي (Logical Level):

يركز المستوى المنطقي على المفاهيم المفصلة والعلاقات التي تربط كائنات المستوى المفاهيمي لكنه يبتعد عن كل الأعتبارت التخزينية والفيزيائية.يعمل على تحديد نوعية قاعدة البيانات هل هي علائقية (relational) , هرمية(hierarchical) , شبكية (network).في عملنا سوف نركز على قاعدة البيانات العلائقية وهذا يؤدي بنا الى أن يكون نموذج البيانات يحتوي على خصائص الموديل العلائقي ومنها (الموديل العلائقي يمثل بعدين من الجدول مع وجود علاقة تربطهم ,واما البيانات تمثل كصفوف واعمدة مع وضع القيود العلأئقية).عند أكتمال نموذج البيانات المنطقي سوف يعطي لنا صورة نهائية لنظام قاعدة البيانات من حيث أكتمال الجداول والبيانات الداخلية للجدول أضافة الى جميع القيود ونوعية البيانات.نموذج البيانات المنطقي يخدم بالدرجة الأولة مطوري النظام بحيث يعطي لهم الشكل النهائي لقاعدةالبيانات التي سوف يتم تحويلها من قبلهم الى قاعدة بيانات كاملةومبرمجة ومنصبة فيزيائيا على القرص الصلب .لنرى الشكل التالي الذي يوضح النموذج البيانات المنطقي :



نلاحظ من الرسم تحول الكائنات المتولدة في النموذج المفاهيمي الى جداول علائقية محتوية على أعمدة وصفوف بحيث الأعمدة تمثل الخصائص مثلا رقم الزبون (Customer Number)أما الصف يحوي على بيانات الجدول مثلا  رقم الزبون يساوي 5 . ونلاحظ أضافة المفتاح ألاولي او مايسمى بالمفتاح الاساسي (Primary Key) لتجنب التكرار وتكوين رقم فريد لكل صف بيانات , أضافة الى مفتاح ثانوي او مايسمى بالمفتاح الأجنبي (Foreign Key)  وهو الجهة المقابلة للمفتاح الرئيسي لأجل ضمان أرتباط الجدول بالجدول الأخر وأضهار الأعتمادية بينهما.أذن بعد أكتمال المستوى المنطقي سوف يتولد نموذج بيانات منطقي يمكن تحويله الى قاعدة بيانات حقيقية.

4. المستوى الفيزيائي (Physical Level):

تتعامل معلومات المستوى الفيزيائي مع تنفيذ قاعدة البيانات على القرص  الثابت بحيث يتضمن على جميع الأعتبارات الفيزيائية ومنها أدارة خزن البيانات أدارة الصلاحية خزن وخلق وتعديل قاعدة البيانات (Database) وذلك بأستخدام بيئة أدارة أنظمة قواعد البيانات (Database management system) , النموذج الناتج من المستوى الفيزيائي يخدم مصممي ومنفذي قواعد البيانات ولا يمكن أن يستخدم للأتصال بالمستخدمين.يعتمد المستوى الفيزيائي على نموذج البيانات المنطقي بحيث يقوم بتحويل الجداول العلائقية الى قاعدة بيانات محتوية على فايلات وسجلات وبيانات وقيود ومفاتيح الى أخره.الرسم التالي يوضح  النموذج البيانات الفيزيائي :
  
وبعد أكتمال النموذج الفيزيائي سوف تتولد قاعدة بيانات حقيقية يمكن خزن البيانات والتلاعب بها .هذه المستويات الرئيسية التي من خلالها يتم أدراك بناء نموذج البيانات منذ أخذ المتطلبات من العالم الحقيقي الى أستخدام قاعدة البيانات الحقيقية.وفي الدروس اللاحقة سوف نتطرق حول العلاقات العلائقية و تفاصيل البناء الفيزيائي لقواعد البيانات.

Tuesday, December 4, 2012

WPF Application بناء التطبيق الأول

لبناء تطبيق بأستخدام WPF يجب اولا ان تقوم بقراءة المقالة السابقة Setting Up Visual Studio for WPF .بعد تنفيذ الخطوات المتتالية في المقالة السابقة  لأجل خلق تطبيق FirstWPFApp .سوف ينتج الشكل التالي:
نلاحظ اسم التطبيق قد ظهر مباشرة في أعلى النافذة الرسومية وأيضا ظهر داخل كود XAML .يمكنك تغير اسم التطبيق الى FirstWPFApplication من خلال محرر ال XAML بتغير محتوى Title او من خلال نافذة Properties Windows انظر الرسم التالي :



نقوم ألان ببناء زر (Button)واضافة مواصفات معينة, بداية 
 نقوم بسحب Button من مربع الأدوات (ToolBox)ووضعة على منطقة التصميم وأقصد النافذة.أنظر الرسم :


ومن ثم نأشر على الزر ونقوم باضافة بعض المواصفات له من خلال نافذة Properties window بحيث نظيف محاذاه افقية وعامودية أضافة الى الهامش.

بحيث نشاهد المحاذاة الأفقية (Horizontal Alignment)  تعطي محاذة للزر من الجهة اليسرى , أما المحاذاة العامودية (Vertical Alignment) تعطية من الأعلى ,وقمنا بأعطائه هامش (Margin) بالأرقام الظاهرة ويعطى الهامش من أجل أبعاد جميع الكائنات التي تقع حوله بأبعاد تحدد بأرقام.

الأن نقوم ببناء نافذةأكثر تعقيدا وهي نافذة الدخول الأمني الى اي نظام والتي  تحوي على أكثر من عنصر  بحيث تتألف من زر (Button) وكتلة نص (TextBlock) و مربع نص (TextBox)ومربع كلمة سر (PasswordBox) ولوحة او وعاء يدعى (StackPanel) لأجل المحافظة على العناصر في كتلة واحدة, وهذه العناصر والتي تسمى (Controls) ترتب جميعها داخل شبكة (Grid)متألفة من صفوف وأعمدة يتم تحديدها.لنأتي الى الخطوات الرئيسية لبناء النافذة:



1. نقوم بتصغير حجم النافذة الرئيسية وذلك بتقليل الأرتفاع والعرض.



2. رسم شبكة الأعمدة يتم بطريقتين اما بكتابة الأكواد XAML يدويا او من خلال استخدام الماوس في تحديد الأعمدة والصفوف واليا سوف يولد الكود ,ويمكن عمل هذا وذلك بتأشير الشبكة المحيطة بالنافذة او التأشير على Grid في محرر XAML ومباشرة سوف يتحدد الأطار المحيط بالنافذة وهنا يأتي دور الماوس بتحديد الأضلع والصفوف التي تحتاجها ويمكنك تغير الأبعاد يدويا.


أذن بعد توليد الصفوف يمكنك أيضا ان تولد الأعمدة ونحتاج في تطبيقنا عامود واحد يفصل TextBlock عن TextBox .


 بعد أكمال الشبكة نعمل على أدخال Controls في الصفوف والأعمدة .

3 . نقوم بوضع TextBlock  عدد 2 لأجل أن نبين تسمية الحقل المجاور:



4.  نقوم الأن بوضع حقول الأدخال وذلك بوضع TextBox و  PasswordBox الأول لأجل الأسم الكامل والثاني لأجل أدخال كلمة السر.



5. نقوم بأضافة زر (OK)لأجل الموافقة بعد أدخال الأسم الكامل وكلمة السر وزراخر (Cancel) في حالة الغاء الدخول , ويتم وضع الزران داخل وعاء او لوحة لتكوين قطعة كاملة.



6. نأتي الى وضع الأحداث , يجب أن نعرف أن كل Controls يحوي على Events وهي تفاعل مابين المستخدم والواجهة الرسومية مثلا : عند قيام المستخدم بأدخال الأسم الكامل ومن ثم كلمة السر يأتي المستخدم الأن ويضغط على زر OK لأجل التأكد من صحة الأسم وكلمة السر والدخول الى النظام الضغط على الزر يسمى حدث , وهناك الكثير من الأحداث التي تدعمها مكتبة Net. ,ويتم خلق حدث ما من خلال طريقتين الأولة عن طريق الظغط مرتين على الزر OK فيفتح مباشرة الحدث في Code behind ,الطريق الثانية عن طريق Properties Window  يتم أختيار الحدث من قائمة الأحداث كما مبين بالرسم:
7. نأتي الى أخر خطوة تعبئة الكود الداخلي للحدث , سوف اقوم بوضع رسالة تخرج للمستخدم في حالة الضغط على زر OK وذلك بمساعدة MessageBox , وفي حالة الضغط على الزر Cancel يتم أنهاء البرنامج مباشرة من دون أظهار اي شيئ . يتم أستخدام لغة #C .


الرسم التالي يظهر تنفيذ التطبيق وأضهار الرسالة في حالة الضغط على زر OK :