الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الحلقة السادسة : Data Model Pattern

مغلق
بدأه الحسين في 6 مارس 2005 · 0 رد · 840 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1

بسم الله الرحمن الرحيم

مقدمة :

تعلمنا في الحلقة السابقة (DataAccess Pattern) النقاط التالية :

- كيفية عمل طبقة خاصة للتعامل مع مصدر البيانات Data Access Layer -- DAL

- فائدة عمل طبقة منفصلة تقوم بعزل البرنامج عن مصدر البيانات Data Source , تكون هي المسئولة عن إجراء الإتصال المباشر مع مصدر البيانات

إنطلاق من الحلقة السابقة

دعونا نري ماذا حدث بعدما تمكنا من عمل الطبقة الخاصة للتعامل مع مصدر البيانات DAL

- بالفعل فقد تمكنا من فصل البرنامج الذي نقوم بإعداده عن مصدر البيانات , وأصبحت الطريقة الوحيدة لنا حتي نتمكن من التعامل مع مصدر البيانات هي المرور علي طبقة DAL

وإستخدامها للوصول إلي مصدر البيانات (مثلا قاعدة بيانات mysql) , ولكن بهذا لم ينتهي الأمر بعد

لكن ماذا ينتظرنا بعد ذلك !!!

- دعونا نتخيل الأن أننا نقف أمام فورم Windows Form أو صفحة ويب Web Form تقوم بوظائف ما ومن ضمن هذه الوظائف التعامل مع مصدر البيانات

دعني أتركك تفكر في السؤال التالي : هل تعتقد أننا سوف نقوم بإجراء الوظائف الخاصة بالتعامل مع مصدر البيانات بدون المرور علي طبفة DAL ؟

بالطبع لن نفعل ذلك , لكن هل تعتقد أننا سوف نقوم بإستدعاء الوظائف الموجودة بطبقة DAL من داخل صفحة الويب بطريقة مباشرة ؟ (Y/N) :)

+ ربما تكون إجابتك بنعم : وربما تشتد علي بالقول قائلا ولما هذا السؤال الذي إستفذني , إذا تمهل معي قليلا ولا تتعجل

+ أو ربما تحاول التفكير بشكل جديد وتقول لا , وربما قد دار بذهنك هذا الإستفسار

فعلا لماذا لا نقوم بعمل طبقة جديدة لا تختص بالتعامل مع مصدر البيانات بل تكون المسئولة عن التعامل مع البيانات Data فقط بغض النظر عن مصدر تلك البيانات Data Source

ولكن كيف يتم هذا ؟ , إذا تابع معي الحلقة التالية

الحلقة السادسة : Data Model Pattern أو Business Logic أو نمط نموذج التعامل مع البيانات

يختص هذا النمط بعمل طبقة خاصة للتعامل مع البيانات Data فحسب , بغض النظر عن مصدر تلك البيانات

فمثلا دعنا نتخيل الحالة التالية : أننا سوف نقوم بعمل موقع ويب يتعامل مع قاعدة بيانات ما(مصدر بيانات) وتحتوي هذه القاعدة علي جدولين باسم table1 و table2

فكيف لنا أن نحقق مفهوم هذا النمط في مثل تلك الحالة ؟

1 - سوف نقوم بعمل طبقة خاصة للتعامل مع مصدر البيانات وهي طبقة DAL (كما قد شرحت سابقا )

2 - سوف نقوم بعمل طبقة خاصة للتعامل مع البيانات Data علي النحو التالي :

+ سوف نمكن تلك الطبقة من الوصول لمصدر البيانات من خلال المرور علي طبقة DAL

+ ثم بعد ذلك نقوم بإعداد نماذج البيانات Data Model أو بمعني أخر الفئات classes الخاصة بالتعامل مع البيانات

فعلي سبيل المثال سوف نقوم بعمل فئة باسم table1 تكون المسئولة عن جلب البيانات من الجدول table1 الموجود بمصدر البيانات , وبالطبع لن تقتصر وظائف تلك الفئة علي جلب البيانات فحسب بل سوف نمكنها من عمل وظائف أخري تتم علي هذا الجدول مثل الحذف والإضافة والتعديل والبحث إلخ حسب الحاجة لذلك

, وهكذا يتم عمل طبقة كاملة من الفئات تكون مسئولة فقط عن التعامل مع البيانات فحسب ولا تقوم بالتعامل مع مصدر البيانات بشكل مباشر إلا من خلال طبقة DAL .

ولكن ما فائدة هذا النمط

