코드를 최소화해야합니다.switch() 문을 제거하기 위해 다른 클래스에 메서드를 추가하십시오.
나는 세 클래스가 있습니다 : Customer
, Courier
및 Order
입니다.
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
클래스의 isCustomerAssociated
및 isCourierAssociated
메서드와 그 추한 switch 문.
는 지금은 고객이 주어진 순서와 관련되어 있는지 확인하고자 할 때 나는
// $user could be a customer or courier object.
if(!$user->isAssociatedWithOrder($order)) {
}
대신
if(!$order->isUserAssociated($customer)) {
}
의 그것은 적은 코드, 더 적은 방법을 필요로하는 솔루션입니다 수행 눈에는 더 쉬워 보이지만 이것을하는 것이 맞습니까? Customer
및 Courier
클래스는 Order
에 대해 알지 못합니까? 책임을지지 않아야하는 수업에 책임을 부여하는 것으로 간주 될 수 있습니까?
도움을 주시면 감사하겠습니다.
이 질문은 작업 코드에 대한 의견을 묻기 때문에 주제와는 거리가 먼 것처럼 보입니다. [CodeReview.SE] (http://codereview.stackexchange.com/)에 대한 도움을 얻을 수 있습니다. – psubsee2003