Как я могу реализовать шаблон дизайна NULL Object в общей форме?

Есть ли способ реализовать шаблон проектирования нулевого объекта в общей форме, так что мне не нужно реализовывать его для каждого объекта buisness.

Для меня есть два класса высокого уровня, которые вам понадобятся для каждого бизнес-класса. Один для одной записи и другой для списка. Поэтому я думаю, что должен быть способ реализации шаблона проектирования NULL Object на высоком уровне и не должен реализовывать его для каждого класса.

Есть ли способ и как вам понравиться?

2 ответа

В моем понимании, NULL-класс не должен быть реализован для каждого класса, который у вас есть, но для каждого используемого вами интерфейса. В этом случае вы наверняка можете написать какой-либо метод, который генерирует пустую стандартную реализацию для любого данного интерфейса с использованием отражения. Однако желаемое поведение NULL-объекта может иметь особые случаи для определенных интерфейсов, и в этом случае общее решение будет терпеть неудачу.

Например, у вас может быть интерфейс, реализующий IComparable. В некоторых случаях вы можете захотеть, чтобы NULL-объект был равен всем другим объектам, а в других случаях вы хотите, чтобы он был меньше всех других объектов.

EDIT: IComparable был всего лишь примером. Дело в том, что я не думаю, что разумно иметь общую реализацию NULL-класса. Вы используете класс NULL, поэтому ваша программа может работать без необходимости обработки особых случаев возвращаемых значений NULL. Если у вас есть реализация по умолчанию, вам наверняка придется снова проверить специальные случаи, и вся точка шаблона будет пропущена.


Как уже говорилось ранее здесь SO, реализация объекта NULL зависит от домена, поэтому я не думаю, что есть общий ответ на ваш вопрос, Возможно, вы найдете более или менее общее решение для ваших бизнес-объектов. Если вы представите несколько примеров того, что вы имеете в виду, вы, вероятно, получите несколько лучших ответов.

licensed under cc by-sa 3.0 with attribution.