2013-03-27 2 views
2

В моем приложении есть Клиенты и Курьеры. Клиент может отправить запрос на доставку курьеру только в том случае, если этот Курьер в настоящее время находится в сети, и оба пользователя находятся в одном месте.Я правильно использую свою Службу с моими сущностями и мапперами. Правильно ли моя бизнес-логика?

Когда Клиент хочет отправить запрос на доставку курьеру, мой DeliveryRequest имеет метод sendDeliveryRequest(Request request), который вызывается из Controller.

public function sendDeliveryRequest(Request $request) { 

    $customer = $this->recognitionService->getUser(); 

    $courier = $this->entityFactory->build('Courier'); 
    $courier->setId($request->post('courierId')); 
    $courierMapper = $this->mapperFactory->build('Courier'); 
    $courierMapper->fetch($courier); 

    $deliveryRequest = $this->entityFactory->build('DeliveryRequest'); 

    $someRequestedItems = array(); 
    $deliveryRequest->sendRequest($customer, $courier, $someRequestedItems); 

} 

До сих пор в моем sendRequest(Customer $customer, Courier $courier, Array $items) метод у меня есть:

public function sendRequest(Customer $customer, Courier $courier, Array $items) { 

    // Check if the couriers account is active 
    if(!$courier->isActive()) { 
     return 'courier not active'; 
    } 
    // Check if the courier is online 
    if(!$courier->isOnline()) { 
     return 'courier not online'; 
    } 
    // Check the status of the customers location, active/inactive 
    if(!$customer->getLocation()->isActive()) { 
     return 'customers location disabled'; 
    } 
    // Check if the customer and the courier live in the same location 
    if(!$customer->sameLocationAs($courier)) { 
     return 'customer and courier in different locations'; 
    } 
    // More checks 

} 

Для меня до сих пор это выглядит нормально, и работает хорошо, но я не уверен на 100%, если я правильно делать бизнес-логику, особенно !$customer->sameLocationAs($courier).

Этот метод использует поставляемый объект $courier, чтобы получить это местоположение курьеров (которое является объектом с id) и сравнивает его с местоположением Клиентов, чтобы проверить, находятся ли они в одном месте. Он работает отлично, но я не уверен, что это лучший способ проверить, находятся ли оба пользователя в одном месте или нет. Действительно ли это бизнес-логика?

Кроме того, элементы в $deliveryRequest, их данные (id, quantity) будет в $request объект передается от Controller поэтому я буду создавать каждый Item в Service и поместить их в массив и передать массив $customer и $courier до sendRequest(). Это означает, что я должен делать проверки (проверьте, не было ли введенное количество не больше значения базы данных количества и т. Д.) В этом методе, - это правильный путь или это плохо?

Я выполняю свои проверки/правильность и правильное место/слой в своем приложении?

Любая помощь будет большой благодарностью.

ответ

0

Для первого вопроса, я бы сказал, что ваш метод «sameLocationAs» действителен. Другая возможность заключалась бы в создании класса Util со статическими методами и который может предоставлять услуги между классами.

Это работа модели, чтобы проверить, если элементы действительны (не контроллер), так что у вас есть две возможности:

  1. , как вы хотите сделать

  2. при создании объект Item, вы можете проверить правильность объекта в классе элемента или шаблон шаблона наблюдателя. (Трудно и нет необходимости в том, что интересно, если вы хотите, чтобы автоматически сохранять объекты)

  3. использовать класс валидации, который будет выполнять работу (это было бы слишком хорошо)

Было бы хорошо, если бы код вашего служебного кода относится только к интересам службы.

Но то, что вы сделали правильно, я бы сказал, что это действительно так, вы должны идти чуть дальше

Смежные вопросы