paladin223 / django

0 stars 0 forks source link

Модельки можно было оптимизировать ещё больше #23

Closed drowsycoder closed 1 year ago

drowsycoder commented 1 year ago

Например, в сторону

class Category(PublishedWithNameBaseModel, SluggedBaseModel):
    ...

Или вообще в такую

class Category(NamedBaseModel, PublishedBaseModel, SluggedBaseModel):
    ...

Если заморачиваться В последнем случае плюс: более гибкое управление моделями. Относительно минус: залезаем в принцип APO (Avoid Premature Optimization), но здесь нам оба вариант подходят В решении Данилы, которое он упоминал в вашем чатике, я видел, что slug он и так повторяющимся пропустил бы, но здесь я бы предложил какой-то из своих вариантов

Кстати, базовые модельки ещё помогут с этим куском, который можно вынести (он повторяется трижды, Карл!):

def __str__(self) -> str:
    return self.name[:200]

А вот потом уже переопределять, при необходимости

Но там ещё надо учесть уже человеческую логику за пределами ТЗ, где имена могут совпадать (тот же Item, типа "булочка с корицей"), например, а где не могут (тот же Tag, типа "сладкое"). Там выбираем основный вариант, и его уже при необходимости переопределяем в самих моделях Прям всё кардинально переформатировать не так уж и обязательно, но это тот самый принцип DRY

drowsycoder commented 1 year ago

AbstractName можно спокойно объединить с AbstractStr (слишком разделять тоже не стоит, т.к. они связаны), это потом не помешает переопределить name при необходимости