Уведомления

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

#1 Апрель 7, 2017 09:38:42

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Это что - желание написать код подлиннее или есть скрытый смысл?

В коде есть такие фрагменты, в нескольких моделях:

     def _update_sub_category_products(self):
        catalog = Catalog.objects.get(c_id = self.c_id)
        subs = get_cats_by_parent(catalog,[])
        products =  Products.objects.exclude(p_deleted = True).filter(p_catalog_id__in = subs, p_active = True, p_price__gt = 0)
        return products
    def category_sub_products(self):
        products = self._update_sub_category_products()
        return products
Первая функция больше нигде в проекте не используется.
Вторая используется во вьюхах и темплейтах. Но она возвращает, по сути, то же, что и первая, она просто вызывает первую и отдает ее результаты.
Почему было не оставить одну функцию? Может, в этом есть какой-то скрытый смысл, который я пока не понимаю (ну не знаю, с точки зрения безопасности, к примеру)?

Офлайн

#2 Апрель 7, 2017 11:23:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Это что - желание написать код подлиннее или есть скрытый смысл?

Elaphe
Почему было не оставить одну функцию?
Первая функция у вас имеет подчеркивание вначале. В практическом питоне это сигнал разработчику не использовать эту функцию и не изменять её в потомках - это служебная функция и только её разработчик знает все нюансы её использования. Для вас сделана обертка для этой функции, которую вы используете. Таким образом, в следующей версии продукта разработчик вполне может существенно изменить функцию _update_sub_category_products, вас это вообще никак не должно касаться, ваша функция category_sub_products не измениться, вы можете её переопределить в потомках, вызывать где и когда угодно и вообще не заморачиваться. Можно считать, что у вас есть протектед и паблик версии метода.

В следующей версии станет так

      def _update_sub_category_products(self, count, is_moderator):
        catalog = Catalog.objects.get(c_id = self.c_id)
        subs = get_cats_by_parent(catalog,[])
        products =  Products.objects.exclude(p_deleted = True).filter(p_catalog_id__in = subs, p_active = True, p_price__gt = 0)[:count]
        return products
    def category_sub_products(self):
        products = self._update_sub_category_products(DEFAULT_COUNT, False)
        return products

У класса остался тот же интерфейс, метод category_sub_products имеет прежнюю сигнатуру, для вас вообще ничего не изменилось.



Офлайн

  • Начало
  • » Django
  • » Это что - желание написать код подлиннее или есть скрытый смысл?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version