programming practices net guidelines framework convenciones coding codigo code classes best and .net coding-style

.net - practices - naming convention



¿La directiva#region es realmente útil en.NET? (18)

Continuando con lo que Russell Myers dijo anteriormente, si aprende cómo refactorizar su código de forma adecuada (un experto en habilidades que los desarrolladores deben aprender), realmente no hay mucha necesidad de regiones.

Hace un par de semanas pensé que las regiones eran geniales porque me permitían esconder mi código de grasa, pero después de ejercitar mis habilidades de código pude hacerlo más delgado y ahora encajo en una clase de tamaño 7 (alguien debería TENER esa medida para refactorizar en el futuro!: P)

Después de mantener un montón de código lleno de #region (en C # y VB.NET), me parece que esta construcción es solo un montón de "hacer el trabajo" para el programador. Trabajar para PONER las cosas en el código, y luego hacen que buscar y leer código sea muy molesto.

¿Cuales son los beneficios? ¿Por qué los codificadores se toman la molestia adicional de poner esto en su código?

Hazme creyente!


Muchas veces, tanto parciales como # regiones se usan como una muleta para un mal diseño (por ejemplo, la clase es demasiado grande o trata de hacer demasiadas cosas).

El mejor uso que he tenido para #regions hasta ahora es la agrupación de funcionalidades que se ve en muchas clases diferentes. Por ejemplo, los objetos de valor que tienen getters, setters, constructores y campos de soporte. Bien podría agrupar esas ideas en regiones. Es una cuestión de opinión, sin embargo, si eso hace que el código sea más limpio o más difícil de leer.


Realmente no hay un beneficio. Son un olor a código. Después de usarlos por un tiempo, me cansé de ellos. Si necesita separar las cosas por funcionalidad, use una clase parcial.


Se pueden usar en exceso, pero me gustan para separar los métodos privados, los métodos públicos, las propiedades y las variables de instancia.


http://www.rauchy.net/regionerate/ - Regionalizó automáticamente su código;)

Soy fan de las regiones para agrupar secciones de clases grandes, decir todas las propiedades juntas, todas las constancias, etc. Soy alguien que está constantemente colapsando el código que no necesito ver en ese momento, así que me encantan las regiones para eso.

También encuentro regiones realmente útiles cuando se implementan interfaces, particularmente múltiples interfaces. Puedo agrupar los métodos, propiedades, eventos, etc. de cada interfaz, por lo que es más fácil a simple vista ver qué método pertenece a cada interfaz.


Al igual que cualquier característica del idioma, las regiones tienen el potencial de ser mal usadas y abusadas, pero también tienen sus beneficios.

Son geniales para crear grupos "plegables" alrededor de:

  • métodos, especialmente si tienes muchos métodos sobrecargados
  • implementaciones de interfaz
  • sobrecarga del operador

También puede usarlo para agrupar propiedades, métodos públicos / privados, eventos, variables de toda la clase, etc.

Uso regiones en mi código para ayudar a crear una estructura consistente en mi código, así que siempre sé dónde están las cosas de un vistazo. Sí, hace que las cosas sean un poco más difíciles durante la refacturación o la adición de nuevas funciones (especialmente cuando Auto Studio genera Visual Studio), pero creo que es un pequeño precio a pagar para mantener las cosas consistentes y estructuradas.


Encuentro que ofuscan el código en todos los usos menos simples. El único uso que defendemos en nuestros proyectos son los que utiliza el IDE (implementaciones de interfaz y código de diseñador).

Las herramientas correctas deben usarse para el propósito correcto. El código debe escribirse para mostrar intención y función en lugar de agrupar elementos arbitrariamente. Organizar cosas en la agrupación de modificadores de acceso o alguna otra agrupación simplemente parece ser ilógico. Creo que el código debe organizarse de manera que tenga sentido para la clase en particular; después de todo, hay otras herramientas para ver a los miembros de la clase por medio del modificador de acceso. Este es también el caso para casi cualquier otro uso de regiones; Hay una mejor manera.

Por ejemplo, agrupar propiedades, eventos, constantes o de otra manera juntos tampoco tiene sentido, ya que el código generalmente es más fácil de mantener si las cosas están agrupadas por función (como en, una propiedad que usa una constante debe estar cerca de esa constante, no cerca de otras propiedades no relacionadas solo porque es una propiedad).


Los utilizo todo el tiempo. De nuevo, como cualquier otra cosa, se pueden usar tanto para mal como para bien, y sin duda puede ser el sello distintivo del mal diseño, pero se pueden usar para ayudar a organizar el código muy bien.

#region Properties #region Update Section #region Accessors

Ciertamente deberías evitar el ejemplo de Jeff

#Sweep under carpet

Lo que me parece extraño sobre ellos, como señaló Jeff, es que son un comando de preprocesador de compilación para propósitos de la UI. Estoy seguro de que el equipo de VS podría haber hecho algo igualmente útil de otra manera.


A menudo los uso en lugar de comentarios para ordenar grupos de funcionalidad en el cuerpo de una clase, por ejemplo, "Interfaz pública de configuración", "Interfaz pública de estado", "Procesamiento interno" y "Gestión interna de subprocesos de trabajo".

Usando los atajos de teclado para "colapsar a las definiciones" y "expandir el bloque actual", puedo navegar fácilmente incluso en clases más grandes.

Desafortunadamente, Regions está roto para C ++, y MS no cree que deba ser reparado.


