سؤال

CH 7.6 من التعليمات البرمجية الكاملة 2 يربكني ، لقد أرفقت بعض عينة رمز (في PHP) تخبرني ما هو النمط الأفضل؟ أو اقترح شيء أفضل؟ شكرًا

نمط 1

public function register($user, $pass) {
 if($this->model->isRegistered($user)
 {
  return false;
 }
 else if($this->twitter->login($user, $pass))
 {
  return $this->model->addUser($user, $pass);
 }

 return false;
}

النمط 2

public function register($user, $pass) {
 if($this->model->isRegistered($user)
 {
  return false;
 }

 $this->twitter->login($user, $pass);
 if($this->twitter->isLoggedIn())
 {
  return $this-model->addUser($user, $pass);
 }

 return false;
}

النمط 3

public function register($user, $pass) {
 if($this->model->isRegistered($user)
 {
  return false;
 }

 $status = $this->twitter->login($user, $pass);
 if($status)
 {
  return $this->model->addUser($user, $pass);
 }

 return false;
}

أقوم حاليًا باستخدام النمط 1. على الرغم من أنني لست متأكدًا مما إذا كان هذا هو الصحيح.

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

المحلول

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

function action()
{
    if ($guard_condition1)
        return $failure;

    if ($guard_condition2)
        return $failure;

    do_action();
    return $success;
}

لذلك سأعيد كتابة رمزك على النحو التالي:

public function register($user, $pass)
{
    if ($this->model->isRegistered($user))
        return false;

    if (!$this->twitter->login($user, $pass))
        return false;

    return $this->model->addUser($user, $pass);
}

على أي حال ، إذا كنت بحاجة إلى رأي حول ما اقترحته ، فسأصوت للأناقة 3.

نصائح أخرى

في النمط 1 "إذا" و "آخر إذا" تم استخدامه في ظروف مختلفة ، لذلك لا معنى له.

في النمط 2 خطوط:

 $this->twitter->login($user, $pass);
 if($this->twitter->isLoggedIn())

من الصعب للغاية القراءة في بعض المواقف ولكنها مناسبة.

بالنسبة لي أفضل واحد هو النمط 3.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top