2009-06-03 17 views
6

Por ejemplo, (aunque no es una interfaz), la clase Stream en .NET tiene una implementación proporcionada por Stream.Null que simplemente descarta los datos. PowerShell tiene Out-Null.¿Existe un patrón reconocido para objetos inútiles que implementan una interfaz?

En las aplicaciones que he desarrollado, a menudo he encontrado que es útil implementar una interfaz IFoo con una implementación predeterminada NullFoo o similar cuando es preferible tener una implementación inútil en lugar de no pasar un objeto en absoluto.

Mi pregunta es ¿cómo debería referirme a esta práctica para documentar o explicar una arquitectura? ¿Existe un nombre reconocido o un patrón de diseño de GoF/Fowler para esto?

Respuesta

3

Al parecer tiene un nombre, "NullObject", pero la pregunta puede tener una faceta diferente:

Los jugadores de mi aplicación entera proyecto consiste en cualquiera de los métodos de rutas internas o plomos de datos.

Utilizo el término "Stub" para referirme a las interfaces externas que todavía no tienen una implementación (pero que ya le dan un retorno significativo, lo que le permite construir el proyecto desde el día 1).

Utilizo un "Sinker" para referirme a una interfaz que me permite dirigir datos a ella, pero realmente no va a ningún otro lugar desde allí, y no es culpa del remitente (por lo que sería engorroso codificar "do not enviar "condición dentro de ese alcance".

Debe lograr una construcción completa, Y LUEGO, comenzamos a codificar. Con el tiempo, casi todos los stubs se vuelven funcionales (y algunos tratarán o fuente de datos) y casi todos los sinkers se vuelven funcionales. En las revisiones de código nos encontramos con que algunos plomos pueden dejar de existir, otros se pueden agrupar, etc, etc.

1
  • El objeto parece ser llamado un Null Object, como otros críticos han señalado
  • Si está programando en el entorno .Net, es posible que desee seguir la convención de Microsoft que es 'Vacío' (como en String.Empty). Consulte el siguiente .Net BCL Examples Search
+0

Stream.Null vs Stream.Empty – dss539

Cuestiones relacionadas