Герметичное сцепление в моделях 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
экземпляр, чтобы принять решение об оказании помощи.