programación - ¿Hay alguna sugerencia para desarrollar un documento de normas/mejores prácticas de codificación de C#?
manejo de excepciones en c# buenas practicas (26)
Soy un recién graduado de AI (alrededor de 2 años) trabajando para una operación modesta. Me ha tocado a mí (principalmente porque soy el primer ''adoptador'' en el departamento) crear un documento de estándares de codificación C # básico (¿es útil leerlo?).
Creo que debería explicar que probablemente soy el ingeniero de software más joven, pero espero con ansias esta tarea, ya que espero poder producir algo a medias. Realicé una búsqueda bastante extensa de Internet y leí artículos sobre lo que un documento de estándares de codificación debería / no debería contener. Esto parece un lugar tan bueno como cualquiera para pedir algunas sugerencias.
Me doy cuenta de que potencialmente estoy abriendo la puerta a todo un mundo de desacuerdos sobre ''la mejor manera de hacer las cosas''. Yo entiendo y respeto el hecho innegable de que cada programador tiene un método preferido para resolver cada tarea individual, como resultado, no estoy buscando escribir algo tan draconianamente proscriptivo como para sofocar el talento personal, sino para intentar obtener una metodología general y acordar estándares (por ejemplo, convenciones de nomenclatura) para ayudar a que los códigos de los individuos sean más legibles.
Así que aquí va ... ¿Alguna sugerencia? Cualquiera en absoluto?
Lo más probable es que esté configurado para fallar. Bienvenido a la industria.
No estoy de acuerdo, siempre y cuando él cree el documento, lo peor que puede pasar es que todos lo olviden.
Si otras personas tienen problemas con el contenido, puede pedirles que lo actualicen para mostrar lo que prefieren. De esta forma, está fuera de tu control, y los demás tienen la responsabilidad de justificar sus cambios.
Acabo de comenzar en un lugar donde los estándares de codificación exigen el uso de m_ para variables miembro, p_ para parámetros y prefijos para tipos, como ''str'' para cadenas. Por lo tanto, puede tener algo como esto en el cuerpo de un método:
m_strName = p_strName;
Horrible. Realmente horrible
Agregaría Code Complete 2 a la lista (sé que Jeff es un fanático de aquí) ... Si eres un desarrollador junior, el libro es útil para establecer tu mente de una manera que sienta las bases para lo mejor. prácticas de escritura de código y construcción de software allí.
Debo decir que llegué a este punto un poco tarde en mi carrera, pero rige muchas de las formas en que pienso sobre la codificación y el desarrollo del marco en mi vida profesional.
Vale la pena echarle un vistazo;)
Comenzamos con
- Pautas .NET de Microsoft: http://msdn.microsoft.com/en-us/library/ms229042.aspx (enlace actualizado para .NET 4.5)
- Pautas de C de Microsoft: http://blogs.msdn.com/brada/articles/361363.aspx .
y luego documentar las diferencias y adiciones a esa línea de base.
Como escribí tanto el publicado para Philips Medical Systems como el de http://csharpguidelines.codeplex.com , podría ser un poco parcial, pero tengo más de 10 años escribiendo, manteniendo y promoviendo estándares de codificación. Intenté escribir el único CodePlex con las diferencias de opinión en mente y pasé la mayoría de la introducción sobre cómo lidiar con eso en su organización particular. Léelo y bríndeme sus comentarios .....
Creo que me hago eco de los otros comentarios aquí que los lineamientos de MS ya vinculados son un excelente punto de partida. Modelo mi código en gran medida en esos.
Lo cual es interesante porque mi gerente me ha dicho en el pasado que no está muy interesado en ellos: D
Tienes una tarea divertida por delante, amigo mío. La mejor de las suertes, y por favor pregunte si necesita algo más :)
El estándar de Philips Medical Systems está bien escrito, y en su mayoría sigue las directrices de Microsoft: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf
Mis estándares se basan en esto con algunos ajustes y algunas actualizaciones para .NET 2.0 (el estándar de Philips está escrito para .NET 1.x, por lo que es un poco anticuado).
En el código que escribo, generalmente sigo las http://msdn.microsoft.com/en-us/library/ms229042.aspx para las API expuestas públicamente y las Pautas de codificación mono para el entubado y la indentación de miembros privados . Mono es una implementación de código abierto de .NET, y creo que esos tipos conocen su negocio.
Odio cómo el código de Microsoft desperdicia espacio:
try
{
if (condition)
{
Something(new delegate
{
SomeCall(a, b);
});
}
else
{
SomethingElse();
Foobar(foo, bar);
}
}
catch (Exception ex)
{
Console.WriteLine("Okay, you got me");
}
Lo que podría parecer extraño en las pautas de Mono, es que usan pestañas de 8 espacios. Sin embargo, después de un poco de práctica, descubrí que en realidad me ayuda a escribir código menos enredado al imponer un tipo de límite de sangría.
También me encanta cómo ponen un espacio antes de abrir paréntesis.
try {
if (condition) {
Something (new delegate {
SomeCall (a, b);
});
} else {
SomethingElse ();
Foobar (foo, bar);
}
} catch (Exception ex) {
Console.WriteLine ("Okay, you got me");
}
Pero por favor, no impongas algo así si tus compañeros de trabajo no les gusta (a menos que estés dispuesto a contribuir con Mono ;-)
Encontré la siguiente documentación muy útil y concisa. Viene del sitio idesign.net y es escrito por Juval Lowy.
NB: el enlace de arriba ahora está muerto. Para obtener el archivo .zip, debe darles su dirección de correo electrónico (pero no la usarán para comercializar ... honestamente). Intente here
He usado Juval antes y eso es todo si no excesivo, pero soy flojo y ahora solo me conformaré con la voluntad de Resharper .
Irónicamente, establecer los estándares reales es la parte fácil.
Mi primera sugerencia sería obtener sugerencias de los otros ingenieros sobre lo que ellos sienten que debería ser cubierto, y qué pautas sienten que son importantes. La aplicación de cualquier tipo de directrices requiere un grado de aceptación por parte de las personas. Si de repente deja caer un documento sobre ellos que especifica cómo escribir el código, encontrará resistencia, ya sea que sea el tipo más joven o mayor.
Después de tener un conjunto de propuestas, envíelos al equipo para comentarios y revisión. Nuevamente, haga que la gente compre en ellos.
Puede que ya existan prácticas de codificación informales que se adopten (p. Ej., Prefijar variables de miembros, nombres de funciones de camelcase). Si esto existe, y la mayoría de los códigos se ajustan a él, pagará formalizar su uso. Adoptar un estándar contrario va a causar más pena de lo que vale, incluso si es algo generalmente recomendado.
También vale la pena considerar la refacturación del código existente para cumplir con los nuevos estándares de codificación. Esto puede parecer una pérdida de tiempo, pero tener un código que no cumpla con los estándares puede ser contraproducente ya que tendrá una mezcolanza de diferentes estilos. También deja a las personas en un dilema si el código en un determinado módulo debe ajustarse al nuevo estándar o seguir el estilo de código existente.
Las propias reglas de Microsoft son un excelente punto de partida. Puede aplicarlos con FxCop.
Los otros carteles lo han señalado en la línea de base, todo lo que yo agregaría es hacer que su documento sea corto, dulce, y al punto, empleando una gran dosis de Strunk y White para distinguir los "imprescindibles" del "sería bueno si ".
El problema con los documentos de estándares de codificación es que nadie realmente los lee como deberían, y cuando los leen, no los siguen. La probabilidad de que dicho documento sea leído y seguido varía inversamente con su longitud.
Acepto que FxCop es una buena herramienta, pero una gran parte de esto puede quitar toda la diversión de la programación, así que ten cuidado.
Me sentiría tentado a aplicar StyleCop de Microsoft como estándar. Se puede aplicar en el momento de compilación. pero si tiene un código heredado, simplemente haga cumplir el uso de StyleCop en el nuevo código.
http://code.msdn.microsoft.com/sourceanalysis
Eventualmente tendrá una opción de refactorización para limpiar el código.
Nuestro estándar de codificación completo lee aproximadamente, "Use StyleCop".
Nunca escriba sus propios estándares de codificación utilizando los de MS (o los de Sun o ... según corresponda para su idioma). La clave está en el estándar de la palabra, el mundo sería un lugar mucho más fácil para codificar si cada organización no hubiera decidido escribir el suyo propio. ¿Quién realmente piensa que aprender un nuevo conjunto de ''estándares'' cada vez que cambia equipos / proyectos / roles es un buen uso del tiempo de cualquier persona. Lo máximo que debe hacer es resumir los puntos críticos, pero le aconsejo que no lo haga porque lo que es crítico varía de persona a persona. Otros dos puntos que me gustaría hacer sobre los estándares de codificación
- Cerrar es lo suficientemente bueno: cambiar el código para seguir los estándares de codificación al pie de la letra es una pérdida de tiempo siempre que el código esté lo suficientemente cerca.
- Si está cambiando el código que no escribió, siga los ''estándares de codificación locales'', es decir, haga que su nuevo código se vea como el código que lo rodea.
Estos dos puntos son la realidad de mi deseo de que todos escriban un código que se vea igual.
Personalmente, me gusta el que pdf ha creado. Pero no es por eso que estoy publicando ...
El truco de mi empresa fue tener en cuenta todos los idiomas diferentes. Y sé que mi compañía no está sola en esto. Usamos C #, C, ensamblaje (hacemos dispositivos), SQL, XAML, etc. Aunque habrá algunas similitudes en los estándares, cada uno generalmente se maneja de manera diferente.
Además, creo que los estándares de mayor nivel tienen un mayor impacto en la calidad del producto final. Por ejemplo: cómo y cuándo usar los comentarios, cuándo las excepciones son obligatorias (por ejemplo, eventos iniciados por el usuario), si (o cuándo) usar excepciones vs. valores de retorno, ¿cuál es la forma objetiva de determinar qué código debe ser controlador versus código de presentación? etc. No me malinterprete, también se necesitan estándares de bajo nivel (¡el formateo es importante para la legibilidad!) Solo tengo un sesgo hacia la estructura general.
Otra pieza a tener en cuenta es la aceptación y el cumplimiento. Los estándares de codificación son geniales. Pero si nadie está de acuerdo con ellos y (probablemente más importante) nadie los aplica, entonces todo es en vano.
Puede consultar esto, los 7 mejores estándares de codificación y documentos de guía para C # / .NET Developers http://www.amazedsaint.com/2010/11/top-6-coding-standards-guideline.html Esperamos que esto ayude
Recientemente encontré el Manual de Encodo C # , que incluye ideas de muchas otras fuentes (IDesign, Philips, MSDN).
Otra fuente puede ser las Pautas de codificación profesional de C # / VB .NET .
Siempre utilicé el pdf Juval Lowy como referencia al hacer internamente los estándares de codificación / mejores prácticas. Sigue muy de cerca a FxCop / Source Analysis , que es otra herramienta invaluable para asegurarse de que se siga el estándar. Entre estas herramientas y referencias, debe poder encontrar un buen estándar que a todos sus desarrolladores no les importe seguir y poder hacer cumplir.
Soy un gran admirador del libro de Francesco Balena " Pautas prácticas y mejores prácticas para desarrolladores de VB y C # ".
Es muy detallado y cubre todos los temas esenciales, no solo le da la regla, sino que también explica la razón detrás de la regla, e incluso proporciona una antirregulación donde podría haber dos mejores prácticas opuestas. El único inconveniente es que fue escrito para desarrolladores de .NET 1.1.
Tengo que sugerir el documento de dotnetspider.com .
Es un documento excelente y detallado que es útil en cualquier lugar.
Yo también sigo a Resharper. También la línea de guía mencionada en el blog de scott guthrie http://weblogs.asp.net/scottgu/archive/2007/10/08/october-8th-links-asp-net-asp-net-ajax-silverlight-and-net.aspx Y http://csharpguidelines.codeplex.com/releases/view/46280
IDesign tiene un documento de estándares de codificación C # que se usa comúnmente. También vea las Pautas de Diseño de Marco 2da Ed .
Incluye algunos estándares de C # + mucho más .... enfocados principalmente en los desarrolladores de Microsoft