Предыстория: Посмотрите на код ниже:
class Adt:
# I avoided constructor with dependencies
def generate_document(self, date_from, date_to):
try:
adt_data = self.repository.read_adt_data(date_from, date_to) # **<- adt_data may be null**
document_body = self.__prepare_document_body(adt_data )
doc_id = self.__generate_document(document_body)
return doc_id
except Exception:
self.logger.exception("generate_document")
raise
И ниже вы можете увидеть код клиента:
doc_id = adt.generate_document(date_from,date_to)
email_sender_client.send_document_as_email(doc_id)
Объяснение и проблема : Существует нормальное бизнес-состояние, когда у нас нет adt_data, поэтому иногда эта переменная может быть None. Простое решение - просто поставить, если ... "
adt_data = self.repository.read_adt_data(date_from, date_to)
if not adt_data:
return None
И исправлен код клиента:
doc_id = adt.generate_document(date_from,date_to)
if doc_id:
email_sender_client.send_document_as_email(doc_id)
Вопрос: Существует ли какой-нибудь типичный механизм, позволяющий избежать такого if's ? Я читал об объектном шаблоне Null. Возможно, хранилище может вернуть не None, а объект с пустыми полями? Я хочу спросить экспертов о возможных решениях.