Рабочий процесс, который вы описываете в D1 и Propel, совершенно противоположен предпочтительному образу мышления для Doctrine2. Фактически, я также избегал писать свои собственные определения базы данных в D1, по большей части по тем же причинам, которые я привожу здесь:
В Доктрине 2 вы в первую очередь касаетесь своих сущностей. Сущности - это просто обычный объект PHP, а доктрина просто управляет вашим постоянством. Тот факт, что Doctrine скрытно скрывает данные в какой-то базе данных, является запоздалой мыслью. Весь этот беспорядок именно то, что вы должны абстрагировать! Теоретически, вы можете избавиться от доктрины в будущем и написать собственную логику настойчивости. Ваши сущности будут работать так же, как и всегда.
Глядя на это так, начинать со схемы базы данных совершенно глупо. Вы больше интересуетесь своими сущностями и бизнес-логикой, встроенной в них и вокруг них. Это вкусный суп!
Теперь, так как вы используете доктрину для сохранения ваших сущностей, (вероятно) имеет смысл сохранить ваши данные отображения прямо там с определениями классов.
Итак, ваш новый рабочий процесс:
- Проектируйте некоторые сущности, определяя некоторые простые классы PHP.
- Пометьте определения классов некоторыми причудливыми комментариями к доктрине.
жевать.
./doctrine orm:schema:create
и пусть доктрина беспокоится о
определения таблиц базы данных.
Теперь, если у вас есть какая-то устаревшая база данных, все становится сложнее и намного менее увлекательным. Я действительно не имел дело с этим сценарием с D2, но я думаю, что это уродливо.
Относительно кода Boilerplate: Я вижу, что люди жалуются на необходимость писать геттеры / сеттеры для своих сущностей. Я делаю нечто подобное , что делает этот парень - все мои сущности расширяют класс AbstractEntity, который использует магические методы для генерации методов получения / установки для любых свойств, которые не имеют ручной работы. Как только вы это сделаете, практически не будет котла.
В качестве альтернативы, в наши дни существует множество инструментов, которые будут штамповать шаблон для вас (PHPStorm делает это, плагины для Sublime и т. Д.). Это делает стандартную процедуру довольно безболезненной и дает дополнительное преимущество, заключающееся в том, что вы можете добавлять подсказки типа, а ваш редактор может обеспечить полезное автозаполнение.