Как я могу реализовать шаблон проектирования объектов NULL в общей форме? - PullRequest
3 голосов
/ 26 марта 2010

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

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

Есть ли способ и как пожалуйста?

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

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

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

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

0 голосов
/ 26 марта 2010

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

...