Архитектурное решение, чтобы избежать нулевой проверки - PullRequest
2 голосов
/ 17 февраля 2020

Предыстория: Посмотрите на код ниже:

 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, а объект с пустыми полями? Я хочу спросить экспертов о возможных решениях.

...