una metodos metodo matematicas llamar instanciar funciones extensión extension ejemplos clases clase c# extension-methods code-organization

matematicas - metodos de extension c#



Organización de métodos de extensión (2)

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

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

2) Si la extensión es de un tipo para que yo pueda usarla en otros proyectos también, los separé en un conjunto común para extensiones.

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

¿Cómo organizas tus métodos de extensión? Digamos que si tuviera extensiones para la clase de objeto y la clase de cadena, estoy tentado de separar estos métodos de extensión en clases IE:

public class ObjectExtensions { ... } public class StringExtensions { ... }

¿Estoy haciendo esto demasiado complicado o tiene sentido?


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

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

Dentro de la Asamblea de 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 están en el espacio de nombres "Sistema", se traducen al espacio de nombres raíz "Marco" en ese ensamblaje.

Finalmente, nombrar sigue las líneas que ha especificado 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 la perspectiva del mantenimiento, es muy fácil encontrar más adelante los métodos de extensión para un tipo determinado.