Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Несколько вопросов от новичка по поводу архитектуры приложений [RSS Feed]

#1 Март 10, 2010 14:45:10

mee
От:
Зарегистрирован: 2010-03-10
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Добрый день,

Вот решил переписать свой первый простой джанго-проект из процедурного php-like cтиля, в красивый ООП-вид. Теперь вот задался вопросом, как идеалогоически правильно организован MVC подход в Django. Насколько я слышал, к примеру, в Рейлс считается что вся механика обработки данных должна храниться в модели, в ПХП я обычно встречался с тем, что модели содержат лишь интерфейс доступа к БД. Собственно вопрос: Где лучше разместить логику обработки данных, к примеру, метод включающий в себя обработку потока данных, и добавление полученной информации в базу? Стоит ли мне создавать отдельный менеджер для этих обработок, или этот процесс можно доверить методу в модели? Снова-таки, статические методы в модели почему-то хотят инициализации класса (т.е. к примеру User.populate() заставить работать у меня не получилось, приходилось сначала делать так user_manager = User(); user.populate()).

В общем, прошу прощения за такой сумбурный текст, и надеюсь получить объяснения от знатоков Django.

c уважением,
Михаил



Офлайн

#2 Март 10, 2010 14:59:27

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Вопрос слишком общий.
Давайте более конкретно.

Офлайн

#3 Март 10, 2010 15:14:45

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Офлайн

#4 Март 10, 2010 18:21:22

mee
От:
Зарегистрирован: 2010-03-10
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

regall
Ну, это да, я знаю что такое MVC. Xотелось бы знать как идеалогически правильно все сделать, так как принято в Джанго.

Ferroman
Ну, вот я пишу (вернее написал, но теперь рефакторю) небольшой сервис для себя (для изучения Джанго\Питона). Он обрабатывает данные из твиттера. Каждые н-минут, опрашивает твиттер, получает от него джсон-данные, и после этого я их обрабатываю. Есть, к примеру, таблица с пользователями, в неё записываются юзеры, которые оставляли твиты и информация из их профилей (аватарки, города и т.д.). Твитт каждого юзера добавляется в таблицу твиттов, и плюс к ним сохраняется геоинформация (координаты, и города\страны и т.д.).
Ну и вот к примеру действие обработки данных. У меня была мысль добавить его в качестве метода к таблице твиттов. Обработку гео-данных (т.е. геолокацию, вычисление расстояний и т.д.) - в таблицу мест. Что-то вроде:
Location.objects.get(id=1).distanceTo()
или
Twitts.populate(json_data);
или
User.update_profile(screen_name)
И вот меня интересует, верно ли добавлять такие методы в модель, или необходимо создать отдельные классы представляющие Юзеров, Таблицу Твиттов и так далее, которые будут внутри себя обращаться к моделям?

И вообще, тут похоже, все из Украины :) Здорово.



Отредактировано (Март 10, 2010 18:27:16)

Офлайн

#5 Март 10, 2010 18:44:47

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Собственно модель описывает сущность:
-если логика сильно логически завязана на сущность то ее стоит добавить в модель
-если логика затрагивает группу однотипных сущностей модели то в менеджер модели
-если завязана на класс сущности то в статический метод.
-если логика использует разные группы разнотипных сущностей то в отдельную функцию (типа не ООП :) ) а потом уже эту функции можно адаптировать к интерфейсам от какой модели пляшем.

По поводу того какие сущности лягут на какие модели так вообще неопределить тк сущности сначало появляются в голове у программиста, а тут уж вариантов вагон и именно тут главное не ошибиться. Лучше следовать правилу каждая сущность максимально проста и делает свою маленькую задачу, если появляются сильно непонятный код и его можно разделить - лучше разделить.



Отредактировано (Март 10, 2010 18:50:04)

Офлайн

#6 Март 10, 2010 20:03:44

mee
От:
Зарегистрирован: 2010-03-10
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Evg
Понятно. Ну что ж, спасибо больше, буду думать :)



Офлайн

#7 Март 10, 2010 20:33:21

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Evg
-если логика сильно логически завязана на сущность то ее стоит добавить в модель
тут я имел ввиду что к модели нужно цеплять методом если она использует иформацию только из этой сущности. А если например в логику метода попадает какая либо еще информация о других сущностях через параметры, то быть может стоит оформить метод отдельно ввиде ф-и, все зависит насколько это важная информация в данном контексте.
К примеру есть сущность Article статья и например ее нужно опубликовать, публикует ее User, и вот встает вопрос куда цеплять метод публикации.
Article.publish(user)
User.publish(Article)
или ф-я
publish(Artilce,User)
которую кстати потом можно обернуть двумя методами выше

так вот в сложном случае лучше оформить это в отдельной функции, тк логика затрагивает несколько сущностей, и не относится однозначно к какой либо из них.



Отредактировано (Март 10, 2010 20:33:55)

Офлайн

#8 Март 10, 2010 21:49:05

mee
От:
Зарегистрирован: 2010-03-10
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Evg
так вот в сложном случае лучше оформить это в отдельной функции, тк логика затрагивает несколько сущностей, и не относится однозначно к какой либо из них.
Спасибо, так значительно понятней. А не является такое использование процедурного подхода дурным тоном? :)



Офлайн

#9 Март 10, 2010 22:35:28

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Если только вы не наровите все засунуть в объект) А объект подразумевает все же некоторое состояние, поэтому не вся логика должна быть ввиде ООП, что-то можно оставить в виде функций. Да и питон это не только для ООП язык.
Да и не забываете что любой метод это на самом деле ф-я у кот 1-й аргумент ссылка на объект и просто вот формально o.meth() = meth(o) … чисто психологическая разница)



Отредактировано (Март 10, 2010 22:55:49)

Офлайн

#10 Март 11, 2010 20:24:01

mee
От:
Зарегистрирован: 2010-03-10
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов от новичка по поводу архитектуры приложений

Evg
Если только вы не наровите все засунуть в объект) А объект подразумевает все же некоторое состояние, поэтому не вся логика должна быть ввиде ООП, что-то можно оставить в виде функций. Да и питон это не только для ООП язык.
Да и не забываете что любой метод это на самом деле ф-я у кот 1-й аргумент ссылка на объект и просто вот формально o.meth() = meth(o) … чисто психологическая разница)
Ну, это, конечно понятно :) но в данном случае просто интересно как принято это делать в Джанго. Я одно время читал много статей о Руби, и понял, что там принято большенство логики обрабатывать в модели… вот и решил поинтересоваться, как оно у Питонщиков :)



Офлайн

  • Начало
  • » Django
  • » Несколько вопросов от новичка по поводу архитектуры приложений[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version