106K Views

عقيدة الكائنات الوكيل و تحميل كسول

المذهب هو الكائن العلائقية مخطط (ORM) أن يجلس على رأس قاعدة بيانات قوية طبقة تجريد (DBAL). عندما كنت تعمل مع Symfony (+ عقيدة) بينما أنت لا بد أن تأتي عبر هذا المبدأ الكائنات الوكيل.

public function setSubjects(\ProxyBundle\Entity\Subjects $subjects = null)
{
    $this->subjects = $subjects;

    return $this;
}

إذا كنت من أي وقت مضى ولدت الكيان الذي يرتبط مع كيان آخر ، و قد اتخذت نظرة على الحجج الدالة المرتبطة مع هذا الكيان في إنشاء كيان ملف كنت قد لاحظت إضافية مائل قبل نوع الإعلان عن وظيفة الحجة. في هذه الحالة, ‘\‘ قبل ‘ProxyBundle\Entity\Subjects‘. إذا كنت مثلي, كنت قد تساءلت عن ذلك مائل, أنت بحاجة إلى معرفته عن عقيدة الوكيل الكائنات لفهم الغرض.

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

عقيدة الكائنات الوكيل:

عقيدة الوكيل الكائنات تعتمد في المقام الأول على اثنين من أنماط التصميم: الوكيل نمط, تحميل كسول نمط.

وفقا documentation:

وكيل الكائن هو كائن في مكان أو استخدامها بدلا من “ريال مدريد” الكائن. وكيل كائن يمكن أن تضيف سلوك الكائن بروكسي دون هذا الكائن أن تكون على علم به. في العقيدة 2, الوكيل الكائنات تستخدم لتحقيق العديد من الميزات ولكن أساسا شفافة كسول التحميل.

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

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

كما قلت من قبل, هذا يحدث شفافة تماما إلى التطبيق الخاص بك يرجع ذلك إلى حقيقة أن الوكيل يمتد كيان الطبقة. لذلك كلما كنت لا تزال قائمة أو الاحمرار الكيانات إلى قاعدة البيانات, كنت لا داعي للقلق حول ما إذا كان لديك كائن وكيل أو الفعلية الكيان. يمكنك الرجوع Doctrine Documentation لمعرفة المزيد عن الداخلية من عقيدة و كيفية التعامل في تحسين الاستفسارات الخاصة بك.

لماذا الوكيل الكائنات ؟

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

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

بشكل افتراضي ، عندما جلب كيان من قاعدة البيانات التي initialised ، ولكن الكيانات المرتبطة بها جزئيا فقط تحميل. وعلاوة على ذلك, إذا كنت تعرف معرف قاعدة الكيان يمكنك جزئيا تحميله دون تهيئة أي من خصائصه. للقيام بذلك:

$entityManager = $this->getDoctrine()->getManager();
$user = $entityManager->getReference('ProxyBundle:User', 1);

هنا ستكون الإعداد إشارة إلى الهدف الكيان.

افتراضي الكيانات المرتبطة بها كسالى تحميل, وكما قلت من قبل. ومع ذلك ، إذا كنت تتطلب منهم أن يكون مهيأ تماما, يمكنك ببساطة تعيين fetch: EAGER, كما هو مبين أدناه:

ProxyBundle\Entity\User:
    type: entity
    oneToOne:
        subjects:
            targetEntity: ProxyBundle\Entity\Subjects
            fetch: EAGER
            joinColumn:
                name: subjects_id
                referencedColumnName: id
                onDelete : cascade
    table: null
    repositoryClass: ProxyBundle\Repository\UserRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        firstName:
            type: string
            length: 255
        lastName:
            type: string
            length: 255
            nullable: true
        age:
            type: integer
        gender:
            type: string
            length: 255

مع fetch: EAGER, بدلا من أن تكون كسول تحميل, الكيانات المرتبطة بها وسوف يتم تهيئة بشكل كامل.

 

جزئية الكائنات:

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

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

يمكنك معرفة المزيد حول جزئية الكائنات here.

Category(s) Doctrine uvdesk
. . .

Comment (1)

Add Your Comment

  • Roman Malovanyi
    Thanks, great article!
  • css.php