Pregunta

¿Cómo organizas tus métodos de extensión?Digamos que si tuviera extensiones para la clase de objeto y la clase de cadena, me sentiría tentado a separar estos métodos de extensión en clases, es decir,:

public class ObjectExtensions
{
    ...
}

public class StringExtensions
{
    ...
}

¿Estoy haciendo esto demasiado complicado o tiene sentido?

¿Fue útil?

Solución

Organizo métodos de extensión usando una combinación de espacio de nombres y nombre de clase, y es similar a la forma que usted describe en la pregunta.

Generalmente tengo algún tipo de "ensamblaje primario" en mi solución que proporciona la mayor parte de la funcionalidad compartida (como métodos de extensión).Llamaremos a esta asamblea "Marco" para facilitar la discusión.

Dentro del ensamblaje del Framework, trato de imitar los espacios de nombres de las cosas para las que tengo métodos de extensión.Por ejemplo, si extiendo System.Web.HttpApplication, tendría un espacio de nombres "Framework.Web".Clases como "Cadena" y "Objeto", que se encuentran en el espacio de nombres "Sistema", se traducen al espacio de nombres raíz "Marco" en ese ensamblado.

Finalmente, el nombre sigue las líneas que especificó en la pregunta: el nombre del tipo con "Extensiones" como sufijo.Esto produce una jerarquía de clases como esta:

  • Marco (espacio de nombres)
    • Framework.ObjectExtensions (clase)
    • Framework.StringExtensions (clase)
    • Framework.Web (espacio de nombres)
      • Framework.Web.HttpApplicationExtensions (clase)

El beneficio es que, desde una perspectiva de mantenimiento, es muy fácil luego buscar los métodos de extensión para un tipo determinado.

Otros consejos

Hay dos formas en que organizo los métodos de extensión que uso,

1) Si la extensión es específica del proyecto en el que estoy trabajando, la mantengo en el mismo proyecto/ensamblado, pero en su propio espacio de nombres.

2) Si la extensión es de un tipo que puedo usar o también la uso en otros proyectos, entonces las separo en un ensamblaje común para extensiones.

Lo más importante a tener en cuenta es: ¿cuál es el alcance en el que los utilizaré?Organizarlos no es difícil si tengo esto en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top