19.06.2009 09:25

  1. Работаю над проектом по рейтингу разных автосервисов: сто, мойки, шиномонтажи и т.п. Не могу никак определиться как лучше смоделировать эти модели на джанге. Каждый объект автосервиса имеет свои уникальные хар-ки, но есть и много общего. Вопрос как это общее оптимальнее запрограмировать.

    Можно например сделать базовый класс AutoService и отнаследовать от него конкретные типы. Кто-нибудь пользуется наследование моделей? Почему-то я настороженно к этой идее отношусь.

    Может быть проще не "умничать", а сделать каждому свою независимую модель, "домешав" общую логику через mixin'ы например. Правда в этом случае не получится сделать в БД foreign key на любой тип автосервиса, только на каждый в отдельности. Т.е. еще дублирование.

    Что думаете?

  2. перечитывая документацию джанго, multi-table inheritance это похоже то, что мне нужно. просто, понятно, можно ставить FK на parent table.

  3. Мы используем MT наследование практически с первого дня как оно появилось в Джанге. Изначально нашей архитектурной идеей была возможность иметь нескольких объектов предков от одного объекта родителя. Но так до этого мы и не дошли оставив классическую плоскую модель наследования.

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

    Ещё есть GenericRelation, которое дает возможность ссылать на любую сущность. Но это влечет за собой небольшие накладные расходы на выборки.

    Проще всего попробовать оба варианта и выбрать более подходящий.

  4. ruguevara

    0 ↑
    0 ↓
    Не надо бояться наследования, тем более необоснованно бояться
  5. Не надо бояться наследования

    Почему же? Для РСУБД это неродная концепция, а значит привет еще одна leaky abstraction.

    MT вроде бы ложится на РСУБД хорошо, его наверное и попробую.

  6. мда, теперь бы еще с запросами разобраться. Джанга делает 17 (!!!) запросов на странице объекта и 87 запросов на странице-индексе, со списоком из 25 объектов.

  7. Для РСУБД это неродная концепция, а значит привет еще одна leaky abstraction.

    +1!

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.