Найти - Пользователи
Полная версия: Это что - желание написать код подлиннее или есть скрытый смысл?
Начало » Django » Это что - желание написать код подлиннее или есть скрытый смысл?
1
Elaphe
В коде есть такие фрагменты, в нескольких моделях:
     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
Первая функция больше нигде в проекте не используется.
Вторая используется во вьюхах и темплейтах. Но она возвращает, по сути, то же, что и первая, она просто вызывает первую и отдает ее результаты.
Почему было не оставить одну функцию? Может, в этом есть какой-то скрытый смысл, который я пока не понимаю (ну не знаю, с точки зрения безопасности, к примеру)?
FishHook
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 имеет прежнюю сигнатуру, для вас вообще ничего не изменилось.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB