una trabajo tipo son sirve que proyecto parcial para objetos métodos modo modificador metodos los llamar falta declaración cuáles consola clases clase básicos agregar acceso c# coding-style partial-classes

trabajo - metodos de acceso c#



Mejores prácticas: cuando no/para usar clases parciales (10)

Creo que si las clases anidadas son lo suficientemente grandes como para sentir la necesidad de dividirlas en sus propios archivos, probablemente no deberían ser clases anidadas. En su lugar, conviértelos en miembros internos del mismo espacio de nombres como MainClass.

Las clases parciales realmente solo existen para soportar generadores de código y usarlas para dividir el código escrito del programador en fragmentos manejables es un indicador de diseño deficiente.

Vea este artículo para un ejemplo hilarante de lo que no se debe hacer con las clases parciales.

He estado usando el modificador de clase parcial por un tiempo para poner clases de ayuda en su propio archivo.

Hoy tenemos un chico nuevo y él dijo que el último equipo con el que trabajó no permitió clases parciales para esto porque modificar una clase auxiliar que está en un archivo separado haría que el archivo de la clase parcial principal se descontrolara con los cambios . Además, solo se les permitió colocar clases de ayuda dentro de la clase principal como último recurso para que todo permaneciera desacoplado.

¿Qué piensas? ¿Hay algún problema al usar clases parciales como esta o se reduce a preferencia?

Por ejemplo, generalmente tengo algo como esto:

  • MainClass.cs
  • MainClass.Helper1.cs
  • MainClass.Helper2.cs

...

// Inside of MainClass.cs I have code like this: public abstract partial class MainClass { // ... } // Then in the MainClass.Helper1.cs I have: partial class MainClass { private class Helper1 { // ... } }


Las clases parciales son principalmente para el uso del generador de código, como los diseñadores, pero utilizo el enfoque que ha citado, en particular cuando un objeto implementa interfaces múltiples (no triviales). Me resulta útil dividirlo en 1 archivo por implementación de interfaz. . También comúnmente tengo un archivo para los métodos estáticos, que generalmente son lo suficientemente diferentes de los métodos de instancia para garantizar la separación.


No soy un gran admirador de las clases parciales y no las uso yo mismo.

La única vez que los encuentro útiles y aceptables para usar, sin embargo, es cuando desea agregar algo al código de diseñador de LINQ to SQL, pero aparte de eso, me parece que si está distribuyendo el código en diferentes archivos solo por el simple hecho de hacerlo , puede hacer que sea muy difícil de leer y administrar.

Tal vez si tienes clases divididas en muchos archivos, tal vez tus clases estén haciendo mucho ... solo un pensamiento :)


Personalmente, no puedo ver nada malo con el uso de clases parciales como esta, pero esa es solo mi propia opinión. Lo único que podría parecer "mala práctica" es nombrar sus clases "Helper1" y "Helper2" (pero eso podría ser solo un ejemplo para aclarar).

Si está utilizando clases parciales como esta, revise los (add) vsCommands (gratuitos) para Visual Studio 2008 que hacen que sea muy fácil agrupar archivos en el explorador de soluciones (al igual que los archivos de diseño) sin editar el archivo del proyecto.


Respuesta corta: si todas las clases son su código, realmente no necesita clases auxiliares, lo que invalida su necesidad de parciales.

Respuesta larga: no estoy seguro de que haya algo que diga que tu práctica es explícitamente incorrecta. Según mi experiencia, si tienes varios archivos diferentes que componen toda la clase, necesitas una buena razón para hacerlo, porque:

  1. Las clases parciales reducen algo la legibilidad
  2. Si sus clases tienen múltiples clases de ayuda dentro de ellas, puede ser un síntoma de un diseño deficiente, no creo que alguna vez me haya encontrado en una situación en la que me vi obligado a escribir clases de ayuda para las clases que creé.

Sin embargo, creo que la mejor razón para usar clases parciales es la generación de código, donde se desea poder volver a generar un archivo sin perder el trabajo personalizado.


Creo que es bueno recordar que el comportamiento predeterminado de su herramienta es crear una forma de bajo nivel de Coincidencia, no Cohesión; y verlo con escepticismo, y anularlo a menos que tenga sentido por algunas de las razones específicas enumeradas anteriormente. Pero no es un buen comportamiento predeterminado.


De hecho, he hecho lo mismo. Como se ha indicado, hay un ligero impacto de legibilidad en descifrar las clases parciales.

El desacople es la razón principal por la que me gusta esta solución. Una clase privada interna está mucho menos acoplada a todo lo demás, porque nada más puede verla o usarla (aunque pueden estar hablando de la posibilidad de que acceda a los datos privados de la clase padre, lo que normalmente sería una mala idea).


La mayoría de las veces utilizo la clase parcial solo con la generación de código, por lo que puedo ampliar el comportamiento de mis clases en clases separadas que necesitan cierta personalización y no se incluyen en la generación de código.


En mi experiencia, no hay diferencia entre la clase noramal y la clase parcial. Si su diseño requiere una gran estructura de clase o la implementación de más interfaces, entonces vaya a la clase parcial. De todos modos, ambos son iguales.


Por lo general, nunca utilizo clases parciales por las mismas razones indicadas anteriormente.

¡Pero! Aunque no es frecuente, a veces he descubierto que una prueba exhaustiva de una clase (generalmente clases externas) conduce a clases de prueba unitarias gigantes. La división de la clase de prueba de la unidad en clases parciales lo hace un poco más fácil para los ojos y para comprender.

De forma similar a la idea de agrupación cuando hereda de múltiples interfaces, la prueba unitaria se puede agrupar para funciones.