Documente Academic
Documente Profesional
Documente Cultură
SMEii
Sistema de Monitoreo y Evaluación Integral de Indicadores
de los pacientes de VIH y TBC
Versión 0.8
MINSA Pág.: 1
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Tabla de contenidos
1 INTRODUCCIÓN ............................................................................................................................3
2 CONVENCIONES DEL DOCUMENTO .......................................................................................4
3 TERMINOLOGÍA Y DEFINICIONES..........................................................................................5
4 RESUMEN ILUSTRATIVO............................................................................................................6
4.1 EQUIVALENCIAS ENTRE C# Y VB.NET ......................................................................................6
4.2 CONVENCIONES DE NOMBRE....................................................................................................10
4.3 ESTILOS DE CODIFICACIÓN ......................................................................................................11
4.4 USO DEL LENGUAJE .................................................................................................................11
5 CONVENCIONES DE NOMBRES ..............................................................................................12
5.1 RECOMENDACIONES GENERALES .............................................................................................12
5.2 USO DE NOMBRES Y SINTAXIS ..................................................................................................13
6 ESTILO DE CODIFICACIÓN......................................................................................................17
6.1 FORMATO .................................................................................................................................17
6.2 COMENTARIOS .........................................................................................................................18
7 USO DEL LENGUAJE ..................................................................................................................20
7.1 GENERAL .................................................................................................................................20
7.2 VARIABLES Y TIPOS .................................................................................................................22
7.3 CONTROL DE FLUJOS ................................................................................................................25
7.4 CONTROL DE EXCEPCIONES .....................................................................................................27
7.5 EVENTOS, DELEGADOS E HILOS ...............................................................................................27
7.6 COMPOSICIÓN DE OBJETOS ......................................................................................................27
8 CONSIDERACIONES DE ARQUITECTURA ...........................................................................29
8.1 CAPA DE ACCESO A DATOS (DAL) ...........................................................................................29
8.2 CAPA DE LÓGICA DEL NEGOCIO (BLL) .....................................................................................30
8.3 CAPA DE PRESENTACIÓN (UI) ..................................................................................................30
9 FRAMEWORK Y HERRAMIENTAS DE DESARROLLO......................................................31
9.1 GENERADORES DE PROCEDIMIENTOS ALMACENADOS ..............................................................31
9.2 GENERADORES DE CLASES ENTIDADES Y CONTROLADORAS .....................................................31
9.3 GENERADORES DE INTERFACES DE USUARIO ............................................................................31
9.4 CONTROLES Y COMPONENTES ..................................................................................................31
10 APLICACIÓN PRÁCTICA DE CONCEPTOS...........................................................................32
MINSA Pág.: 2
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
1 Introducción
Este documento describe reglas y recomendaciones para el desarrollo de aplicaciones
usando los lenguajes de la plataforma Microsoft.Net: C# y VB.NET, y su objetivo es
definir líneas guías para enmarcar la consistencia de estilo y de formato para ayudar a
los desarrolladores a evitar errores comunes. También se han incluido lineamientos y
recomendaciones para el desarrollo de aplicaciones escalables y en capas.
Las fuentes de información utilizadas para el desarrollo de este documento, son las
siguientes:
MINSA Pág.: 3
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Color y Énfasis:
Palabras Clave:
MINSA Pág.: 4
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
3 Terminología y Definiciones
La siguiente terminología es referenciada a través de este documento:
Modificador de Acceso
Las palabras clave de C# o de VB.NET que declaran el nivel de
accesibilidad de código que se tiene para tipos y miembros.
Ejemplo:
[VB.NET]
Private, Public, Friend, Protected, Shared
[C#]
private, public, internal, protected, static
Camel Case
Forma de escribir una palabra donde su primera letra esta en
minúsculas, y la primera letra de las subsiguientes palabras en
mayúsculas.
Ejemplo:
nombreVendedor
Pascal Case
Forma de escribir una palabra donde la primera letra esta en mayúscula,
y la primera letra de las subsiguientes palabras igualmente en
mayúscula.
Ejemplo:
NombreVendedor
Identificador
El desarrollador define un nombre único para declarar un objeto o
instancia de alguno.
Número Mágico
Cualquier número usado con una expresión (o inicialización de alguna
variable) que no contiene en si un significado obvio o conocido. Este
usualmente excluye los enteros 0 y 1 y cualquier otra equivalente
numérico que se evalúe como cero.
MINSA Pág.: 5
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
4 Resumen ilustrativo
Esta sección contiene cuadros y tablas describiendo a alto nivel el resumen de las
recomendaciones y estándares de nombres, estilos de codificación y uso del lenguaje.
Igualmente se presenta una tabla de equivalencias entre los lenguajes VB.NET y C#
para tener en cuenta cada una de las reglas.
Propósito VB .NET C#
Programación Orientada a
Objetos
Construcción de una clase. Public Class public class MiClase
MiClase {
Public Sub public
New(...) MiClase(...)
MyBase.New {
… …
End Sub }
… …
End Class }
MINSA Pág.: 6
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
MINSA Pág.: 7
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
MINSA Pág.: 8
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
MINSA Pág.: 9
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
“c” = camelCase
“P” = PascalCase
“_” = Prefijo con raya inferior
“X” = No aplicable
Internal
Identificador Public Protected Friend Private Notas
Coincidir con el
Ensamblado y con el
Archivo Espacio de Nombre
Proyecto P x x x (Namespace).
Coincidir con la clase
Archivo Fuente P x x x que contiene.
Aplicar cuanto sea
Otros Archivos P x x x posible.
Espacio de Coincidir parcialmente
Nombre el
(namespace) P x x x Proyecto/Ensamblado.
Clase o Añadir sufijo de
Estructura P P P P subclase.
Añadir prefijo de I
Interfase P P P P capital.
Clase Usar T o K como
Genérica P P P P identificadores de tipo.
Usar un verbo o pareja
Método P P P P verbo-objeto.
No usar prefijos con
Propiedad P P P P Get o Set.
Solo usar campos
[C#] _c privados. Nunca
Campo P P P [VB.NET] c notación Húngara.
[C#] _c Solo usar campos
Constante P P P [VB.NET] c privados.
Campo [C#] _c
Estático P P P [VB.NET] c
Enumerador P P P P
Delegado P P P P
Evento P P P P
Parametro x x x c
Evitar usar nombres de
Variables un solo carácter o de
internas x x x c enumerados.
MINSA Pág.: 10
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Código Estilo
Archivos Fuente Un espacio de nombre por archivo y una clase por archivo.
Llaves "{" Una por línea. Siempre usar llaves cuando sea opcional.
Indentación Usar tabs de tamaño de 4 espacios en blanco.
[C#] Usar // o /// pero no /* … */ y no utilizar marcos de
asteriscos.
Utilizar /// para comentarios XML de las funciones y métodos.
Comentarios [VB.NET] Usar el ‘ para todo tipo de comentario
Variables Una variable por declaración.
Código Estilo
• Usar datos nativos de datos de C# y VB.NET versus los
Tipos Nativos de Datos
tipos del CTS del .NET.
• [C#] Usar int NO System.Int32
• [VB.NET] Usar Integer NO System.Int32
Propiedades • Evitar utilizar prefijos Get o Set
MyBase / base • Usar solamente en constructores o en sobre escritura.
Condicionales • Evitar evaluar condiciones booleanas contra true o
false.
• No utilizar asignaciones en la condición.
• Evitar usar invocaciones a métodos en las condiciones.
Excepciones • Usar throw e; cuando se necesite re lanzar
excepciones.
• Capturar solo cuando se vaya a manejar la excepción.
• Usar validaciones para evitar excepciones.
• Heredar siempre de la clase Exception.
Eventos • Siempre chequear nulos antes de invocarlos.
Dispose() y Close() • Siempre invocarlos si estan implementados en la clase,
declares cuando sean necesarios.
Finalizadores • Evitarlos.
• [C#] Usar los destructores de c#.
• Nunca cree el método Finalize() en C#.
• [VB.NET] Implementar el método Finalize().
MINSA Pág.: 11
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
5 Convenciones de Nombres
Esta sección se concentra completamente en el trabajo de nombrar proyectos,
archivos de código fuente, e identificadores incluyendo campos, variables,
propiedades, métodos, parámetros, clases, interfases y espacios de nombres
(Namespaces).
[VB.NET]
/// Mal!
Public Enum TiposRolEnum
…
End Enum
Public Class CPoliticasInternas
…
End Class
Public Structure CoordenadaStruct
…
End Class
MINSA Pág.: 12
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Ejemplo:
Empresa.SistemaOnline.csproj -> Empresa.SistemaOnline.dll ->
namespace: Empresa.SistemaOnline
Ejemplo:
[C#] MiClase.cs => public class MiClase
[VB.NET] MiClase.vb => Public Class MiClase
Ejemplo:
[C#] namespace Empresa.SistemaWeb
[VB.NET] Namespace Empresa.SistemaWeb
MINSA Pág.: 13
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Ejemplo:
[C#]
private class MiClase
{ … }
internal class CoordenadaAttribute: Attribute
{ … }
public class ClienteCollection : CollectionBase
{ … }
public class ClienteEventArgs : EventArgs
{ … }
private struct PropiedadesAplicacion
{ … }
[VB.NET]
Private Class MiClase
…
End Class
Ejemplo:
[C#]
interface ICliente
{ … }
[VB.NET]
Interface ICliente
…
End Interface
MINSA Pág.: 14
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Ejemplo:
[C#]
public void Ejecutar() { … }
private string ObtenerVersionEnsamblado(Assembly
libreria) { … }
[VB.NET]
Public Sub Ejecutar()
…
End Sub
Ejemplo:
[C#]
public string Nombre
{
get{ … }
set{ … }
}
[VB.NET]
Public Property Nombre() As String
Get
…
End Get
Set (ByVal Value As String)
…
End Set
End Property
Ejemplo:
[C#]
public string Nombre;
protected IList ListaInterna;
[VB.NET]
Public Nombre As String
Protected ListaInterna As IList
MINSA Pág.: 15
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Campo (Privado) [C#] Utilizar estilo de escritura tipo CamelCase y utilizar el prefijo
"_".
[VB.NET] Utilizar estilo de escritura tipo CamelCase.
Ejemplo:
[C#]
private string _nombre;
[VB.NET]
Private nombre As String
Constante o • Tratar como campo.
Campo Estático
Enumerador • Utilizar estilo de Escritura Pascal
Ejemplo:
[C#]
public enum TiposCliente
{
Normal,
Frecuente
}
[VB.NET]
Public Enum TiposCliente
Normal
Frecuente
End Enum
Ejemplo:
[C#]
public event EventHandler CargarComponente;
[VB.NET]
Public Event CargarComponente As EventHandler
Variable (Interna) • Utilizar estilo Camel.
• Evitar el uso de nombres de un solo carácter tales como "x" o
"y" a excepción de aquellos usados en la sentencia for.
• Evitar enumerar nombre de variables como cadena1, cadena2,
cadena3, etc.
Parametro • Utilizar estilo de escritura Pascal
Ejemplo:
[C#]
public void Ejecutar(string Texto, int
iteraciones)
{ … }
[VB.NET]
Public Sub Ejecutar(ByVal Texto As String, ByVal
Iteraciones As Integer)
…
End Sub
MINSA Pág.: 16
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
6 Estilo de Codificación
Las siguientes secciones describen el camino preferido para implementar código
fuente en C# y VB.NET, para así crear un código legible, claro y consistente que sea
fácil de comprender y mantener.
6.1 Formato
[VB.NET]
Imports System
Imports System.Collections
Imports System.Data
Imports System.Data.SqlClient
Imports System.Xml
10. Utilizar #region o #Region "” para agrupar los tipos de miembros de la
clase.
11. Añadir el nombre de la carpeta al espacio de nombres para archivos en el
interior de estos.
MINSA Pág.: 17
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
// Bien!
[Atributo1]
[Atributo2]
[Atributo3]
public class MiClase
{ … }
6.2 Comentarios
//******************************************
// Cuadro de comentarios
//******************************************
[VB.NET]
' TODO: Obtener cadena de conexión del registro
MINSA Pág.: 18
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
///]]></code>
///</example>
MINSA Pág.: 19
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
// Bien!
private void EscribirEvento(string mensaje)
{…}
'Bien!
Option Explicit On
MINSA Pág.: 20
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
[ComVisible(true)]
public MiClase
{…}
[VB.NET]
<Assembly: ComVisible(False)>
<ComVisible(True)> _
Public MiClase
{
…
}
MINSA Pág.: 21
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
Ejemplo:
[C#]
short NO System.Int16
int NO System.Int32
long NO System.Int64
string NO System.String
[VB.NET]
Short NO System.Int16
Integer NO System.Int32
Long NO System.Int64
String NO System.String
3. Solo declarar a los campos como privados. Usar propiedades para acceder a
los campos privados utilizando los modificadores de acceso de tipo público,
protegido o interno.
4. Evitar el uso de números mágicos. En lugar de ello, usar constantes o
enumeradores.
5. Evitar declarar variables de cadena con valores literales. En lugar use
constantes, recursos, registros de sistema u otro tipo de repositorio de datos.
6. Solo declarar constantes para tipos de datos simples.
7. [C#] Declarar variables readonly o static readonly en lugar de
constantes de tipos complejos.
8. [C#] Evitar utilizar conversiones directas (cast). En su lugar, utilizar el operador
“as” y verificar por nulos (null).
Ejemplo:
[C#]
object data = CargarData();
DataSet ds = dataObject as DataSet;
if (ds != null)
{…}
MINSA Pág.: 22
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
//Encapsulamiento implicito.
object objFila = fila;
//Desencapsulamiento explicito.
int nuevaFila = (int)objFila;
[VB.NET]
Dim fila As Integer = 1
'Encapsulamiento implicito.
Dim objFila As Object = fila
'Desencapsulamiento explicito.
Dim nuevaFila As Integer = CType(objFila, Integer)
11. [C#] Tratar de usar el prefijo “@” en las cadenas literales en lugar de utilizar
escapes.
12. Es preferible utilizar StringBuilder en lugar de concatenación de cadenas.
13. No comparar cadenas a String.Empty o “” para verificar cadenas vacías. En
su lugar, comparar por su longitud (String.Length) a cero.
14. Evitar la creación de cadenas ocultas en un bucle. Usar String.Compare()
en su lugar.
Ejemplo:
[C#]
// Mal!
int id = -1;
string nombre = “Juan Perez”;
// Bien!
int id = -1;
string nombre = “Juan Perez”;
MINSA Pág.: 23
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
if (String.Compare(listaCliente[i].Nombre,
nombre, true) == 0)
{
id = listaCliente[i].Id;
}
}
[VB.NET]
' Mal!
Dim id As Integer = -1
' Bien!
Dim id As Integer = -1
MINSA Pág.: 24
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
[VB.NET]
Dim resultado As Integer = IIf(esValido, 9, 4)
// Bien!
if (esValido)
{…}
[VB.NET]
' Mal!
If esValido = True Then
…
End If
' Bien!
If esValido Then
…
End If
// Bien!
esHighScore = (valor >= this._highScore);
esEmpate = (valor == this._highScore);
MINSA Pág.: 25
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
[VB.NET]
' Mal!
If ((valor > Me.highScore) & (valor <> Me.highScore))
& (valor < Me.maxScore) Then
…
End If
' Bien!
Dim esHighScore As Boolean = (valor >= Me.highScore)
Dim esEmpate As Boolean = (valor = Me.highScore)
Dim esValido As Boolean = (valor < Me.maxScore)
MINSA Pág.: 26
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
11. Cuando se lance una nueva excepción, siempre pasar la innerException para
poder mantener la pila de excepciones.
MINSA Pág.: 27
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
MINSA Pág.: 28
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
8 Consideraciones de Arquitectura
En el desarrollo de aplicaciones empresariales escalables y seguras se encuentran
ciertas prácticas conocidas como “mejores prácticas”. En ésta sección se dan pautas
generales y lineamientos para lograr este tipo de aplicaciones.
• Una librería de clases con la capa de acceso a datos y librerías utilitarias. (DAL –
data access layer).
• Una librería de clases con la capa de lógica del negocio. (BLL – business logic
layer)
• Un proyecto Web o proyecto Windows, dependiendo del tipo de interfaz que se
utilizará en la aplicación (UI). Este proyecto abarca toda la capa de interfaz de
usuario y presentación.
MINSA Pág.: 29
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
MINSA Pág.: 30
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
• MyGenerationSoftware:
(http://www.mygenerationsoftware.com/portal/dOOdads/Overview/tabid/63
/Default.aspx) y utilizando el framework dOOdads que permite la creación de
procedimientos almacenados y clases de acceso a datos en CSharp.
• SubSonic
• Sharp Generador
• Cooperator Framework
• EasyObjects.NET
• MyGenerationSoftware:
(http://www.mygenerationsoftware.com/portal/dOOdads/Overview/tabid/63
/Default.aspx) y utilizando el framework dOOdads que permite la creación de
procedimientos almacenados y clases de acceso a datos en CSharp.
• SubSonic
• Sharp Generador
• Cooperator Framework
• EasyObjects.NET
• Treeview : http://treeviewadv.sourceforge.net/
• Docking Systems (manejo de ventanas):
http://sourceforge.net/projects/dockpanelsuite/
• Importación de archivos planos: http://www.filehelpers.com/
MINSA Pág.: 31
SMEii – Sistema de Monitoreo y Evaluación Integral de Indicadores de los pacientes de VIH y TBC
Estándares y consideraciones de Desarrollo para Proyectos sobre plataformas Microsoft .NET
• Grillas: http://www.devage.com
MINSA Pág.: 32