Недостатки для определения нестатичного регистратора

По вашему мнению, имя аргумента: post_pk:

@login_required
def comment_create(request, post_pk):
    # ...

, но в шаблонах URL вы используете только pk:

path('post_detail/<int:pk>/comment_create/',views.comment_create, name='comment_create')

. переименуйте любой из двух, но переименование параметра в urls.py приведет к обновлению всех {% url ... %} для этого представления, так что вполне вероятно, что переименование параметра в представлении приведет к меньшему редактированию: [ 1110]

@login_required
def comment_create(request, pk):
    if request.method == 'POST':
        post = get_object_or_404(Post, pk=pk)
        content = request.POST.get('content')
        com_user = request.user

        if not content:
            messages.info(request, 'Write please')
            return redirect('post_detail', pk)
    Comment.objects.create(post=post, comment_user=com_user, comment_content=content)
    return redirect('post_detatil', pk)

Обратите внимание, что обычно извлечение и проверка данных выполняется с помощью Form, а не самого представления.

10
задан Community 23 May 2017 в 12:19
поделиться

4 ответа

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

С точки зрения дизайна Регистраторы не являются действительно свойством объекта, так как они обычно - метаинформация о Вашей системе, а не бизнес-информации в самой системе. A Logger не действительно часть чего-то как a Car возразите таким же образом Engine или a Transmission . Связь Регистраторов к объектам как участники (в большинстве случаев) не имеет смысла семантически больше, чем что-нибудь.

9
ответ дан 3 December 2019 в 22:39
поделиться

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

Плюс с абстрактной точки зрения, регистратор действительно принадлежит классу и может быть совместно использован всеми экземплярами, а не каждым экземпляром, нуждающимся в его собственной частной копии, таким образом, имеет смысл объявлять это как статичное. Зеркальное отражение вопроса вокруг, какие преимущества это имеет к созданию его нестатичный? (Способность передать getClass() в getLogger() звоните вместо того, чтобы передать в постоянном классе, единственная вещь, о которой я могу думать, и это - такая крошечная вещь).

2
ответ дан 3 December 2019 в 22:39
поделиться

Другой, вероятно, незначительный довод "против": потраченная впустую память, особенно когда у Вас есть много экземпляров, каждого с его собственным регистратором

1
ответ дан 3 December 2019 в 22:39
поделиться

Попытайтесь отладить ошибку, где Вы видите сообщение, сгенерированное SuperClass класс, когда ошибка действительно зарегистрирована SubClass класс. Я видел несколько ситуаций, где разработчики создают a LoggingUtils класс, который генерирует сообщения, которые обычно копируют вещи, которые уже испеклись - в платформой журналирования.

Единственная реальная ситуация я вижу использование общего экземпляра входа, является чем-то как свободное городское население Apache регистратор HttpClient httpclient.wire который совместно используется несколькими классами для входа содержания запросов и ответов, отправленных через клиент. Эта конкретная ситуация с входом не регистрирует информацию для фактической реализации пакета, это регистрирует информацию о целой http "транзакции".

0
ответ дан 3 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: