c# - extended - extensions c sharp
Organizando c#proyecto ayudante o clases de utilidad (6)
¿Cuáles son algunas de las mejores prácticas para dónde debería tener clases de ayuda en un proyecto .NET? Refiriéndose a clases separadas de las cosas de la capa de negocios, pero a las presentaciones y aplicaciones como los administradores de configuración de configuración de aplicaciones y otros códigos que a veces serían específicos del módulo o que se usarían en toda la aplicación.
Casi siempre tengo una biblioteca de clases MyProject.Core en mi solución donde coloco cosas así.
Edit: podría haber respondido una pregunta "más grande".
En un solo proyecto, todo depende del tamaño del proyecto. Las Directrices de diseño de Microsoft hablan de que no debería crear un espacio de nombres si tiene menos de cinco tipos (corríjame si me equivoco con este número).
Colocamos estas clases en un conjunto llamado Common
por ejemplo, destinado a ser referenciado por todos los proyectos que lo necesitan, excepto en los casos en que el ayudante necesita usar algunos objetos de negocio u objetos centrales.
La mayoría de nosotros simplemente los tiramos en una carpeta de "Ayudantes".
Dependiendo del ayudante, es posible que desee marcar los métodos virtuales para que pueda burlarse si es necesario. Eso o enlace a una interfaz que implementa, pero si solo tiene una interfaz concreta por interfaz, podría ser una exageración.
A menos que los métodos de ayuda sean cálculos puros sin dependencias externas, bajo ninguna circunstancia deben ser estáticos.
Incluso entonces, reconsiderar.
Siempre permito que cosas como esta sean bastante fluidas. Dicho esto:
- Pruebo las clases de "ayudante" de la misma manera que cualquier otra clase. Esto los hace tender a no ser estáticos.
- Puedo comenzar creando estos ayudantes como métodos individuales cuando sea necesario. Cuando descubra que son necesarios en más de una clase, los moveré a su propia clase o una clase de "Utilidades" en el mismo proyecto.
- Si encuentro que son necesarios en más de un proyecto, luego los muevo hacia arriba en la "jerarquía": de proyecto a solución, de solución a subsistema, de subsistema a aplicación, de aplicación a biblioteca o marco, etc.
Tiendo a hacer una combinación de lo que hacen Randolpho y Ben: uso clases estáticas de ayuda en una carpeta de "Utilidades" en un espacio de nombres de Utilidades. Mejor organización de archivos, mantiene el resto del espacio de nombres de la aplicación limpio.
Tiendo a ponerlos en un espacio de nombres utils. Ya sea en el espacio de nombres del proyecto principal si son bastante generales, por ejemplo, MyProject.Utils.MyHelperClass
, o si son más específicos, entonces un espacio de nombres secundario MyProject.CRM.Utils.MyCRMHelperClass
.