Buenas respuestas, estoy de acuerdo con ellos que dicen que a veces refleja mal diseño y codificación, pero la #región en realidad es útil si está creando documentación (estilo MSDN) con SandCastle. Digamos que tienes una API pública y hay alguna clase base para la que quieres dar un ejemplo de uso. Luego, documentaría adecuadamente sus métodos públicos y agregaría una región de ejemplo donde podría copiar y pegar algún código. El problema con esto es que cuando / si tu clase base cambia, se supone que debes cambiar el ejemplo eventualmente. Una mejor solución es incluir un proyecto de código de muestra en su solución y compilarlo todo junto, de modo que cada vez que construya su solución si el código de muestra no está actualizado, no compilará. Entonces, ¿qué tiene eso que ver con las regiones a las que te preguntarás por ahora? Bueno, mira esta muestra:

/// <example> /// The following code sample is an implementation of LoadPublishedVersion() for XmlPageProvider. /// <code source="../CodeSamples/EPiServerNET/PageProvider/XmlPageProvider.cs" region="LoadPublishedVersion" lang="cs"/> /// </example>

Observe que hay un enlace al archivo de muestra del código fuente y la región para el método que desea exponer como muestra en su documentación. Vea aquí el resultado . Ese método debe estar en una región adecuada y se incluirá automáticamente en su documentación. Es por eso que no descartaría #region aún.


Odio el uso excesivo de estos. Lo único que creo que les resulta útil es esconder cosas que probablemente nunca querrás volver a ver. Por otra parte, esas cosas probablemente deberían estar apagadas en una biblioteca en alguna parte.



Todos nuestros Business Objects tienen Regiones, y los amamos.

Tenemos;

  • Propiedades y métodos comerciales
  • Métodos compartidos
  • Constructores
  • Autorización
  • Acceso a los datos
  • Eventos

Tenemos algunos otros que dependen del tipo de objeto comercial con el que estamos tratando (suscriptor, etc.)

Para muchas clases, las regiones solo se interponen en el camino, pero para nuestros objetos comerciales estándar nos ahorran muchísimo tiempo. Estos Business Objects tienen código genérico, por lo que son muy consistentes. Puedo llegar a donde quiero estar mucho más rápido que el desorden si no lo están, y la consistencia hace que sea fácil encontrar las cosas de los demás.


Me encantan las regiones porque me ayuda a centrarme solo en lo que estoy trabajando. Los uso incluso si la clase solo tiene un método.

Utilizo fragmentos de código con regiones ya rellenados, que es menos tipeo. Siento que la clase está más organizada y hace que lo que dice Code Complete sea más agradable para que otras personas lo lean. El compilador simplemente los ignora, ahora deben hacer que el código sea más legible.


Mi día de trabajo comienza con la apertura de archivos en el editor y haciendo clic en "Expandir todo" para ocultar todas las regiones. Después de eso puedo comenzar a trabajar.


Generalmente no utilizo regiones de código, excepto en un caso específico: propiedades de dependencia. Aunque las propiedades de dependencia son un placer trabajar en la mayoría de los aspectos, sus declaraciones son una monstruosidad y rápidamente desordenan su código. (Como si administrar el código GUI no fuera ya un desafío suficiente ...)

Me gusta darle a la región el mismo nombre exacto que la declaración de propiedad CLR (copiarlo / pegarlo allí). De esta forma, puede ver el alcance, el tipo y el nombre cuando se contrae, lo cual es realmente lo único que le preocupa el 95% del tiempo.

#region public int ObjectDepthThreshold public int ObjectDepthThreshold { get { return (int)GetValue(ObjectDepthThresholdProperty); } set { SetValue(ObjectDepthThresholdProperty, value); } } public static readonly DependencyProperty ObjectDepthThresholdProperty = DependencyProperty.Register( &quot;ObjectDepthThreshold&quot;, typeof(int), typeof(GotoXControls), new FrameworkPropertyMetadata((int)GotoXServiceState.OBJECT_DEPTH_THRESHOLD_DEFAULT, FrameworkPropertyMetadataOptions.AffectsRender, new PropertyChangedCallback(OnControlValueChanged) ) ); #endregion

Cuando está colapsado, solo ves

public int ObjectDepthThreshold

Si tengo más de una propiedad de dependencia, me gustaría comenzar la siguiente #región en la siguiente línea. De esa manera terminas con todos ellos agrupados en tu clase, y el código es compacto y legible.

Por cierto, si solo quieres echar un vistazo a la declaración, desliza el mouse sobre ella.


Ya se ha hecho una pregunta similar .

pero...

Yo diría que ya no . Originalmente se pretendía ocultar el código generado de WinForms en las primeras versiones de .NET. Con clases parciales, la necesidad parece desaparecer. En mi humilde opinión, ahora se usa demasiado como una construcción organizacional y no tiene ningún valor de compilación. Es todo por el IDE.


Hay momentos en que sus métodos TIENEN que ser largos, especialmente con el desarrollo web. En esos casos (como cuando tengo una vista de cuadrícula con un objeto grande y complejo vinculado a ella) he encontrado que es útil usar regiones:

#region Declaring variables for fields and object properties #region Getting the fields in scope #region Getting the properties of the object #region Setting Fields

Estas son secciones discretas del método que PODRÍAN desglosarse, pero sería difícil (tendría que usar variables con mayor alcance del que me gusta o pasar MUCHAS variables como ''fuera''), y es una plomería básica.

En este caso, las regiones son perfectamente aceptables. En otros, son innecesarios.

También usaré regiones para agrupar métodos en grupos lógicos. Rechazo clases parciales para este fin, ya que tiendo a tener muchas páginas abiertas cuando estoy depurando, y cuantas menos clases parciales hay en un objeto (o página, o diálogo), más de las que puedo tener en mi lista de pestañas (que limito a una línea para que pueda ver más código).

Las regiones son solo un problema cuando se usan como muletas, o cuando cubren un código pobre (por ejemplo, si anida regiones dentro de la otra dentro del mismo alcance, es una mala señal).