SQL Alchemy MVC и соединения между контроллерами

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

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

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

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

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

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


person Khorkrak    schedule 29.05.2010    source источник


Ответы (1)


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

person zefciu    schedule 29.05.2010