2010-11-12 7 views
5

Estoy considerando crear una interfaz y aplicarla a todos los objetos en un cierto espacio de nombres.¿El uso de interfaces en blanco es un mal diseño?

Escenario en el que usaría esto: quiero crear un controlador genérico de esos objetos, y me gustaría hacer cumplir el parámetro genérico para aceptar solo los tipos que implementan esta interfaz en particular.

¿Es este un mal diseño o las interfaces en blanco son aceptables?

+0

¿Repite? http://stackoverflow.com/q/3162214/456188 – Crisfole

+0

@Cpfohl: Mi pregunta parece ser muy similar a la que enlaza. Parece que esta otra pregunta está escrita de manera más oscura (verifique el conteo 'visto'), y está menos bien cubierta en las respuestas. – Remus

+0

¡No le digo que tiene que quitarlo! :) Solo lo señalo en caso de que obtengas información adicional sobre él. – Crisfole

Respuesta

2

Lo que está hablando de hacer se conoce como Marker Interfaces.

He utilizado esta técnica con éxito en el pasado, pero me pregunto si la limitación artificial que está colocando en su clase genérica es realmente necesaria. Si es así, entonces este es ciertamente un método rápido y compilado para lograrlo.

+0

Así que * hay * un nombre para ello ... ¡gracias! – Remus

1

Nada malo con ellos en mi opinión. Gran parte de su fuerza reside en combinación con clases parciales (generadas).

0

¿Por qué está creando esta interfaz si está en blanco? ¿Cuáles son los contenidos de cada clase? ¿Hay alguna coincidencia entre ellos? Si la respuesta a esa pregunta es no, entonces ¿por qué estás haciendo una interfaz para cada uno?

Si tiene un buen motivo para hacer una interfaz en blanco, probablemente esté bien. Pero piénselo y vea si puede poner algo en esa interfaz que sea común entre los elementos.

+0

... Al mismo tiempo, no aportaría información adicional en una interfaz por el solo hecho de hacerlo. Cuanto menos definida sea la interfaz, mejor. Siempre puede usar múltiples interfaces para obligaciones funcionales adicionales. – deanvmc

+0

No crearía una interfaz para cada una, solo una interfaz que cubra todos los objetos dentro de un cierto espacio de nombres. Y, la suposición en mi pregunta es que no hay algo en común entre ellos, de hecho. – Remus

1

Mi comprensión personal de una interfaz es que forma el contrato público entre uno o más objetos. La idea es simple, puedes construir tu base de código usando interfaces sin preocuparte por la implementación. Habiendo dicho eso, es una pregunta interesante porque técnicamente estás intentando forjar un contrato. Yo diría que adelante

0

No hay nada ... Incorrecto con el uso de una interfaz en blanco, supongo. Simplemente, el objetivo de una interfaz es definir un conjunto común de funciones que pueden variar en la forma en que se implementa.

No hará la codificación más fácil, ya que efectivamente está trabajando con una caja negra (object, como algunos pueden llamarlo).

Honestamente, sin embargo, si estuviera implementando una arquitectura tan abierta, simplemente iría con el antiguo object.

1

No, no es un mal diseño. Proporcionar restricciones razonables en los argumentos genéricos ayuda a mantener la seguridad y la legibilidad del código. Además, puede estar bastante seguro de que la interfaz no permanecerá vacía para siempre.

Cuestiones relacionadas