Избавление от жирного контроллера
Итак, я использую Zend Framework, и у меня есть вопрос, связанный с предотвращением контроллеров с помощью одного из моих действий. В основном я нормализую файл CSV в моей базе данных.
Это означает, что мне нужно получить канал, а затем использовать мою модель.
Захват ленты только для того, чтобы показать, как он работает, но теперь это Action Helper.
Я использую шаблон Data Mapper с Zend Framework. Я ненавижу , что я делаю это в моем контроллере. Все эти setProperty () -> setProperty () -> setProperty () выглядят невероятно беспорядочно, и я чувствую, что делаю это не в том месте? Будет ли лучшим вариантом просто создать какой-то сервисный слой , где я передаю весь $ feed , а затем в этом классе я создаю экземпляры моих Моделей и моего Mapper?
Кроме того, мне нужно нормализоваться, что означает, что я должен использовать транзакцию, но я не уверен, где мне следует начинать транзакцию. Из-за того, как я сейчас работаю, единственное место, которое я когда-либо мог рассмотреть, это мой Контроллер. Ого ... это было бы ужасное место .
Как я могу получить поведение модели и операции из моего контроллера?
ImportController.php
public function indexAction() {
$start = $this->getRequest()->getParam('start');
$end = $this->getRequest()->getParam('end');
$url = "http://www.domain.com/admin/GetBookingData.aspx";
$client = new Zend_Http_Client();
$client->setParameterGet('dateEnteredMin', $start);
$client->setParameterGet('dateEnteredMax', $end);
$client->setParameterGet('login', 'login');
$client->setParameterGet('password', 'password');
$client->setUri( $url );
$client->setConfig(array(
'maxredirects' => 0,
'timeout' => 30));
// Send the request.
$response = $client->request();
// Grab the feed from ->getBody and add it to $feed
$feed = $this->csv_to_array(trim($response->getBody()));
// The first item in the array is the heading in the CSV, so we can remove it from the array using shift().
$title = array_shift($feed);
// Create my Models and Mappers.
// *** EVERYTHING BELOW HERE IS WHAT I DON'T LIKE ***
$bookings = new Bookings_Models_Bookings();
$property = new Bookings_Models_Property();
$clients = new Bookings_Models_Clients();
$bookingsMapper = new Bookings_Models_Bookings_Mapper();
$propertyMapper = new Bookings_Models_Property_Mapper();
$clientsMapper = new Bookings_Models_Clients_Mapper();
$bookings->setId($feed[9])
->setPropertyId($feed[1])
->setClientId($feed[2])
->setDate($feed[4]);
$bookingsMapper->save($bookings);
$property->setId($feed[1])
->setPropertyName($feed[23])
$propertyMapper->save($bookings);
$clients->setId($feed[2])
->setFirstName($feed[20])
->setLastName($feed[21])
$clientsMapper->save($clients);
}