2014-02-18 5 views
0

Я создал небольшой проект, где я прохожу данные из моих контроллеров класса обслуживания, который использует ОРМ, чтобы, например, сохранить объект:Использование хранилища шаблона с ОРМОМ

Что-то вроде этого: UserController получает пост и передает его на номер UserService. UserService создает объект пользователя и сохраняет его в базу данных с $user.save();

Сейчас я борюсь с двумя вещами:

Первое: Скажем, я использую хранилище для добавления пользователя, он будет следующим образом: Контроллер передает данные сообщения службе, которая создает объект пользователя и передает его в репозиторий. Единственное, что нужно сделать репозиторию, это позвонить $user.save(), разве это не так странно? Почему бы не вызвать сохранение в моем сервисе, потому что использование репозитория просто для вызова метода сохранения кажется мне излишним.

Второе: Я прочитал, что при использовании репозиториев, вы можете легко изменить методы хранения, потому что приложение не знает, какой из них используется. Но прежде чем передавать объект в ваш репозиторий, вы должны его создать. Использование ORM, каждый из них имеет другой способ: Doctrine использует $user = new User, в то время как Propel использует $user = new User(), idiorm использует $user = ORM::for_table('user')->create();. Поэтому, когда переключение на другой ORM по какой-то причине связано с изменением этого в вашем проекте, нет?

ответ

0

Первый: прочитайте об ответственности Model View и Controller. Ниже приведено разумное объяснение с примером на этом сайте: http://tomdalling.com/blog/software-design/model-view-controller-explained/

Что касается Модели и вашего ORM - ОРМ, вероятно, существует в пределах Модели. Поэтому вы должны попросить вашу модель создать новый объект (который может представлять собой одну таблицу или ряд связанных таблиц - ваша модель должна понимать эти отношения). Затем вы можете передавать данные в свою модель, и ваша модель должна затем хранить данные в соответствующих столбцах в соответствующих таблицах. Простой пример, представьте себе создание объекта под названием «Семья», где вы можете указать 2 родительских имени, переменное число имен детей, а затем сообщить Модели, чтобы сохранить это. Модель может взять этот объект «Семья» и создать единую запись таблицы Family и 5 записей таблицы Person, пометив некоторых как родителей и других как детей.

Второе: упомянутые здесь методы хранения (на мой взгляд) относятся к используемой базе данных. Например, я знаю, что Propel поддерживает MySQL, PostgreSql, MSQL, Oracle и другие. Мой коммутатор конфигурации в другую базу данных Propel автоматически начнет говорить на соответствующем языке для новой базы данных.

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