سؤال

بدأت العمل مع OOP لبناء موقع من البيانات التي تم إنشاؤها المستخدم.

هناك أنواع مختلفة من البيانات القادمة من فصولي. لدي وظائف تحصل على قائمة البيانات من قاعدة البيانات، والوظائف فقط لتحديد عنصر واحد من تلك القوائم. علي سبيل المثال

function Get_Article($aid); //Gets an article
function Get_Users_Articles($uid); //Gets a multidemsional array of the users 
                                   //articles
function Get_Latest_Articles(); //Self explanatory by now
function Get_Local_Articles($zip); //Gets articles written by local users
function Get_Local_Users($zip); //Gets all local users

function Get_All_Article_Comments($aid); //Gets a multidimensional array of the 
                                     //comments written for an article
function Get_Article_Comment($cid); //Gets a single article comment

الآن، كيف يجب أن أقوم بإعداد فصري لتنظيم هذه الوظائف. يجب أن أضعهم جميعا في نفس الفصل، أو يجب علي فصل التعليقات من المقالات، أو ربما فصل الوظائف التي استرجع مقالة واحدة / تعليق واحد من تلك التي تسترجع قائمة المواد / التعليقات. قد أضيف المزيد من الأشياء إلى الموقع في وقت لاحق السماح بالتعليقات، لذلك كنت أفكر فقط في فصل جميع وظائف التعليق من الآخرين. أيضا، تعمل جميع الوظائف "المحلية" جميع الوظيفة نفسها التي تنفذ الرياضيات، لذلك يجب أن أقوم بتجميع تلك معا، أو ربما استخدم الميراث ... أي اقتراح ؟؟؟

أثناء وجوده في موضوع OOP، لدي فئة مستخدم تبدو وكأنها ... Private $ المستخدم = صفيف ()؛

public function Get_User_Data($uid){
  //get user data from database
  return $this->user;
}

public function Set_User_Data($user_array){
  $this->user = $user_array;
}

public function Add_User(){
  //INSERT data from $this->user into the database 
}

الآن هل يرى أي شخص أي شيء خاطئ بالطريقة التي يبدو فيها هذا، في الغالب، إذا قمت بتعيين user_data كمعلمة لوظيفة Add_User، بدلا من إدراج متغيرات الأعضاء؟

هل كانت مفيدة؟

المحلول

بادئ ذي بدء، يجب أن تفهم أن تناول وظائف النمط الإجرائي القديم الخاص بك وتف غابة لهم داخل الكائنات لا يجعل من وجوه الكائنات الموجهة إلى كائنات الكود، فهذا يعني أنك تكتب شفرة إجرائية أكثر تعقيدا ومثيرة للغاية.

ثانيا، أود أن أوصي بشدة، في الواقع لا أستطيع أن أكون مضنيا للغاية في توصياتي التي تستغرق بعض الوقت لدراسة أطر PHP المختلفة على الأقل. على الرغم من أنك قد لا تستخدم أي منهم أبدا، أشعر أنني آمنة للغاية في ضمان أن دراسة أي منها سيعطيك فهم أفضل على المبادئ الموجهة للكائنات وتصميم تطبيق جيد بشكل عام. في حال لم تر أيه من قبل، يجب على التالي إعطاء مكان للبدء:

  • zend framework.
  • سيمفونيا
  • cakephp.
  • الإطار الشمسي

بالإضافة إلى ذلك، إذا لم تسمع مطلقا من مارتن فاولر أو أنماط بنية تطبيق المؤسسات، فسوف أوصي بشدة بحدوث نسخة وتلتقط نسخة. كتب حرفيا الكتاب الذي قدم الأنماط الأساسية التي تستخدمها في كل إطار ويب مشهور.

الكثير بالنسبة لي "قراءة الاستجابة اليدوية" :-P

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

قد تبدو فئة مستخدم قذيفة شيء مثل هذا:

class User extends Active_Record {

public function find() {}

/**
    Single function performs inserts and updates for the object
**/
public function save() {}

public function delete() {}

public function getArticles() {}

public function getComments() {}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top