2013-09-29 3 views
0

코드를 최소화해야합니다.switch() 문을 제거하기 위해 다른 클래스에 메서드를 추가하십시오.

나는 세 클래스가 있습니다 : Customer, CourierOrder입니다.

class Customer extends AbstractRegisteredUser implements CustomerInterface { 
} 

class Courier extends AbstractRegisteredUser implements CourierInterface { 
} 

class Order extends AbstractEntity implements OrderInterface { 

    private $customer; 
    private $courier; 

    public function isUserAssociated(RegisteredUserInterface $user) { 

     switch($user->GetEntityType()) { 
     case 'Customer': 
      return $this->isCustomerAssociated($user); 
     case 'Courier': 
      return $this->isCourierAssociated($user); 
     } 

     return false; 
    } 

    private function isCustomerAssociated(CustomerInterface $customer) { 
     return ($this->customer->getId() === $customer->getId()); 
    } 

    private function isCourierAssociated(CourierInterface $courier) { 
     return ($this->courier->getId() === $courier->getId()); 
    } 
} 

당신은 내가 내가 같이 그 일을 함께 와서 그렇게해야하지 선호하는 거기에 switch 문을 볼 수 있듯이 :

class Customer extends AbstractRegisteredUser implements CustomerInterface { 
    public function isAssociatedWithOrder(OrderInterface $order) { 
     return ($this->getId() === $order->getCustomerId()); 
    } 
} 

class Courier extends AbstractRegisteredUser implements CourierInterface { 
    public function isAssociatedWithOrder(OrderInterface $order) { 
     return ($this->getId() === $order->getCourierId()); 
    } 
} 

내가 지금 isUserAssociated을 제거 할 수 있습니다, Order 클래스의 isCustomerAssociatedisCourierAssociated 메서드와 그 추한 switch 문.

는 지금은 고객이 주어진 순서와 관련되어 있는지 확인하고자 할 때 나는

// $user could be a customer or courier object. 
if(!$user->isAssociatedWithOrder($order)) { 
} 

대신

if(!$order->isUserAssociated($customer)) { 
} 

의 그것은 적은 코드, 더 적은 방법을 필요로하는 솔루션입니다 수행 눈에는 더 쉬워 보이지만 이것을하는 것이 맞습니까? CustomerCourier 클래스는 Order에 대해 알지 못합니까? 책임을지지 않아야하는 수업에 책임을 부여하는 것으로 간주 될 수 있습니까?

도움을 주시면 감사하겠습니다.

+3

이 질문은 작업 코드에 대한 의견을 묻기 때문에 주제와는 거리가 먼 것처럼 보입니다. [CodeReview.SE] (http://codereview.stackexchange.com/)에 대한 도움을 얻을 수 있습니다. – psubsee2003

답변

0

나는 해결책이 유효하다고 생각합니다. 더 많은 사용자 유형이 나올 때 어떻게 될까요? 끊임없이 증가하는 switch 문과 메서드로 주문 클래스를 습득합니다.

또한 주문과 관련된 사용자가 주문이 아닌 사용자의 관심사이기 때문에 우려의 분리가 증가합니다.

관련 문제