Я рефакторинг большого класса, который имеет множество проверок на нулевое значение повсеместно в использование шаблона нулевого объекта. Пока что это было почти гладкое изменение, но у меня возникла пара проблем с конечным результатом, и я хотел бы знать, есть ли лучший или иной подход или даже вернуться назад, как это было.
Самая большая проблема в том, что у меня есть следующий код:
IMyObject myObject = GetMyObject();
if(myObject != null && !myObject.BooleanProperty)
DoSomething();
Так что, как вы можете видеть, я, вероятно, мог бы удалить проверку NULL из этого условия, но у меня есть логическое свойство, которое, если установлено значение по умолчанию, выполнит часть кода. Если бы я всегда возвращал истину, я мог бы ввести тонкие ошибки, которые было бы больно находить и устранять.
Другая проблема заключается в том, что мне пришлось изменить проверку с нуля следующим образом:
if(myObject.GetType() != typeof(MyNullObject))
return false;
DoSomething();
Это просто ужасно, так как вместо проверки нуля, теперь я должен проверить тип. Такая ситуация случается в классе три раза, так как я не возвращаю одно из свойств объекта или не выполняю один из его методов, я должен выполнить эту проверку.
И, наконец, у объекта есть пара свойств DateTime, которые не обнуляются, и архитектор не хочет, чтобы они обнулялись. Опять же, имея значение MinDate по умолчанию, некоторые неприятные ошибки могут заползти в код.
Так что у вас это есть. Является ли это случаем, когда шаблон нулевого объекта просто хуже, чем спагетти-нулевые проверки, разбросанные по всему? Есть ли лучший способ сделать это?
Спасибо за ваши ответы.