SQL Alchemy MVC и кросс-контроллер объединяются - PullRequest
0 голосов
/ 29 мая 2010

При использовании SQL Alchemy для абстрагирования уровня доступа к данным и использования контроллеров в качестве способа доступа к объектам из этого уровня абстракции, как следует обрабатывать объединения?

Так, например, скажем, у вас есть класс контроллера Ordersон управляет объектами Order таким образом, что предоставляет методы getOrder, saveOrder и т. д., а также аналогичный контроллер для объектов User.

Прежде всего, вам даже нужны эти контроллеры?Если вместо этого вы просто относитесь к SQL Alchemy как к «тому», который обрабатывает доступ к данным.Зачем беспокоиться об объектно-ориентированном контроллере, когда вместо этого у вас есть чистый декларативный способ получения и сохранения объектов без необходимости писать SQL напрямую.

Ну, одна из причин может заключаться в том, что, возможно, вы захотите заменить SQL Alchemy на прямой SQL или Storm или что-то еще.Таким образом, наличие там классов контроллеров в качестве промежуточного уровня помогает ограничить то, что необходимо изменить.

В любом случае - вернемся к основному вопросу - поэтому, предположив, что у вас есть эти два контроллера, теперь допустим, что вы хотите получить список заказов для определенного набора пользователей, отвечающих некоторым критериям.Как ты это делаешь?Обычно вы не хотите, чтобы контроллеры пересекали домены - контроллеры Orders знают только о заказах, а пользовательский контроллер - только о пользователях - они не связываются друг с другом.Вы также не хотите извлекать всех подходящих пользователей, а затем отправлять большой список идентификаторов пользователей в контроллер Orders, чтобы найти соответствующие Orders.

Требуется соединение.Вот где я застрял - похоже, это означает, что либо контроллеры должны пересекать домены, либо, возможно, они должны быть полностью уничтожены, и вы просто выполняете объединение напрямую через SQL Alchemy и получаете получившиеся объекты User и / или Order по мере необходимости.Мысли?

1 Ответ

2 голосов
/ 29 мая 2010

Контроллеры предназначены для инкапсуляции функций для вашего удобства. Не связывать руки. Если вы хотите присоединиться, просто присоединяйтесь. Используйте контроллер, который вы считаете логически наиболее подходящим для выполнения запроса.

...