Герметичное сцепление в моделях Django

У меня есть модель Django, которая содержит incident_type а также closed поля. Основываясь на этих полях, я хочу вернуть функции, которые визуализируют некоторый текст.

Это нормально иметь такой get_renderer метод в моделях или я должен перенести эту логику куда-нибудь еще? В моем понимании этот метод нарушает принцип единой ответственности.

class Incident(models.Model):
    BAD_RESPONSE = 'bad_response'
    SLOW_RESPONSE = 'slow_response'
    INCIDENT_TYPE_CHOICES = (
        (BAD_RESPONSE, 'Webpage is not available'),
        (SLOW_RESPONSE, 'Webpage is slow'),
    )

    incident_type = models.CharField(max_length=50, choices=INCIDENT_TYPE_CHOICES)
    closed = models.BooleanField()

    def get_renderer(self):
        if self.incident_type == self.BAD_RESPONSE:
            if self.closed:
                return render_page_up_screen
            else:
                return render_page_down_screen

1 ответ

Решение

Я думаю, что было бы более уместно найти этот метод где-нибудь в вашем слое представления. Хранение вашей модели свободно связанной с сетью и рендеринг связанных понятий - это, как правило, хорошая практика. Это делает модель гибкой и более адаптируемой к изменениям.

перемещение get_renderer() на ваш взгляд должно быть просто? Это все еще будет иметь доступ к indicdent а также closed поля через Indcident экземпляр, чтобы принять решение об оказании помощи.

Другие вопросы по тегам