2010-04-29 2 views
1

У меня есть практические сомнения,новый контроллер в оо php

Я использую OO php, и я новичок в этом. Я использую рамки zend для ясности.

Я пишу контроллеры (класс) и действия (методы), в которых сказано, что PatientMapper.php имеет все отдельные действия, связанные с таблицей mysql, и Patient.php, который имеет все функции setter и getter.

У меня возникает сомнение в том, когда я должен написать новый контроллер.

  1. Должен ли я написать контроллер для всех действий в одной таблице mysql.

  2. или один контроллер для всех действий, связанных с модулем.

+0

возможный дубликат http://stackoverflow.com/questions/2626648/when-should-i-use-multiple-controllers -in-mvc – Gordon

ответ

3

В отличие от предыдущих ответов, я бы сказал, что ваш контроллер не должен быть связан с вашей БД.

Контроллеры не обрабатывают бизнес-логику, ваши модели делают.

Кроме того, вы можете написать контроллер для каждого объекта.

Пользователь - это объект, который может быть обернут в контроллер, даже если он зависит от нескольких таблиц. Если ваш контроллер становится все больше и больше, вы можете переключиться на модуль (терминологию Zend Framework) и создать пользовательский модуль с контроллером учетной записи и т. Д.

+0

Извините за ошибку. я хотел написать в нем модели и методы ... Итак, каждая модель должна быть привязана к таблице db .... это обряд? – Hacker

1

Я думаю, что вы должны написать контроллер для одной таблицы mysql, потому что, если ваше приложение вырастет, вы можете завершить несколько тысяч линейных контроллеров.

+0

Но писать для всех действий модуля будет легко поддерживать .. Что сказать !!!! –

0

IMHO Я бы предложил действие для каждой связанной с mysql действия для обслуживания. Это были бы весовые действия, которые просто называют вашей моделью для этой таблицы.

1

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

Важно, что контроллер не должен содержать логику классов модели. Единственная ответственность контроллера - получать и делегировать ввод для определенного взаимодействия, которое вы разрешаете пользователям делать с вашим приложением к модели. И в webbased MVC обычно также отвечает за обновление представления в соответствии с результатом операции.

Самое важное различие, которое нужно понять в MVC, заключается в том, что M должен иметь возможность жить самостоятельно, а V и C - вместе. V и C образуют только пользовательский интерфейс для вашего приложения, и они не должны ничего делать. В основном, ваше M - ваше приложение, в то время как ваш VC просто сидит поверх него. Должно быть действительно M | VC imho

С учетом сказанного, если вы чувствуете, что ваше приложение может уйти с одним контроллером, используйте один контроллер приложений. Но как только вы обнаружите, что добавляете действия, которые могут концептуально вписаться в отдельный контроллер, затем добавьте новый контроллер. Если ваше приложение является простым CRUD-приложением, тогда у вас есть один контроллер на таблицу базы данных. Если он делает что-то еще, то дайте ему что-то, что соответствует сценарию.

0

@gordon - Да, мое приложение представляет собой приложение CRUD. Мне нужно создать модель для каждой таблицы. Это самый распространенный способ обряда. И да, я немного понятны диспетчерам.

У меня есть страница, где мне нужны данные из 3 таблиц. Поэтому мне нужно будет вызвать все 3 метода модели, чтобы получить данные об обряд ...

У меня есть небольшое сомнение ... Я использую код, как это, в начале начала класса., И это было написано другим разработчик .... я использую его .. я найти его трудно использовать соединения, bcos это запирая помощь DB..any о том, как использовать присоединяется здесь

protected $_dbTable; 

    public function setDbTable($dbTable) 
    { 
     if (is_string($dbTable)) { 
      $dbTable = new $dbTable(); 
     } 
     if (!$dbTable instanceof Zend_Db_Table_Abstract) { 
      throw new Exception('Invalid table data gateway provided'); 
     } 
     $this->_dbTable = $dbTable; 
     return $this; 
    } 

    public function getDbTable() 
    { 
     if (null === $this->_dbTable) { 
      $this->setDbTable('Application_Model_DbTable_Appointment'); 
     } 
     return $this->_dbTable; 
    } 

это выбрать часть. .not возможность использовать присоединиться

$select = $this->getDbTable()->select() 
         ->from("patient_appointment",array('pa_pd_patient_id', 
           'DATE_FORMAT(pa_datetime,"%h:%i %p") as pa_time','pa_datetime','pa_um_id' 
           ,'pa_created_date','pa_mode','pa_type')) 
         ->where('date(pa_datetime) = ?', $date) 
         ->where('pa_pd_patient_id = ?', $patientId) 
         ->order('time(pa_datetime)'); 
     $resultSet = $this->getDbTable()->fetchAll($select); 
Смежные вопросы