كما كنا قد أشرنا أن فكرة هذا النمط تعتمد علي عمل طبقة خاصة للتعامل مع البيانات مما يزيد من كفاءة صيانة البرنامج نتيجة عدم دمج هذه الوظائف داخل البرنامج

كما أنه تخيل معي الأمر التالي , أنك بعدما أنتهيت من تصميم الموقع الذي تقوم ببرمجة مثلا طلب منك أن تحوله إلي برنامج لسطح المكتب Desktop application

أعتقد أنك في مثل هذه الحالة لو إتبعت تطبيق هذا النمط فسوف تواجهك فقط مشكلة تحويل النماذج وشاشات الموقع إلي فورم فقط , ثم تقوم بدمج طبقة DAL وطبقة التعامل مع البيانات السابقة بدون تغيرات تذكر

وربما هذه الحالة تكون واضحة أكثر لمبرمجي الجافا والدوت نت.

مثال تطبيقي بسيط

نريد تصميم صفحة باسم productPage نقوم من خلالها بتعبئة محتوي جدول ال Products التالي

الموجود بقاعدة البيانات test لمزود خدمة mysql

#
# Table structure for table `products`
#
CREATE TABLE products (
 PRODUCTID int(11) NOT NULL auto_increment,
 PRODUCTNAME varchar(255) NOT NULL default '',
 PRIMARY KEY  (PRODUCTID)
) TYPE=MyISAM;

الحل

سوف نعتمد في حلنا هذا علي طبقة DAL التي تم نقاشها بالحلقة السابقة

لذلك يتبقي لنا إعداد طبقة البيانات ولذلك تابعي معي المخطط التالي

DataModelPattern.gif

كما يتضح بالشكل السابق فقد قمنا بعمل التالي :

- تم تكوين فئة باسم ModelBase وتتميز هذه الفئة بالتالي :

+ هي الفئة الأم base class لجميع الفئات التي تندرج داخل الطبقة الخاصة بالتعامل مع البيانات

+ تتميز بوجود متغير خاص private field باسم $dao (إختصار Data Access Object) وهو كائن يتم إنشائه من الفئة DataAccess

وهي الفئة الموجودة بالطبقة DAL الخاصة بالإتصال المباشر مع مصدر البيانات , وبالطبع يتم إستخدام هذا الكائن من داخل الفئة ModelBase حتي نتمكن من إجراء الإتصال بمصدر البيانات

وهي كما يلي

<?php
include_once "DataAccess.php";

/**
 *  the Model Base Class
 */
class ModelBase
{
   /**
    * Private
    * $dao an instance of the DataAccess class
    */
    var $dao;

   /**
    * constructor
    */
    function ModelBase() {
        $this->dao = new DataAccess("localhost", "root", "", "test");
    }

}
?>

- ثم قمنا بعد ذلك بإعداد أول فئة خاصة بالتعامل مع البيانات وهي الفئة products وتتميز بالتالي :

+ هي فئة مشتقة من الفئة الأم ModelBase

+ تتميز هذه الفئة بإجراء التعامل مع بيانات الجدول المسمي products ومن ضمن تلك العمليات

* الوظيفة addProduct : تمكننا من إضافة سجل جديد في جدول المنتجات

وهكذا يمكننا إنشاء وظائف أخري تتم علي بيانات جدول المنتجات داخل تلك الفئة (مثلا حذف منتج , تعديل أو البحث أو جلب المنتجات الجديدة إلخ)

وهي كما يلي

<?php
include_once "ModelBase.php";

class products extends ModelBase
{
   /**
    * addProduct
    * @param productName string
    * @return void
    */
	function addProduct($productName) {
  $sql = "insert into products(productName) values('$productName')";

  $this->dao->execute($sql);
	}

}
?>

بعد الإنتهاء من إعداد هذه الطبقة

نقوم باستخدامها في الصفحة المسئولة عن تعبئة جدول المنتجات التالية

productPage.php

<?php
include_once "lib\products.php";

// at post back
if( count($_POST) > 0 ) {
	$productBusObject = new products();
	$productBusObject->addProduct( $_POST["productName"] );

	echo "okay product added successfully";
}
?>
<form method="post">
 enter new product :
 product name : <input type="text" name="productName">
 <input type="submit" value=" add ">
</form>

أرجو من الله أن يكون هذا المثال قد زاد الأمر وضوحا

إلي اللقاء مع الحلقة الأخيرة لهذه السلسلة بإذن الله تعالي

وبالله التوفيق

والسلام عليكم ورحمة الله وبركاته

Data_Model_Pattern_Example.rar

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

هذا الموضوع مغلق.

مواضيع مشابهة