استرداد التابع/الأصل من داخل طريقة كيان المجال

StackOverflow https://stackoverflow.com/questions/1401323

سؤال

كيف يمكن للمرء أن يقوم باسترداد كائن تابع/أصلي من كيان ما.

$person->getAddress();

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

قد يعني القيام بذلك أن الكائن نفسه يجب أن يكون على علم بأن العنوان هو كائن كيان/قيمة مرتبط به.سبب رغبتي في هذا النوع من بناء الجملة هو أنه سيبدو نظيفًا في طبقة العرض التقديمي.

ستبدو فئة الشخص كما يلي:

class Person {
  protected $_domain = null; // domain is assigned when instantiated
  protected $_data = array('name', 'address');
  protected $_relations = array(
    'address'=>array(
      'class'=>'Address'
    )
  );
  protected $_retrievedRelations = array();
  public function getAddress() {
    if (array_key_exists('address', $this->_relations) ) {
      if (!array_key_exists('address', $this->_retrievedRelations) ) {
        $this->_retrievedRelations['address'] = $this->_domain->getAddress($this->_data['address']);
      }

      return $this->_retrievedRelations['address'];
    }

    return $this->_data['address'];
  }
}

فهل من المقبول استخدام كائن $domain داخل طريقة getAddress والاحتفاظ بمعلومات العلاقة في فئة الشخص؟

أرجو الإجابة لأنني كنت أبحث في كل مكان عن إجابة.

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

المحلول

ونلقي نظرة على Zend_Db_Table العلاقات . أنها تسمح يفعل ذلك بالضبط، وأكثر من ذلك بكثير. يمكنك فقط استخدام Zend_Db_Table <م> اليوم ، بدلا من محاولة للتوصل إلى تنفيذ الخاص بك، أو يمكنك دراسة زند الإطارية <لأ href = "http://framework.zend.com/download/latest" يختلط = "نوفولو noreferrer"> كود لقراراتهم تصميم WRT لأسئلتك. انها تماما مصدر موثوق به.

نصائح أخرى

أولاً ، أعتقد أن عنوان السؤال ليس واضحًا للغاية ، ثانياً لست متأكدًا تمامًا من أنني أفهم ما الذي يتم طرحه ...في رأيي، يجب تعديل كل من العنوان والمنشور لتنظيفه قليلاً.

يبدو أن المنشور يحتوي على 5 أسئلة (إذا جاز لي إعادة صياغتها):

  1. كيف يمكن للمرء أن يقوم باسترداد كائن تابع/أصل من كيان؟
  2. يكون $person->getAddress() طريقة جيدة لاسترداد كائن العنوان لشخص من قاعدة البيانات؟
  3. إذا كانت هذه طريقة جيدة للقيام بذلك، فكيف سيبدو الكود؟
  4. هل من المقبول استخدام كائن $domain داخل طريقة getAddress؟
  5. هل من المقبول الاحتفاظ بمعلومات العلاقة في فئة الشخص؟

بقدر ما تذهب الإجابات:

  1. في هذه الحالة $person->getAddress() يبدو اختيارًا جيدًا، كما تعلمون، لطيفًا ووصفيًا.؛-)
  2. لا أرى مشكلة:شخص لديه أ العنوان، للحصول على هذا العنوان الذي تطلبه من الشخص هو.
  3. يبدو أن مثال التعليمات البرمجية الموضح يجيب على هذا السؤال، على الرغم من أنه مزدحم بعض الشيء.كنت سأجعل العنوان كائن عضو، لكن بخلاف ذلك فهو في الغالب نفس الشيء
  4. & 5.أود أن أقول إنها في الغالب مسألة ذوق وأولوية واعتماد على التصميم.في الواقع لا توجد إجابة واضحة على هذا.أيضًا، هل نتجادل حول دلالات هنا أم سيناريو واقعي؟

بعض التعليمات البرمجية لتتوافق مع الإجابة رقم 3:(لم أتمكن من تشغيله بشكل صحيح ضمن القائمة)

class Person {
    protected $_domain = null; // domain is assigned when instantiated
    protected $_address;        // object

    public function getAddress() {
        if (!isset($this->_address) ) {
            $this->_address = $this->_domain->getAddressForPerson($this); // assuming $this contains some sort of ID
        }
        return $this->_address;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top