utilice una sirve que programacion para palabra objeto new metodos instancia crear and c# .net interface application-design

c# - una - ¿Tener un diseño de clase base vacío es malo?



utilice la palabra new para crear una instancia de objeto c# (4)

En java esto se llama interfaz de etiqueta . El enlace proporciona algunos buenos antecedentes sobre las interfaces de etiquetas, sus usos y problemas.

Necesito una clase base para mis clases de DTO que se utilizarán en mis interfaces genéricas.

Pero las clases de DTO no tienen nada en común. Son solo clases tontas que contienen algunas propiedades.

public void GetGridData() { IDataForGrid<DTOBase> aa; if(request == 1) aa = new CustomerGridData; if(request == 2) aa = new OrderGridData; var coll = aa.GetList(); } public class CustomerGridData : IDataForGrid<CustomerDTO> { ... }


Las pautas de codificación de .NET dicen que tener una clase o interfaz vacía (también llamada interfaz de "etiqueta") es un mal estilo. El estilo preferido es usar un atributo en lugar de anotar clases del mismo tipo. También hay una regla de FxCop para hacer cumplir esta convención.

Sin embargo, algunas veces (en casos raros) uso este modismo cuando una clase base común es útil para denotar una jerarquía común incluso si no existe una funcionalidad común. Los atributos no se pueden usar para esto.

Por ejemplo, en un intérprete para un lenguaje de programación, varios métodos devuelven un Value clase base especial, es decir, algo que tiene un valor dentro de ese lenguaje de programación. Básicamente, este valor puede ser todo, desde un número hasta una cadena (que, son clases especiales, no System.Int32 o System.String ) a un objeto compuesto. También podría devolver System.Object pero esto haría que la escritura de mi interfaz pública sea más débil.

El código bueno y autodocumentado se beneficia de la interfaz restringida.


No es un mal diseño, aunque algo poco común. Piénselo de esta manera: hay al menos dos beneficios sin inconvenientes:

  • La clase base sirve como filtro para sus interfaces, por lo que no puede pasarles ningún objeto, solo sus objetos DTO. Las interfaces de marcador también podrían hacerlo.
  • Cuando finalmente tengan algo en común, será fácil agregarlo allí y no tendrá que refaccionarlo todo.

Si no tienen nada en común, ¿qué vas a hacer con las instancias que recuperas de tu lista?

En cualquier caso, tener la clase base significa que cuando (está bien, si ) identifica algo que deben tener en común más adelante, no tiene que volver atrás y refactorizar (volver a basar) todo. Pero en cualquier caso, consideraría utilizar una interfaz en lugar de una clase base para este tipo de cosas, ya que no parece que haya una gran necesidad de reutilizar la implementación subyacente (¡ya que no tienen nada en común todavía!). Dependerá de lo que creas que puedan tener en común más adelante.