Table of contents
Introduccin.......................................................................................................3
Alcance..........................................................................................................3
Empezando........................................................................................................3
System requirements.....................................................................................3
Estilo..............................................................................................................4
Codificacin.......................................................................................................5
Pautas Generales...........................................................................................5
Notacin........................................................................................................6
Conceptos..................................................................................................8
Notacin CamelCase..................................................................................9
Definicin, su mbito o Alcance..................................................................10
Definicin de Variables................................................................................10
Definicin de Constantes.............................................................................10
Definicin de Enumeradores........................................................................10
Definicin de una Clase...............................................................................10
C#....................................................................................................................10
Buenas Practicas..........................................................................................10
Notacin......................................................................................................11
Identacion, Espaciado y Agrupacin............................................................12
Comentarios................................................................................................14
Test Unitario.................................................................................................15
Convenciones..............................................................................................16
Nomenclatura..........................................................................................16
Diseo......................................................................................................16
Comentarios............................................................................................16
Lenguaje..................................................................................................16
ASP NET...........................................................................................................21
TERMINOLOGIA................................................................................................23
Introduccin
En el presente documento se definirn los estndares de programacin para las Aplicaciones .NET bajo
las 3 Capas de Desarrollo de Aplicaciones: Presentacin, Reglas de Negocio y Acceso a Datos.
Asimismo, el presente documento pretende ser una Gua General de Estndares para el desarrollo de toda
Aplicacin basada en Tecnologa .NET.
Created with the Personal Edition of HelpNDoc: Easily create Web Help sites
Alcance
Este documento describe reglas y recomendaciones para el desarrollo de aplicaciones y libreras de clases
usando el lenguaje C#, Visual Basic y ASP. La meta es definir lneas guas para enmarcar la consistencia
de estilo y de formato y ayudar a los desarrolladores a evitar errores comunes.
A pesar de ser un tema complejo, crear estndares para la programacin puede ser de mucha utilidad para
desarrolladores dentro de la organizacin, es por eso que estos estndares deben tender a lo prctico.
Las tcnicas mencionadas en el presente trabajo, no pretenden forman conjuntos inflexibles de
estndares, ms bien, intenta servir de gua en el desarrollo de un estndar para este proyecto especfico
de software o para un conjunto de proyectos con similares caractersticas.
Abarcar los conceptos de nomenclaturas, definicin de variables, mtodos, manejo de errores y
comentarios as como algunas buenas prcticas de programacin
Establecer la nomenclatura: nombrar proyectos, archivos de cdigo fuente, e identificadores incluyendo
campos, variables, propiedades, mtodos, parmetros, clases, interfases y espacios de nombres
(Namespaces).
Created with the Personal Edition of HelpNDoc: Easily create Help documents
Empezando
Created with the Personal Edition of HelpNDoc: Produce Kindle eBooks easily
System requirements
Ide
Visual Studio .NET 2008
Lenguaje de Programacin
Lenguaje C#
Created with the Personal Edition of HelpNDoc: Produce electronic books easily
Estilo
Formato
1. Nunca declarar ms de un espacio de nombres por archivo.
2. Evitar colocar mltiples clases en un mismo archivo.
3. Siempre colocar llaves ({ y }) en lneas separadas a excepcin de cuando se declaran las
propiedades Get y Set.
4. Declarar cada variable independientemente nunca en la misma sentencia.
5. Colocar la sentencia using en la parte superior del archivo. El grupo de los espacios de nombres
de .NET colocarle por encima de los espacios de nombres particulares y todos en ordenados
alfabticamente.
Ejemplo:
using System;
using System.Collections
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using Gustozzi.BE;
using Acceso_a_Datos;
Comentarios
1. Usar // o /// pero no /* */
2. No utilizar marcos de asteriscos.
Ejemplo:
//******************************************
// Cuadro de comentarios
//******************************************
3. Tratar de usar comentarios en el interior de los mtodos para explicar aspectos globales del algoritmo.
4. No utilizar comentarios para explicar cdigo obvio.
6.
Evitar declarar variables de cadena con valores literales. En lugar use constantes, recursos,
registros de sistema u otro tipo de repositorio de datos.
7.
8.
Control de Excepciones
1.
2.
3.
4.
5.
6.
7.
Solo usar el bloque finally para liberar recursos utilizados en el bloque try
8.
Codificacin
Created with the Personal Edition of HelpNDoc: Full-featured Help generator
Pautas Generales
Pautas Generales
1. Evitar nombres totalmente en MAYSCULAS o en minsculas a menos que estos sean de una sola
palabra.
2. Nunca usar nombres que comiencen con caracteres numricos.
3. Todos los nombres a utilizar deben ser especficos y deben tener el largo necesario para ser
entendidos.
4. Evitar el uso de abreviaturas a menos que el nombre completo sea excesivo. En los casos necesarios,
las abreviaturas deben ser totalmente conocidas y aprobadas por todos los integrantes.
5. Nunca usar palabras reservadas para nombres.
Prefijo de Controles
Prefijo (minsculas)
bto
txt
grv
Objeto/Control
Boton
TextBox
GridView
lbl
Label
lst
ListBox
cr
CrystalReportViewer
wf
WebForm
ddwn
DropDownList
Variables
Los nombres de variables iniciarn con la descripcin del tipo que las contendr seguido de un nombre
que las especifique claramente sin llegar a ser demasiado extenso.
Created with the Personal Edition of HelpNDoc: Free iPhone documentation generator
Notacin
I. Resumen
Notacin
Pascal
Camel
Hngara
Descripcin
Especifica que la primera letra de cada palabra
utilizada en el identificador debe estar en
maysculas.
Tiene dos variantes: UpperCamel (igual que
Pasca) y LowerCamel (camel por si misma)
Es similar a la notacin Pascal pero con prefijos;
estos prefijos significan el tipo del identificador.
Ejemplos
PrecioMinimo, ValorDeuda, SaldoCliente,
MontoAcumuladoActual
lowerCamel: saldoCliente, precioLista,
montoAcumuladoActual
curSaldoCliente, strCodigoArticulo
Camel Case
Es quizs la ms famosa y la que, aparte de los lenguajes de programacin, tambin se le he visto fuera
de estas. Existen en principio dos variantes de esta notacin, la UpperCamelCase y la lowerCamelCase.
La principal diferencia entre ambas es que en el caso del upper la primera letra siempre se escribir en
mayscula mientras que en la segunda la primera palabra siempre ser entera en minsculas.
Pascal
Es igual que la UpperCamel.
Hngara
La notacin hngara est basada en parte en CamelCase, especficamente la lowerCamelCase. En su
versin ms bsica, tenemos varios tipos de datos los que reciben una letra. De esa forma, un string
recibir la letra s, un int la letra i, un decimal la letra d. Un arreglo recibir por supuesto la letra a.
Teniendo eso en cuenta, y combinndola con la CamelCase no resulta difcil pensar en qu sigue: Un
nombre cualquiera para nuestra variable siguiendo las reglas del CamelCase.
De esta forma, podemos tener:
aIndicadorResultados
iContador
sPrimerNombre
De esta forma, con slo una mirada podemos saber de qu tipo es nuestra variable, y mediante
CamelCase (asignndole un nombre significativo) podremos saber cul es su funcin, lo cual encuentro
ideal en un lenguaje como PHP donde una misma variable puede ser un float o un bit al momento
siguiente.
Lenguaje de Programacin
Identifier
Namespace
Classes
Interface
Casing
Pascal
Pascal
Pascal
Method
Pascal
Property
Public
Pascal
Example
namespace System.Security { ... }
public class StreamReader { ... }
public interface IEnumerable { ... }
* Lleva siempre la "I" inicial
public class Object {
public virtual string ToString();
}
public class String {
public int RecordID { get; }
}
Property
Private
"_"+LCamel
Event
Pascal
Field
Pascal
Enum value
Pascal
Parameter
LCamel
Base de Datos
Identifier
Nombre de
tabla
Casing
Pascal
Atributos
(campos)
Funciones
LCamel
Stored
Procedures
prefijo+P
ascal
Pascal
Parmetros
LCamel
en SP
Vistas
prefijo+Pasc
al
Example
Modulo, Cliente, Usuario, OrdenVenta, OrdenCompra,
Importacion
* En singular; sin tildes
* Nombre de Funcionalidad o Entidad
idRegistro, fechaRegistro, apellidoPaterno
* No abreviaturas, salvo prefijos autorizados
ContarPalabras, ValidaRUC, ExtraeTexto
* Caracter genrico, altamente reutilizable
procClienteInserta
getSaldoVencido
updOrdenCompra
@idCliente
vwClienteFacturacion
Abreviaturas autorizadas
Abreviatur
a
id
Ambito
Explicacin
propiedades
Notaciones:
Pascal (UpperCamel)
camel (lowerCamel)
Created with the Personal Edition of HelpNDoc: Full-featured multi-format Help generator
Conceptos
Resumen
Notacion
Pascal
Descripcin
Especifica que la primera letra de cada palabra
Ejemplos
PrecioMinimo, ValorDeuda, SaldoCliente,
Camel
Hungara
MontoAcumuladoActual
lowerCamel: saldoCliente, precioLista,
montoAcumuladoActual
curSaldoCliente, strCodigoArticulo
Camel Case
Es quizs la ms famosa y la que, aparte de los lenguajes de programacin, tambin se le he visto fuera
de estas. Existen en principio dos variantes de esta notacin, la UpperCamelCase y la lowerCamelCase.
La principal diferencia entre ambas es que en el caso del upper la primera letra siempre se escribir en
mayscula mientras que en la segunda la primera palabra siempre ser entera en minsculas.
Pascal
Es igual que la UpperCamel.
Hngara
La notacin hngara est basada en parte en CamelCase, especficamente la lowerCamelCase. En su
versin ms bsica, tenemos varios tipos de datos los que reciben una letra. De esa forma, un string
recibir la letra s, un int la letra i, un decimal la letra d. Un arreglo recibir por supuesto la letra a.
Teniendo eso en cuenta, y combinndola con la CamelCase no resulta difcil pensar en qu sigue: Un
nombre cualquiera para nuestra variable siguiendo las reglas del CamelCase.
De esta forma, podemos tener:
aIndicadorResultados
iContador
sPrimerNombre
De esta forma, con slo una mirada podemos saber de qu tipo es nuestra variable, y mediante
CamelCase (asignndole un nombre significativo) podremos saber cul es su funcin, lo cual encuentro
ideal en un lenguaje como PHP donde una misma variable puede ser un float o un bit al momento
siguiente.
Notacin CamelCase
CamelCase es la prctica de escribir palabras compuestas o frases en las que las palabras estn unidas
sin espacios como por ejemplo BreakFast, myName etc.
CamelCase se llama as debido a que cada palabra en el identificador se junta sin espacios, pero con la
primera letra de cada palabra en mayuscula, mirando como jorobas de un camello.
Hay dos variedades en CamelCase: UpperCamelCase y lowerCamelCase.
En las variables, referencias, nombres de mtodos se declaran en lowerCamelCase.
int animalCount;//Variable declared using lowerCamelCase
public abstract int getAnimalCount();//Method defined using UpperCamelCase
UpperCamleCase tambin se llama como notacin Pascal.
La nica diferencia entre el LowerCamelCase y UpperCamelCase (notacin Pascal) es que la primera letra
de la palabra compuesta se capitaliza (escribe en mayuscula). En algunos lenguajes de programacin los
nombres de clase se declaran en notacin UpperCamelCase.
class AnimalTest //Observe the UpperCamelCase notation used for declaring the class name
{
String name;
public AnimalTest(String name)
{
this.name=name;
}
}
Microsoft .NET recomienda UpperCamelCase para la mayora de los identificadores (lowerCamelCase se
recomienda para los parmetros y variables) y es una convencin comn de los lenguajes .NET.
Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor
Definicin de Variables
Created with the Personal Edition of HelpNDoc: Free EPub producer
Definicin de Constantes
Created with the Personal Edition of HelpNDoc: Free help authoring tool
Definicin de Enumeradores
Created with the Personal Edition of HelpNDoc: Full-featured Documentation generator
C#
Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor
Buenas Practicas
1. En C#: Utilizar tipos especficos de C# (alias) en lugar de los tipos definidos en el namespace System.
2. Para comparar dos strings se debe utilizar el String.Equal pasando cmo parmetro el
StringComparison para evitar diferencias entre maysculas y minsculas, as como tambin las
diferentes culturas.
3. Utilizar String.Empty en lugar de .
4. Evitar mtodos y propiedades pblicas, a menos que sea estrictamente necesario el acceso desde
afuera de la clase. Utilizar el keyword internal si estos miembros deben ser accedidos desde dentro del
mismo assembly.
5. Utilizar el archive AssemblyInfo para completar informacin como Nmero de versin, Descripcin,
Compaa, Copyright, etc.
6. Al abrir conexiones a bases de datos, Sockets, Streams, etc. siempre cerrarlos en los bloques finally.
Esto asegurar que an ante la eventualidad de una excepcin, estos accesos sern cerrados. Se
puede usar el Using en caso de no tener que capturar una excepcin en particular dentro del catch.
7. La declaracin de las variables locales de un mtodo, deber realizarse en el bloque superior de ste.
Todas las variables deben estar declaradas en el mismo lugar y deben ser iniciadas para limpiar su
valor predeterminado.
8. Utilizar la clase StringBuilder en lugar de String cuando sea requerido manipular cadenas en loops y
en operaciones de concatenacin intensivas ya que ste reporta una mejor performance. En caso de
tratarse de concatenaciones simples, utilizar String.Concat.
9. Utilizar el largo de cadenas para determinar si stas son vacas, en lugar de realizar una comparacin
con una cadena vaca. Si la variable puede tener el valor null, es posible tambin utilizar el mtodo
String.IsNullOrEmpty para realizar esta verificacin:
if ( String.IsNullOrEmpty(customerName))
Created with the Personal Edition of HelpNDoc: Easily create CHM Help documents
Notacin
CRITERIOS DE CODIFICACION
Los trminos Pascal Casing y Camel Casing son utilizados a lo largo de esta seccin.
Pascal Casing: Establece que el primer carcter de todas las palabras se expresa en mayscula y el resto
de los caracteres en minscula, por ejemplo: CustomerOrder.
Camel Casing: Define que el primer carcter de todas las palabras, excepto la primera palabra se expresa
en mayscula y el resto de los caracteres en minscula, por ejemplo: customerOrder.
NOMENCLATURA
1. Se deber utilizar Pascal Casing para los nombres de clases y para los nombre de los mtodos
2. El nombre del archivo debe coincidir con el nombre de la clase y debe respetar la notacin Pascal
Casing.
3. Se deber utilizar Camel casing para nombrar variables y parmetros de mtodos.
6. Utilizar el prefijo I con Pascal Casing para nombrar Interfaces ( Ejemplo: IUser)
7. No se debe anteponer ningn prefijo que represente el tipo de datos de variables o constantes.
8. No utilice caracteres de subrayado (_) para nombres de variables locales.
9. Todas las variables de miembros deben estar precedidas por el carcter de subrayado (_) de modo
que puedan diferenciarse de otras variables locales.
10. Utilizar prefijos como is o similares al nombrar variables de tipo bool.
private bool isFinished;
11. Evite los nombres completo de tipo, en su lugar utilice la instruccin using.
12. Con los genricos, use maysculas para los tipos
13. Se debe respetar el siguiente patrn de nomenclatura para los elementos de interfaz de usuario, de
modo que se les pueda diferenciar del resto de las variables. Se agregar un prefijo que haga
referencia al tipo de control que se nombra, segn la siguiente lista:
Created with the Personal Edition of HelpNDoc: Easy to use tool to create HTML Help files and
Help web sites
5. Una nica lnea en blanco debe separar un mtodo de otro, dentro de una clase.
6. Las llaves deben estar en una lnea independiente y no en la misma lnea que if, for, etc.
7. Utilizar un nico espacio antes y despus de cada operador, as como tambin entre trminos
utilizados durante la invocacin de mtodos.
8. Mantener las variables de miembro, propiedades y mtodos en la parte superior del archivo, y
miembros pblicos en la parte inferior del mismo.
9. Utilizar #region para agrupar piezas de cdigo relacionadas. Si se utiliza la agrupacin adecuada
mediante #region, una clase o pgina deber lucir solamente con las regiones cuando todas las
definiciones se contraigan. Mantener las variables miembro privadas, las propiedades y mtodos
privados en la parte superior del archivo y los miembros pblicos en la parte inferior.
Created with the Personal Edition of HelpNDoc: Easily create Web Help sites
Comentarios
Comentarios correctos y significativos hacen al cdigo ms mantenible, sin embargo, se han de seguir los
siguientes lineamientos:
1. No comentar todas y cada una de las lneas de cdigo ni cada variable declarada.
2. Utilizar // o /// para introducir comentarios. Evitar usar /* */ con comentarios de bloque.
3. Escribir comentarios donde sea requerido. Tener en cuenta que el buen cdigo legible requerir de
pocos comentarios. Si todas las variables, mtodos, constantes tienen nombres significativos, esto har
que el cdigo sea fcilmente legible y no requiera de la introduccin de comentarios en exceso.
4. No escribir comentarios en porciones en las que el cdigo es fcilmente entendible y no requiere de
conocimiento especfico para su comprensin.
5. Si se debe utilizar lgica de negocio, se debe documentar correctamente con suficientes comentarios.
6. Si se inicializa una variable a un nmero especial distinto de 0, -1, String.Empty o Null, se deber
documentar la razn por la que se ha escogido dicho valor.
7. Corroborar ortografa, gramtica y semntica de los comentarios, asegurndose de que la puntuacin
es utilizada correctamente.
8. Agregar la documentacin del encabezado de cada mtodo (utilizando ///), especificando
correctamente:
El propsito del mtodo
Encabezado de
seccin
Finalidad
Premisas
Efectos
Entradas
Resultados
obvio).
Todos los argumentos que puedan no ser
obvios. Los argumentos se escriben en una
lnea aparte con comentarios de lnea.
Explicacin de los valores devueltos por las
funciones.
Created with the Personal Edition of HelpNDoc: Free PDF documentation generator
Test Unitario
Cada una de las operaciones desarrolladas deber contar con tantos test unitarios como escenarios de
prueba se deseen.
Creacin de test unitarios
Cada test unitario deber ser creado bajo la carpeta ProjectoName\Tests, y categorizado (en la forma de
proyecto) en funcin del mdulo al que corresponda.
A su vez, dentro de cada proyecto de test, se deber crear una carpeta con el mismo nombre del proyecto
en el que se encuentra la clase para la cual se desea crear el Test.
Cada archivo correspondiente a un test unitario, deber ser nombrado respetando el siguiente patrn:
UnitTest + [Nombre Clase que se testea]
Cada nombre de mtodo cumplir con la forma Test_ + [Nombre Mtodo] + [Descripcin de Entrada]
Ejemplos:
Los test unitarios correspondientes al mdulo de Customers, debern ser colocados bajo la carpeta
ProjectoName\Tests en el proyecto Customers.
Si se desea verificar el mtodo ValidateCustomer de una clase de nombre CustomerServices,
correspondiente al mdulo Customers se seguirn los siguientes pasos:
Se crear la clase UnitTestCustomerServices y se ubicar en Projecto\Tests\Customers.
Dentro de la clase antedicha, se crear el mtodo de Test_ValidateCustomer_InvalidNumbers.
Se agregar cdigo para verificar que la validacin de clientes opera de acuerdo a lo esperado cuando
recibe ingresos no vlidos.
Alcance de la validacin
Cada mtodo de validacin que sea creado debe contemplar los casos que se tracen como posibles
escenarios de ejecucin vlidos, incluyendo casos de borde
Organizacin de Tests
Para cada mdulo de la solucin se deber crear una Test List (Men Test, Create Test List) que incluya
todos los test asociados al mdulo. Esto permitir que los mismos sean administrados de forma conjunta.
Prcticas recomendadas
1. Evitar crear dependencias entre tests que impliquen que deban ser ejecutados en un orden particular.
Cada test unitario debe ser independiente.
2. Asegurarse de que los tests cubren todas las operaciones definidas en cada servicio.
3. Crear una clase de test para cada una de las clases que se desean verificar. Esto simplificar la
organizacin de los tests y facilitar la tarea de seleccionar la ubicacin de cada uno de ellos.
4. Evitar crear tests que involucren informacin especfica del equipo, como por ejemplo versiones de
software, tipo de arquitectura de procesador, rutas de acceso.
5. Ejecutar absolutamente todos los test desarrollados, cuando se realicen cambios, antes de hacer
check-in y previo al empaquetado de una nueva versin.
Created with the Personal Edition of HelpNDoc: Easily create HTML Help documents
Convenciones
Created with the Personal Edition of HelpNDoc: Free EPub producer
Nomenclatura
Created with the Personal Edition of HelpNDoc: Create iPhone web-based documentation
Diseo
Un buen diseo utiliza un formato que destaque la estructura del cdigo y haga que el cdigo sea ms fcil
de leer. Las muestras y ejemplos de Microsoft cumplen las convenciones siguientes:
1. Utilice la configuracin del Editor de cdigo predeterminada (sangra automtica, sangras de 4
caracteres, tabulaciones guardadas como espacios). Para obtener ms informacin, vea Opciones,
editor de texto, C#, formato.
2. Escriba solo una instruccin por lnea.
3. Escriba solo una declaracin por lnea.
4. Si a las lneas de continuacin no se les aplica sangra automticamente, hgalo con una tabulacin
(cuatro espacios).
5. Agregue al menos una lnea en blanco entre las definiciones de mtodo y las de propiedad.
6. Utilice parntesis para que las clusulas de una expresin sean evidentes, como se muestra en el
cdigo siguiente.
Created with the Personal Edition of HelpNDoc: Easily create iPhone documentation
Comentarios
1.
2.
3.
4.
Lenguaje
En las secciones siguientes se describen las prcticas que sigue el equipo C# para preparar las muestras
y ejemplos de cdigo.
Para anexar cadenas en bucles, especialmente cuando se trabaja con grandes cantidades de texto,
utilice un objeto StringBuilder.
var phrase = "lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala";
var manyPhrases = new StringBuilder();
for (var i = 0; i < 10000; i++)
{
manyPhrases.Append(phrase);
}
//Console.WriteLine("tra" + manyPhrases);
Utilice tipos implcitos para las variables locales cuando el tipo de la variable sea obvio desde el lado
derecho de la asignacin, o cuando el tipo exacto no sea importante.
// When the type of a variable is clear from the context, use var
// in the declaration.
var var1 = "This is clearly a string.";
var var2 = 27;
var var3 = Convert.ToInt32(Console.ReadLine());
No utilice var cuando el tipo no sea evidente desde el lado derecho de la asignacin.
// When the type of a variable is not clear from the context, use an
// explicit type.
int var4 = ExampleClass.ResultSoFar();
No confe en el nombre de variable para especificar el tipo de la variable. Puede no ser correcto.
// Naming the following variable inputInt is misleading.
// It is a string.
var inputInt = Console.ReadLine();
Console.WriteLine(inputInt);
Evite el uso de var en lugar de dynamic.
Utilice tipos implcitos para determinar el tipo de la variable de bucle en bucles for y foreach.
En el ejemplo siguiente se usan tipos implcitos en una instruccin for.
var syllable = "ha";
var laugh = "";
for (var i = 0; i < 10; i++)
{
laugh += syllable;
Console.WriteLine(laugh);
}
Delegados
Utilice sintaxis concisa para crear instancias de un tipo de delegado.
// First, in class Program, define the delegate type and a method that
// has a matching signature.
// Define the type.
public delegate void Del(string message);
// Define a method that has a matching signature.
public static void DelMethod(string str)
{
Console.WriteLine("DelMethod argument: {0}", str);
}
// In the Main method, create an instance of Del.
// Preferred: Create an instance of Del by using condensed syntax.
Del exampleDel2 = DelMethod;
// The following declaration uses the full syntax.
Del exampleDel1 = new Del(DelMethod);
Instrucciones try-catch y using en el control de excepciones
Simplifique el cdigo mediante el uso de la instruccin using de C#. Si tiene una instruccin try-finally
en la que el nico cdigo del bloque finally es una llamada al mtodo Dispose, utilice en su lugar una
instruccin using.
// This try-finally statement only calls Dispose in the finally block.
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
{
((IDisposable)font1).Dispose();
}
}
// You can do the same thing with a using statement.
using (Font font2 = new Font("Arial", 10.0f))
{
byte charset = font2.GdiCharSet;
}
Operadores && y ||
Para evitar excepciones y aumentar el rendimiento omitiendo las comparaciones innecesarias, utilice
&& en lugar de & y || en lugar de | cuando realice comparaciones, como se muestra en el ejemplo
siguiente.
Console.Write("Enter a dividend: ");
var dividend = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter a divisor: ");
var divisor = Convert.ToInt32(Console.ReadLine());
// If the divisor is 0, the second clause in the following condition
// causes a run-time error. The && operator short circuits when the
// first expression is false. That is, it does not evaluate the
// second expression. The & operator evaluates both, and causes
// a run-time error when divisor is 0.
if ((divisor != 0) && (dividend / divisor > 0))
{
Console.WriteLine("Quotient: {0}", dividend / divisor);
}
else
{
Console.WriteLine("Attempted division by 0 ends up here.");
}
New (Operador)
Utilice la forma concisa de la creacin de instancias de objeto con tipos implcitos, como se muestra en
la siguiente declaracin.
var instance1 = new ExampleClass();
La lnea anterior es equivalente a la siguiente declaracin.
ExampleClass instance2 = new ExampleClass();
Control de eventos
Si va a definir un controlador de eventos que no es necesario quitar ms tarde, utilice una expresin
lambda.
public Form2()
{
// You can use a lambda expression to define an event handler.
this.Click += (s, e) =>
{
MessageBox.Show(
((MouseEventArgs)e).Location.ToString());
};
}
// Using a lambda expression shortens the following traditional definition.
public Form1()
{
this.Click += new EventHandler(Form1_Click);
}
void Form1_Click(object sender, EventArgs e)
{
MessageBox.Show(((MouseEventArgs)e).Location.ToString());
}
Miembros estticos
Llame a miembros estticos con el nombre de clase: ClassName.StaticMember. Esta prctica hace que el
cdigo sea ms legible al clarificar el acceso esttico. No califique un miembro esttico definido en una
clase base con el nombre de una clase derivada. Mientras el cdigo se compila, su legibilidad se presta a
confusin, y puede interrumpirse en el futuro si se agrega a un miembro esttico con el mismo nombre a la
clase derivada.
Consultas LINQ
Utilice nombres descriptivos para las variables de consulta. En el ejemplo siguiente, se utiliza
seattleCustomers para los clientes que se encuentran en Seattle.
var seattleCustomers = from cust in customers
where cust.City == "Seattle"
select cust.Name;
Utilice alias para asegurarse de que los nombres de propiedad de tipos annimos se escriben
correctamente con mayscula o minscula, usando para ello la grafa Pascal.
var localDistributors =
from customer in customers
join distributor in distributors on customer.City equals distributor.City
select new { Customer = customer, Distributor = distributor };
Cambie el nombre de las propiedades cuando puedan ser ambiguos en el resultado. Por ejemplo, si la
consulta devuelve un nombre de cliente y un identificador de distribuidor, en lugar de dejarlos como
Name e ID en el resultado, cambie su nombre para aclarar que Name es el nombre de un cliente e ID
es el identificador de un distribuidor.
var localDistributors2 =
from cust in customers
join dist in distributors on cust.City equals dist.City
select new { CustomerName = cust.Name, DistributorID = dist.ID };
Utilice clusulas where antes de otras clusulas de consulta para asegurarse de que las clusulas de
consulta posteriores operan en un conjunto de datos reducido y filtrado.
var seattleCustomers2 = from cust in customers
Utilice varias clusulas from en lugar de una clusula join para acceder a colecciones internas. Por
ejemplo, una coleccin de objetos Student podra contener cada uno un conjunto de resultados de
exmenes. Cuando se ejecuta la siguiente consulta, devuelve cada resultado superior a 90, adems
del apellido del alumno que recibi la puntuacin.
// Use a compound from to access the inner sequence within each element.
var scoreQuery = from student in students
from score in student.Scores
where score > 90
select new { Last = student.LastName, score };
ASP NET
BUENAS PRACTICAS
1. No utilice las variables de sesin a travs del cdigo. Utilice variables de sesin slo dentro de clases
y proporcione mtodos para acceder al valor almacenado en estas variables. Una clase puede tener
acceso a las variables de sesin mediante System.Web.HttpCOntext.Current.Session.
2. No guarde objetos de gran tamao en la sesin. Esto puede consumir gran cantidad de memoria del
servidor en funcin del nmero de usuarios.
3. Siempre use una hoja de estilo para controlar la apariencia de las pginas. Nunca especificar el
nombre de fuente y tamao en ninguna de las pginas. Utilice clases de estilo. Esto le ayudar a
cambiar la interfaz de usuario de su aplicacin fcilmente en el futuro. As, si usted desea personalizar
la interfaz de usuario, slo es cuestin de desarrollar una hoja de estilos nueva
MANEJO DE EXCEPCIONES
1. Nunca capturar una excepcin y no hacer nada. Si se oculta una excepcin, nunca se sabr si la
excepcin sucedido. Muchos desarrolladores utilizan este mtodo para ignorar errores no
significativos. Trate de evitar las excepciones comprobando todas las condiciones de error mediante
programacin. En el peor de los casos, usted debe registrar la excepcin en un log y continuar.
2. En casos de excepcin, mostrar un mensaje amigable al usuario, pero se debe logear la excepcin
actual con todos los detalles posibles sobre el error, incluyendo el momento en que ocurri, el mtodo
y nombre de la clase, etc. Siempre capturar una excepcion especifica, no genricas. Cuando vuelva a
lanzar una excepcin, utilice la instruccin throw sin especificar la excepcin original. De esta manera,
la llamada original conserva la pila.
3. No escriba try-catch en todos sus mtodos. Utilcelo slo si hay una posibilidad de que una excepcin
especfica se puede producir y no se puede evitar por cualquier otro medio. Por ejemplo, si desea
insertar un registro en la base de datos. Algunos desarrolladores tratan de insertar un registro sin
comprobar si ya existe. Esto est estrictamente prohibido. Siempre debe comprobar si hay errores de
forma explcita en lugar de esperar que se produzcan excepciones. Por otro lado, siempre debe utilizar
controladores de excepciones, si se comunica con sistemas externos, como de red, dispositivos
hardware, etc. Estos sistemas estn sujetos a fallos en cualquier momento y la comprobacin de
errores no suele ser fiable. En esos casos, debe tratar de recuperarse del error.
4. No escriba bloques try-catch muy grandes. Si es necesario, escribir por separado try-catch para cada
tarea de realizar e incluya slo la parte especfica del cdigo dentro del try-catch. Esto le ayudar a
encontrar el cdigo que genera la excepcin y se puede dar mensaje de error especfico al usuario.
5. Escriba sus propias clases excepcin si se requiere en la aplicacin:
Created with the Personal Edition of HelpNDoc: Create HTML Help, DOC, PDF and print
manuals from 1 single source
TERMINOLOGIA
Created with the Personal Edition of HelpNDoc: Free EPub producer