Есть ли распознанный шаблон для бесполезных объектов, которые реализуют интерфейс? - PullRequest
6 голосов
/ 03 июня 2009

Например, (хотя это не интерфейс) класс Stream в .NET имеет реализацию, предоставленную Stream.Null, которая просто отбрасывает данные. PowerShell имеет значение Out-Null.

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

У меня вопрос: как мне относиться к этой практике при документировании или объяснении архитектуры? Для этого есть признанное имя или шаблон дизайна Гофа / Фаулера?

Ответы [ 5 ]

11 голосов
/ 03 июня 2009

Этот шаблон часто называют NullObject: http://en.wikipedia.org/wiki/Null_Object_pattern

5 голосов
/ 03 июня 2009

Да. Это шаблон Null Object .

3 голосов
/ 03 июня 2009

Очевидно, что у него есть имя "NullObject", но вопрос может иметь другой аспект:

С самого начала вся моя реализация проекта состоит либо из методов Stub, либо из приемников данных.

Я использую термин «заглушка», относящийся к внешним интерфейсам, которые еще не имеют реализации (но уже дают значимый возврат, что позволяет вам строить проект с первого дня).

Я использую «Sinker», ссылаясь на интерфейс, который позволяет мне направлять данные к нему, но на самом деле он никуда не идет, и это не ошибка отправителя (поэтому было бы неудобно кодировать «не отправлять» "условие в этой области).

Нужно выполнить полную сборку, И ТОГДА мы начинаем кодирование. Со временем почти все заглушки становятся функциональными (и некоторые будут обрабатывать или получать данные), и почти все приемники становятся функциональными. При проверке кода мы обнаруживаем, что некоторые грузчики могут перестать существовать, другие могут быть сгруппированы и т. Д. И т. Д.

1 голос
/ 03 июня 2009
0 голосов
/ 13 января 2011

В более общем случае шаблон Null Object называется шаблоном Special Case .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...