Форум сайта python.su
Добрый день,
Вот решил переписать свой первый простой джанго-проект из процедурного php-like cтиля, в красивый ООП-вид. Теперь вот задался вопросом, как идеалогоически правильно организован MVC подход в Django. Насколько я слышал, к примеру, в Рейлс считается что вся механика обработки данных должна храниться в модели, в ПХП я обычно встречался с тем, что модели содержат лишь интерфейс доступа к БД. Собственно вопрос: Где лучше разместить логику обработки данных, к примеру, метод включающий в себя обработку потока данных, и добавление полученной информации в базу? Стоит ли мне создавать отдельный менеджер для этих обработок, или этот процесс можно доверить методу в модели? Снова-таки, статические методы в модели почему-то хотят инициализации класса (т.е. к примеру User.populate() заставить работать у меня не получилось, приходилось сначала делать так user_manager = User(); user.populate()).
В общем, прошу прощения за такой сумбурный текст, и надеюсь получить объяснения от знатоков Django.
c уважением,
Михаил
Офлайн
Вопрос слишком общий.
Давайте более конкретно.
Офлайн
Офлайн
regallНу, это да, я знаю что такое MVC. Xотелось бы знать как идеалогически правильно все сделать, так как принято в Джанго.
FerromanНу, вот я пишу (вернее написал, но теперь рефакторю) небольшой сервис для себя (для изучения Джанго\Питона). Он обрабатывает данные из твиттера. Каждые н-минут, опрашивает твиттер, получает от него джсон-данные, и после этого я их обрабатываю. Есть, к примеру, таблица с пользователями, в неё записываются юзеры, которые оставляли твиты и информация из их профилей (аватарки, города и т.д.). Твитт каждого юзера добавляется в таблицу твиттов, и плюс к ним сохраняется геоинформация (координаты, и города\страны и т.д.).
Location.objects.get(id=1).distanceTo()И вот меня интересует, верно ли добавлять такие методы в модель, или необходимо создать отдельные классы представляющие Юзеров, Таблицу Твиттов и так далее, которые будут внутри себя обращаться к моделям?
или
Twitts.populate(json_data);
или
User.update_profile(screen_name)
Отредактировано (Март 10, 2010 18:27:16)
Офлайн
Собственно модель описывает сущность:
-если логика сильно логически завязана на сущность то ее стоит добавить в модель
-если логика затрагивает группу однотипных сущностей модели то в менеджер модели
-если завязана на класс сущности то в статический метод.
-если логика использует разные группы разнотипных сущностей то в отдельную функцию (типа не ООП :) ) а потом уже эту функции можно адаптировать к интерфейсам от какой модели пляшем.
По поводу того какие сущности лягут на какие модели так вообще неопределить тк сущности сначало появляются в голове у программиста, а тут уж вариантов вагон и именно тут главное не ошибиться. Лучше следовать правилу каждая сущность максимально проста и делает свою маленькую задачу, если появляются сильно непонятный код и его можно разделить - лучше разделить.
Отредактировано (Март 10, 2010 18:50:04)
Офлайн
EvgПонятно. Ну что ж, спасибо больше, буду думать :)
Офлайн
Evgтут я имел ввиду что к модели нужно цеплять методом если она использует иформацию только из этой сущности. А если например в логику метода попадает какая либо еще информация о других сущностях через параметры, то быть может стоит оформить метод отдельно ввиде ф-и, все зависит насколько это важная информация в данном контексте.
-если логика сильно логически завязана на сущность то ее стоит добавить в модель
Отредактировано (Март 10, 2010 20:33:55)
Офлайн
EvgСпасибо, так значительно понятней. А не является такое использование процедурного подхода дурным тоном? :)
так вот в сложном случае лучше оформить это в отдельной функции, тк логика затрагивает несколько сущностей, и не относится однозначно к какой либо из них.
Офлайн
Если только вы не наровите все засунуть в объект) А объект подразумевает все же некоторое состояние, поэтому не вся логика должна быть ввиде ООП, что-то можно оставить в виде функций. Да и питон это не только для ООП язык.
Да и не забываете что любой метод это на самом деле ф-я у кот 1-й аргумент ссылка на объект и просто вот формально o.meth() = meth(o) … чисто психологическая разница)
Отредактировано (Март 10, 2010 22:55:49)
Офлайн
EvgНу, это, конечно понятно :) но в данном случае просто интересно как принято это делать в Джанго. Я одно время читал много статей о Руби, и понял, что там принято большенство логики обрабатывать в модели… вот и решил поинтересоваться, как оно у Питонщиков :)
Если только вы не наровите все засунуть в объект) А объект подразумевает все же некоторое состояние, поэтому не вся логика должна быть ввиде ООП, что-то можно оставить в виде функций. Да и питон это не только для ООП язык.
Да и не забываете что любой метод это на самом деле ф-я у кот 1-й аргумент ссылка на объект и просто вот формально o.meth() = meth(o) … чисто психологическая разница)
Офлайн