Должен ли я продолжать полагаться на генерацию кода для генерации своих моделей и CRUD? - PullRequest
4 голосов
/ 28 марта 2012

По мере того как я углубляюсь в Yii, я теперь задаюсь вопросом, можно ли полагаться на Gii и Giix для генерации моих моделей и «административного» CRUD, может быть опорой, а не инструментом экономии времени. Много раз на начальных этапах небольших проектов это помогает мне быстрее продвигаться вперед, позволяя мне сосредоточиться на дизайне базы данных. Однако всякий раз, когда я изменяю структуру таблицы или отношения, мне приходится полагаться на GiiX, чтобы заново сгенерировать модель. Прежде чем сделать это, я всегда копирую части модели, которые я написал, чтобы потом вставить их в обновленную модель. Это кажется утомительным занятием, и теперь мне интересно, экономит ли оно мне какое-то время. У меня есть несколько вопросов:

  1. В частности, для пользователей Yii, если вы уже некоторое время занимаетесь Yii, вам вообще не нравится Gii или GiiX? Вы перестали его использовать, потому что он больше не был полезен или потому что это был костыль? Вы работали над написанием своих собственных инструментов генерации кода и строительных лесов?
  2. Как вы считаете, следует ли избегать инструментов генерации кода при изучении нового языка или фреймворка?

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

Пожалуйста, дайте мне знать ваши мысли!

Ответы [ 3 ]

7 голосов
/ 28 марта 2012

Gii полезен для генерации исходного шаблонного кода и структуры каталогов.

По мере продолжения проекта я использую diff-файлы, предоставленные Gii, чтобы добавить соответствующие новые фрагменты кода в мои файлы классов моделей. Скажем, вы изменили таблицу. Перейдите в Gii и попробуйте сгенерировать модель. Вы получите уведомление о том, что файл класса модели существует. Кроме того, во всплывающем окне вы увидите ссылку, которая дает вам разницу.

4 голосов
/ 28 марта 2012

Я не знаю, возможно ли это с Yii, но с помощью другой инфраструктуры, которую я использую, мы расширяем классы модели и помещаем наш пользовательский код в эти расширенные классы. В приложении мы ссылаемся только на расширенный класс, а не на базовые (сгенерированные) классы моделей.

Поскольку мы не помещаем пользовательский код в классы базовой модели, они могут быть сгенерированы повторно, не беспокоясь о перезаписи любого пользовательского кода.

1 голос
/ 28 марта 2012

Однако всякий раз, когда я изменяю структуру таблицы или отношения, мне приходится полагаться на GiiX для повторного создания модели.

Тебе это действительно не нужно,Yii design делает все поля таблицы доступными в качестве атрибутов в вашей модели.Таким образом, если вы добавите новое fieldX в вашу TableA, вы можете сразу же использовать $ modelA-> fieldX.Вам не нужно делать любое обновление в вашей модели.Yii «знает», что вы изменили таблицу.

См .:

«Хотя мы никогда не объявляем явно свойство title в классе Post, мы все равно можем получить к нему доступ в приведенном выше кодеЭто потому, что title - это столбец в таблице tbl_post, и CActiveRecord делает его доступным как свойство с помощью магического метода PHP __get () . Исключение будет выдано, если мы попытаемся получить доступ ктаким же образом и для несуществующего столбца. "

Источник: http://www.yiiframework.com/doc/guide/1.1/en/database.ar

For Yii users specifically, once you've been doing Yii for a while do you even bother with Gii or GiiX? Did you quit using it because it was no longer useful, or because it was a crutch? Did you work on writing your own code generation and scaffolding tools?

Я использую Gii во всех своих проектах для большинства моделей или генерации CRUD.Это очень полезно.Я могу настроить сгенерированный код так, как я хочу.Я даже сделал некоторые настройки для «скелета» генератора Gii, чтобы сгенерированный код был на моем языке, а не на английском, и с некоторыми методами / атрибутами мне нужно больше.

For all coders, do you feel code generation tools should be avoided when learning a new language or framework?

Нет, IMO.Сгенерированный код - еще один способ изучения.

...