Sunteți pe pagina 1din 26

Tabla de Contenido

1) INTRODUCCIN Este documento describe reglas y recomendaciones para el desarrollo de aplicaciones usando el lenguaje de la plataforma Microsoft.Net VB.Net. y su objetivo es definir lneas guas para enmarcar la consistencia de estilo y de formato para ayudar a los desarrolladores a evitar errores comunes. Tambin se han incluido lineamientos y recomendaciones para el desarrollo de aplicaciones escalables y en capas. Especficamente este documento cubre convenciones de nombres, estilos de codificacin, uso de lenguaje, mejores prcticas para el desarrollo, etc. Todos estos temas son cubiertos detallando reglas y recomendaciones las cuales son aplicables para VB.NET.

2) TERMINOLOGA Y DEFINICIONES La siguiente terminologa es referenciada a travs de este documento: Modificador de Acceso Es una palabra clave que se utiliza para declarar el nivel de accesibilidad de cdigo que se tiene para las clases, mtodos y atributos. Ejemplo: Private, Public, Friend, Protected, Shared. Aunque los modificadores de acceso varan, las clases y la mayora de sus miembros utilizan por defecto el modificador Private. Excepciones para esto son las interfaces y enumerados los cuales por defecto son pblicos. Camel Case Forma de escribir una palabra donde su primera letra est en minsculas, y la primera letra de las subsiguientes palabras en maysculas. Ejemplo: nombreEntidad, nombreProyectoEntidad. Pascal Case Forma de escribir una palabra donde su primera letra est en mayscula, y la primera letra de las subsiguientes palabras igualmente en maysculas. Ejemplo: NombreMenu, NombreEstadoProyecto.

3) RESUMEN ILUSTRATIVO Esta seccin contiene cuadros y tablas describiendo codificacin y uso del lenguaje. 3.1) Tabla de descripciones Propsito Construccin de una clase. VB.NET Public Class miClase Public Sub New{} MyBase.New End Sub End Class Declaracin de clase Herencia de Clase Class Public Class A Inherits B End Class Nota: MustInherit, Indica que la clase solo puede ser heredada y no instanciada. NotInheritable, Indica que la clase no puede ser heredada. MyClass, Llamar a la propia implementacin de un mtodo en lugar de llamar al mtodo sobre en una clase derivada. MyBase, Referir a la clase padre de una clase derivada. Declarar un delegado (Referencia segura a un mtodo) Sobrescribir la implementacin de un mtodo o propiedad de una clase padre. Indicar que los mtodos que no cuentan con implementacin y que deben implementarse en clases derivadas. Indicar que el mtodo o propiedad no puede ser sobrescrita en clases derivadas. Indicar que el mtodo si puede ser Delegate Overrides los estndares de nombres, estilos de

Programacin Orientada a Objetos.

MustOverride MustInherit)

(En

una

clase

declarada

NotOverridable

Overridable

sobrescrito en clases derivadas Sobrecarga de procesos, funciones o mtodos. Definir una variable tipo objeto y con eventos para controlar. Especifica el evento por el cual un mtodo va a ser llamado. Evaluar una expresin con el cual se tienen mltiples accesos a los miembros de un objeto. Overloads WithEvents Handles With MiObjeto <.Miembro> <.Miembro> End With Referencia al objeto actual Declaracin de enums. Me Enum End Enum Declaracin de una interfase Implementacin de una interfase Indicador de ndice Modificador de Acceso a Clases Indica que la clase es accesible fuera del proyecto o de su ensamblado. Indica que la clase es accesible solo dentro de su ensamblado. Indica que la clase solo es accesible en el proyecto por clases anidadas dentro de esta clase. Indica que el miembro es accesible fuera de la clase y del proyecto Indica que el miembro es accesible fuera de la clase pero no del proyecto. Indica que el miembro solo es accesible en el mbito de la clase. Indica que el miembro es accesible solo para la clase y para las clases derivadas. Indica que el miembro es compartido a travs de todas las instancias de la clase. Public Interface Implements Default Property

Friend Private

Modificadores de acceso de Miembros de una clase Public

Friend

Private Protected

Shared

Otros Indica comentario Indica constante Creacin de un nuevo objeto. Declaracin de una funcin mtodo sin valor de retorno. Declaracin de eventos Declaracin de una estructura. o ,Rem Const New, CreateObject Sub Option Explicit Event, RaiseEvent Structure End Structure Declaracin de objeto nulo. Declaracin nombres. de espacio de Nothing Namespace End Namespace Utilizacin nombres de un espacio de de de una una Imports GetChar AddressOf Obj Is Nothing SyncLock

Declaracin explicita de variables.

Devolver un carcter cadena literal. Devuelve funcin. la direccin

Prueba si un objeto es nulo. Bloqueo de Hilos. 3.2) Convenciones de nombres C P X Identificado r Archivo Proyecto Archivo Fuente Otros Archivos = camelCase = PascalCase = No aplicable Public P Protecte d X

Frien d X

Privat e X

Notas Coincidir con el Ensamblado y con el Espacio de Nombre (Namespace). Coincidir con contiene. la clase que

P P

X X

X X

X X

Aplicar cuando sea posible.

namespace Clase o estructura. Interfase. Clase genrica Mtodo Propiedad Campo Constante Enumerador Delegado Evento Parmetro Variables Internas

P P P P P P P P P P P X X

X P P P P P P P P P P X X

X P P P P P P P P P P X X

X P P P P P C C P P P C C

Coincidir parcialmente Proyecto/Ensamblado. Aadir sufijo de subclase. Aadir prefijo I mayscula

el

Usar T o K como identificadores de tipo. Usar un verbo o pareja verboobjeto. No usar prefijos con Get o Set. Solo usar campos privados. No utilizar notacin hngara. Solo usar campos privados.

Evitar usar nombres de un solo carcter o de enumerados.

3.3) Palabras reservadas Las palabras reservadas en un lenguaje son utilizadas por el compilador con fines especficos. Las cuales no se deben utilizar al momento de definir los nombres de los elementos del programa tal como variables y procedimientos. Las siguientes palabras no son reservadas, pero de igual manera no deben ser utilizadas para el nombramiento de variables, procedimientos y otros elementos. Aggregate Ansi Assembly Auto Binary Compare Custom Distinct Equals Explicit From Group By Group Join Into IsFalse IsTrue Join Key (Visual Basic) Mid Off Order By Preserve Skip Skip While Strict Take Take While Text Unicode Until Where #ExternalSour ce #Region

3.4) Estilos de codificacin Cdigo Archivo Fuente Indentacin Estilo Un espacio de nombre por archivo y una clase por archivo. Usar tabs de tamao de 4 espacios en blanco.

Comentarios Variables

Utilizar ( ) para comentarios XML de las funciones y mtodos. Usar el para todo tipo de comentario. Una variable por declaracin.

3.5) Uso del lenguaje Cdigo Tipos datos nativos de Estilo Utilizar tipos de datos nativos de VB.NET en logar de los tipos del CTS de .NET Ej. Utilizar Integer y no System.Int32 Propiedades MyBase Condicionales Evitar utilizar prefijos Get o Set Utilizar solamente en constructores o en sobrescritura. -Evitar evaluar condiciones booleanas contra true o false. -No utilizar asignaciones en la condicin. -Evitar usar invocaciones a mtodos en las condiciones. Excepciones Usar throw e; cuando se necesite relanzar excepciones. Capturar solo cuando se vaya a manejar la excepcin. Usar validaciones para evitar excepciones. Heredar siempre de la clase Exception. Eventos Siempre chequear nulos antes de invocarlos.

4) Convenciones de Nombres Esta seccin est enfocada en el nombramiento de los proyectos, archivos de cdigo fuente, e identificadores incluyendo campos, variables, propiedades, mtodos, parmetros, clases, interfases y namespaces. 4.1 Recomendaciones Generales 1. Siempre usar nombres con estilo de escritura CamelCase o PascalCase (Ver tabla Seccin 3.2). 2. Evitar nombres totalmente en MAYSCULAS o en minsculas (a excepcin de constantes de uno o dos caracteres). Nombres de una sola palabra sern totalmente en minsculas si se utiliza el estilo de escritura CamelCase. 3. Nunca se deben crear namespaces, mtodos, propiedades, campos o parmetros que varan solamente por su capitalizacin. (Maysculas) 4. No se deben utilizar nombres que inicien con caracteres numricos. 5. Siempre se debe escoger nombres especficos y con significados en si mismos.

6. Variables y propiedades deben describir la entidad que representan no el tipo o tamao. 7. No utilizar la notacin hngara. 8. Evitar el uso de abreviaturas a menos que el nombre completo sea excesivo (25 caracteres). 9. Evitar el uso de underscore _ y guin - en el nombramiento de mtodos. 10. Evitar abreviaturas que su longitud sea mayor a 5 caracteres. 11. Cualquier abreviatura debe ser totalmente conocida y aceptada por el equipo de desarrollo. 12. Usar maysculas en caso de abreviaciones de 2 letras, y estilo de escritura PascalCase para abreviaturas mas largas. 13. Nunca usar palabras reservadas para nombres. 14. Evitar conflictos de nombres con los namespaces existentes o tipos existentes en el framework .Net 15. Evitar aadir redundancia en prefijos o sufijos de los identificadores Ej. Public Enum ListaTiposRolEnum (TiposRol ) End Enum 16. Nunca incluir el nombre de la clase a los nombres de las propiedades. Ej. Cliente.nombre en lugar de Cliente.nombreCliente 17. Tratar de utilizar los siguientes prefijos en las variables y propiedades booleanas, Puede, Es, Tiene. 18. Evitar la utilizacin de Boxing y UnBoxing, debido a que son procesos lentos Ej. Dim obj As Object = New Point(1, 1) Dim valor As Int32 = Convert.ToInt32(obj) 19. En el nombramiento de mtodos de una clase, se deben mantener nombres consistentes para mtodos con operaciones similares, por ejemplo: Definir un mtodo GuardarArchivo si tiene un mtodo CargarArchivo, definir un mtodo Cerrar si tiene un mtodo Abrir 20. Los mtodos no debe exceder en mas de 50 lineas ejecutables, es preferible dividir los mtodos en varios procedimientos. Esto debido a que el compilador es mas eficiente compilando mtodos menores a 32 bytes de cdigo. 21. En el caso de tener mtodos que tengan mas de 5 parmetros, es preferible utilizar estructuras o una clase. 22. Se debe evitar el cdigo quemado o Hard-Code, mediante la utilizacin de un archivo de parmetros (De tipo property o XML). 23. El nombramiento del espacio de nombres debe utilizar el nombre de la compaa, seguido por el espacio de nombres y opcionalmente la caracterstica de diseo, para evitar que existan dos espacios de nombres publicados con el mismo nombre. Ejemplo. DNP.Datos.Formulacion DNP.Logica.Ejecucion DNP.Vista.Administracion

4.2 Uso de nombres y sintaxis Identificador Archivo de Proyecto Convencin de nombramiento Utilizar estilo de escritura Pascal Case - Siempre coincidir el nombre del ensamblado y el espacio de nombres raiz. Ej. Empresa.SistemaOnline.csproj Empresa.SistemaOnline.dll -> Empresa.SistemaOnline Archivo Fuente Utilizar estilo de escritura PascalCase - Siempre coincidir el nombre de la clase y el nombre del archivo. - Evitar incluir ms de una clase, enumerador (global) o delegado (global) por archivo. - Usar un nombre descriptivo para el archivo que contenga mltiples clases, enumeradores o delegados. Ej. MiClase.vb => Public Class MiClase Archivo de Recurso Tratar de utilizar estilo de escritura PascalCase. - Utilizar un nombre que describa la informacin que contenga el archivo. Namespaces Estilo de escritura PascalCase Tratar de coincidir el nombre ensamblado/proyecto. Ej. Namespace Empresa.SistemaWeb Clase o Estructura Utilizar estilo de Escritura PascalCase. - Usar sustantivo o frase de sustantivos para el nombre de la clase. - Agregar un sufijo apropiado cuando se nombre sub clases. Ej. Private Class Miclase End Class Friend Class CoordenadaAttribute inherits Attribute End Class -> namespace:

Public Class ClienteCollection inherits CollectionBase End Class Public Class ClienteEventArgs inherits EventArgs End Class Private Structure PropiedadesAplicacion End Structure Interfase Utilizar estilo de escritura PascalCase Siempre agregar el prefijo I Ej. Interface ICliente End Interface Mtodo Utilizar estilo de escritura PascalCase Tratar de usar un verbo o par verbo-objeto Ej. Public Sub Ejecutar() End Sub Private Function ObtenerVersionEnsamblado(ByVal As Assemble) As String End Function Propiedad Utilizar estilo de escritura PascalCase - El nombre de la propiedad debe representar la entidad que devuelve. - Nunca utilizar los prefijos Get o Set. - El nombre de la propiedad debe ser el nombre del atributo+ sufijo Valor (Ej: Property CodigoProyectoValor()). Ej. Public Property Nombre() As String Get End Get Set (ByVal Value As String) libreria

End Set End Property Campo (Pblico, Protegido o interno) Utilizar estilo de escritura PascalCase. Evitar el uso de campos no privados. Usar propiedades en lugar de estos campos. Ej. Public Nombre As String Protected ListaInterna As IList Campo (Privado) Utilizar estilo de escritura tipo CamelCase. Ej. Private nombre As String Constante esttico Enumerador o campo Tratar como un campo Utilizar estilo de escritura PascalCase. Ej. Public Enum TiposCliente Normal Frecuente End Enum Delegado o Evento Se debe tratar como un campo Ej. Public Event CargarComponente As EventHandler Variable (Interna) Utilizar estilo CamelCase.
- Evitar el uso de nombres de un solo carcter tales como x

o y a excepcin de aquellos utilizados en la sentencia for.

- Evitar enumerar nombre de variables como cadena1, cadena2,cadena3, etc. Parmetro Utilizar estilo de escritura PascalCase Ej. Public Sub Ejecutar (ByVal Texto As String, ByVal Iteraciones As Integer) End Sub

5) Estilo de Codificacin En esta seccin se describe la manera de implementar cdigo fuente en VB.NET de tal manera que sea un cdigo legible, claro y consistente que sea fcil de comprender y mantener.

5.1) Formato 1. 2. 3. 4. Nunca declarar ms de un espacio de nombres por archivo. Evitar colocar mltiples clases en un mismo archivo. Declarar cada variable independientemente, nunca en la misma sentencia. Colocar la sentencia imports en la parte superior del archivo. El grupo de los espacios de nombres de .NET deben ir por encima de los espacios de nombres particulares y todos ordenados alfabticamente. 5. Agrupar la implementacin interna de las clases en regiones por el tipo de miembros en el siguiente orden: a. Campos (Atributos) b. Propiedades c. Constructores y Destructores d. Mtodos e. Enumeradores, Estructuras 6. Ordenar las declaraciones a partir de los modificadores de acceso y visibilidad: a. Privados b. Internos c. Protegidos d. Pblicos 5.2) Comentarios 1. Tratar de usar comentarios en el interior de los mtodos para explicar aspectos globales del algoritmo (Ej: Declaracion de variables, cdigo del mtodo, registro de errores etc). 2. No utilizar comentarios para explicar cdigo obvio. 3. Incluir lista de tareas para utilizar los filtros de comentarios Ej. TODO: Obtener cadena de conexin del registro.

5.2.1) Comentarios de documentacin Al inicio de cada objeto (Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo) se debe agregar documentacin tcnica, utilizando los smbolos /// y las etiquetas que se describen a continuacin. Etiqueta <c> <code> Descripcin Indica que el texto dentro de una descripcin es cdigo Indica que el texto consiste en varias lneas de cdigo Especifica un ejemplo para el miembro En donde se utilizan Obligatori o

<exampl e>

Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo

<exceptio n> <include > <list>

Especifica las excepciones que se pueden producir Hace referencia a otro archivo que describe los tipos y miembros de su cdigo fuente Define una lista o una tabla

Propiedad, Mtodo

<para>

Especifica que el contenido tiene el formato de un prrafo Define un nombre y descripcin de parmetro Da formato a una palabra como un parmetro Especifica un permiso necesario para el miembro Especifica una seccin de comentarios para el miembro Especifica el valor devuelto de la propiedad o funcin Especifica un vnculo a otro miembro Especifica un vnculo que aparece en la seccin Vea tambin de la documentacin Especifica el resumen.

<param> <paramre f> <permissi on> <remarks > <returns > <see>

Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo Propiedad, Mtodo Propiedad, Mtodo Constante, Propiedad, Mtodo Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo Mtodo Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo Clase, Estructura, Interfase, Enumeracion, Delegado, Constante, Propiedad, Mtodo X

<seealso > <summar y> <typepar am> <value>

Define un nombre y descripcin de parmetro de tipo Especifica la descripcin de una propiedad Propiedad X

A continuacin se presentan las etiquetas de documentacin que deben ser utilizadas para la generacin del API con SandCastle. Estructur a Interface Enum Obligatori Obligatori Obligatori a a a

Etiqueta Clase <summary Obligatori > a

Variable Obligatori a

<remarks > Opcional <para> Opcional <example > <code> <see> <seealso>

Opcional Opcional

Opcional Opcional Opcional Opcional Opcional Opcional

Opcional Opcional Opcional Opcional Opcional Opcional

Opcional Opcional Opcional Opcional Opcional Opcional

6. Uso del lenguaje 6.1 General 1. Nunca utilizar la declaracin explicita de variables con valor Off. Ej. Option Explicit On 2. Tratar de utilizar la declaracin implcita de conversin con valor On (el valor Off es por defecto). Ej. Option Strict On 6.2 Variables y tipos
1.

Tratar de inicializar las variables cuando se declaran (Ej: Inicializar las variables de tipo String a Empty).

2. Siempre utilizar los tipos de datos de VB.NET en lugar de los tipos del CTS de .NET Ej. Utilizar Short, Integer, Long y String en lugar de System.Int16, System.Int64 y System.String System.Int32,

3. Solo declarar a los campos como privados. Usar propiedades para acceder a los campos privados utilizando los modificadores de acceso de tipo pblico, protegido o interno. 4. Evitar declarar variables de cadena de valores literales. En lugar de esto se deben usar constantes, recursos, registros de sistema u otro tipo de repositorio de datos.
5.

Solo declarar constantes para tipos de datos simples, usando para constantes con uno o dos caracteres la mayscula (Ejemplo: PI) y PascalCase cuanto tienen ms caracteres (Ejemplo: DoublePI). Opcionalmente se usa todo el nombre en mayscula para constantes privadas generalmente cuando se invoca una API (Ejemplo: WM_MOVE).

6. Siempre inicializar explcitamente los tipos referenciados en un arreglo al recorrer un bucle. 7. Evitar encapsular o desencapsular (boxing / unboxing) variables de tipo valor. Ej: Dim fila As Integer = 1

Encapsulamiento implicito. Dim objFila As Object = fila Desencapsulamiento explicito Dim nuevaFila As Integer = CType(objFila, Integer)
8.

Es preferible utilizar StringBuilder en lugar de concatenacin de cadenas.

9. No comparar cadenas a String.Empty o para verificar cadenas vacas. En su lugar, comparar por su longitud (String.Length) a cero. 10. Evitar la creacin de cadenas ocultas en un bucle. Usar String.Compare() en su lugar. Ej: Este ejemplo est mal Dim id As Integer = -1 Dim nombre As String = Juan Perez For i As Integer = 0 To listaClientes.Count If listaClientes(i).Nombre.ToLower() = nombre Then Id = listaclientes(i).Id End if Next Este ejemplo est bien Dim id As Integer = -1 Dim nombre As String = Juan Perez For i As Integer = 0 To listaClientes.Count El argumento ignoreCase igual a True realiza una comparacin sin importarle la capitalizacin de las cadenas y sin alojar una nueva cadena en memoria. If String.Compare(listaClientes(i).Nombre, nombre, True) = 0 then id = listaClientes(i).Id End If Next

6.3 Control de flujos 1. Evitar la creacin de mtodos recursivos. Utilizar bucle en su lugar. 2. Utilizar el operador condicional ternario solo para condiciones triviales. Evitar operaciones complejas con este operador (o condiciones triviales anidadas). Ej. Dim resultado As Integer = IIf(esValido,9,4)

3. Evitar evaluar condiciones booleanas contra true o false. Ej. If esValido = True Then Mal End if If esValido Then Bien End If 4. Evitar expresiones condicionales complejas, usar variables booleanas para separar la expresin en expresiones manejables. Ej. Mal. If complejo y difcil de entender If ((valor > Me.highScore) & (valor <> Me.highScore)) & (valor < Me.maxScore) Then End if Bien. If entendible Dim esHighScore As Boolean = (valor >= Me.highScore) Dim esEmpate As Boolean = (valor = Me.highScore) Dim esValido As Boolean = (valor < Me.maxScore) If (esHighScore And Not esEmpate) And esValido Then End if

6.4 Control de Excepciones 1. No usar los bloques try / catch para control de flujos. 2. Solo capturar las excepciones cuando van a ser controladas. 3. Nunca declarar un bloque catch vaco. 4. Evitar anidar bloques try/catch en otro bloque catch. 5. Usar filtros de excepciones especficas. 6. Ordenar los filtros de excepciones de mas especfica a ms genrica. 7. Solo usar el bloque finally para liberar recursos utilizados en el bloque try. 8. Siempre utilizar validaciones para evitar excepciones. 9. Evitar definir excepciones personalizadas. Usar las clases de excepciones existentes. 10. Cuando una excepcin personalizada es necesaria; a. Siempre derivar de Exception no de ApplicationException

b. Siempre sobrescribir el mtodo ToString(). c. Siempre sobrescribir el operador implicito string cuando se sobrescriba el mtodo ToString(). La aplicacin debe contar con un medio para la posterior consulta y revisin de los errores generados dentro de la aplicacin, esta opcin permite la depuracin y afinamiento del cdigo de una aplicacin puesta en produccin, por lo tanto es muy recomendable que el aplicativo cuente con un mtodo para el almacenamiento y consulta de dicha informacin. Se recomienda que junto a la informacin del error se almacene la siguiente informacin: Informacin Sugerida para el Control de Excepciones Campo Consecutivo Numero de Error Descripcin de Error Mdulo Usuario Fecha Adicional Descripcin Nmero consecutivo automticamente. generado

Identificador del error generado por el compilador. Descripcin del error generado por el compilador. El mdulo, mtodo o clase desde el que se genera el error. Usuario que excepcin. genera el error o la

Fecha y hora del momento en que el error es generado. Informacin adicional que se crea pertinente debe ser almacenada junto con el error o excepcin.

Nota: La informacin de la tabla anterior es una sugerencia, recuerde que el objetivo es la de poder realizar seguimiento a los errores o excepciones generados, si usted tiene otra opcin que permita realizar dicha tarea entonces no sera necesario implementar la propuesta en este documento. Se puede usar una mezcla de archivo de eventos y tabla de base de datos, ya que en el caso de no haber conexin con la BD obviamente el error no podr ser grabado en una tabla. 6.5 Eventos, Delegados e Hilos 1. Siempre chequear que las instancias de los eventos y delegados sean diferentes a nulo. 2. Usar por defecto las clases EventHandler y EventArgs para los eventos ms simples.

6.6 Composicin de Objetos 1. Siempre declarar los tipos explcitamente con un espacio de nombres. Nunca usar el espacio de nombres por defecto {global}. 2. Evitar declarar mtodos con ms de 7 parmetros. Si fuera necesario considerar para una estructura o clase. 3. Solo usar la palabra reservada base o MyBase cuando se invoque en el constructor o implementacin de una sobre escritura de algn mtodo. 4. No usar el modificador de acceso Protected con NotInheritable. 5. Siempre llamar al mtodo Close() o Dispose() en las clases que lo implementen.

Consideraciones de Base de Datos

1. No utilizar SELECT * por que el motor debe leer primero la estructura de la tabla antes de ejecutar la sentencia. 2. Seleccionar solo aquellos campos que se necesiten, cada campo extra genera tiempo extra. 3. Utilizar Inner Join, left join, right join, para unir las tablas en lugar del where, esto permite que a medida que se declaran las tablas se vallan uniendo mientras que si utilizamos el where el motor genera primero el producto cartesiano de todos los registros de las tablas para luego filtrar las correctas, un trabajo definitivamente lento. 4. Especificar el alias de la tabla delante de cada campo definido en el select, esto le ahorra tiempo al motor de tener que buscar a que tabla pertenece el campo especificado. 5. Evitar el uso de case. Y formulas dentro de las consultas, cada formula y case retrasan el motor considerablemente. 6. El orden de ubicacin las tablas en el from deberan ir en lo preferible de menor a mayor segn el nmero de registros, de esta manera reducimos la cantidad de revisiones de registros que realiza el motor al unir las tablas a medida que se agregan. 7.1 ndices Los ndices son campos que permiten la bsqueda a partir de dicho campo a una velocidad notablemente superior. Sin embargo cuentan con la desventaja que hacen ms lenta la actualizacin, carga y eliminacin de los registros ya que por cada modificacin en la tabla se deber modificar tambin el ndice, adems se debe tener en cuenta el hecho de que los ndices tambin ocupan espacio en disco. Es por esto que no es factible indexar todos los campos de la base y se hace necesario seleccionarlos cuidadosamente. Cabe destacar que por defecto las tablas no contienen ndices por lo que la introduccin de estos puede llegar a producir mejoras de ms del 100% en algunos casos. Los campos que se recomiendan indexar son: Claves Primarias Claves Forneas

Campos por los cuales se realizaran bsquedas Campos por los cuales se va a ordenar Siempre conviene indexar tablas con gran cantidad de registros y que van a ser consultadas intensamente. 7.2 Escritura de sentencias SQL Para mayor entendimiento de las consultas SQL que se hagan a nivel de aplicacin o de base de datos, es recomendable utilizar maysculas para el cdigo SQL (palabras reservadas, SELECT, FROM, WHERE etc.). Separando una por cada lnea las palabras reservadas SQL, y utilizando un nivel de indentacin como se muestra a continuacin:

Para formatear sentencias SQL extensas se puede utilizar el siguiente vnculo http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl

7.3 Nombramiento de objetos de BDD 7.3.1 Nombres procedimientos y funciones Los nombres de los procedimientos o funciones deben ser: Verbo infinitivo + palabras complementarias Ej: CREATE FUNCTION ObtenerSaldoProyecto (@numeroProyecto float) RETURNS float AS BEGIN . . RETURN (saldo) END

CREATE PROCEDURE GenerarCodigoPresupuestal @HBPIN varchar(13) AS . . Cdigo de base de datos


Objeto Disparadores (triggers) Prefijo trg_ Notacin General trg_NombreTabla_Funcionali dad Explicacin Un trigger para la tabla Clientes que se encarga de grabar la informacin de auditora puede llamarse de la siguiente forma: trg_Clientes_Auditoria Para el caso de los ndices normales no se establece el tipo de ndice, por ejemplo el ndice para el campo Nombre de la tabla Clientes puede llamarse de la siguiente forma: ndice Normal: idx_Clientes_Nombre Para el caso de los tipos de ndices diferentes al normal, se antepone un prefijo de dos letras en minscula que permite su clasificacin: ndice basado en funcin: idx_fnClientes_CalculaEdad ndices inversos (Reverse Key): idx_rkClientes_Cedula ndices compuestos: idx_icClientes_NombreApellido ndice nico: Idx_iuClientes_Login Para el caso de las llaves primarias formadas con muchos campos se puede usar un prefijo de tres letras para cada campo. pk_Clientes_Cedula Para visualizar las tablas implicadas en la relacin, por ejemplo la tabla Clientes tiene una llave fornea vinculada al campo Independencia que viene referenciada de la tabla Dependencias, la relacin puede llamarse de la siguiente forma: Fk_Clientes_Dependencias Los nombres de las vistas deben ser un nemnico que haga referencia a la tarea para la que fue creada, por ejemplo: vwClientesPorDependencia Igual que para las vistas normales. Indica una restriccin en esa tabla y campo, por ejemplo para indicar una restriccin en el campo Estado de la tabla Clientes, la condicin puede llamarse de la siguiente forma: chk_Clientes_Estado Para los Jobs de base de datos se requiere colocar como prefijo la base de datos a la que pertenece preferiblemente con un mximo de 6 caracteres, por ejemplo para la creacin de un Job que se encarga de sincronizar los datos de la

ndices

idx_

idx_[Tipo de ndice]Tabla_NombreCampo

Llave primaria

pk_

pk_Tabla_Campo(s)

Llave fornea

fk_

fk_TablaDestino_TablaFuent e

Vistas Vista materializada

vw vm

vwNombreVista vmNombreVista

Chequeo

chk_

chk_Tabla_Campo

Job

BD_

BD_Funcionalidad

base de datos llamada SISDNP puede llamarse de la siguiente forma: SISDNP_SincronizarTablas Para el caso de un Job que realice tareas para diferentes bases de datos, se colocara solo el nombre del Job y puede llamarse de la siguiente forma: SincronizarTablas El prefijo F permite identificar que el objeto de la base de datos es una funcin que retorna algn dato. Se debe escribir el nombre de la funcin con un verbo en infinitivo seguido de palabras complementarias. El prefijo P indica que el objeto referenciado es un procedimiento almacenado de la base de datos. Se debe utilizar el tipo de escritura PascalCase. Se debe utilizar el tipo de escritura PascalCase.

Funciones

FObtenerSaldoProye cto
PRegistrarFuenteProyecto ProyectoVigencia Vigencia

Procedimientos Tablas Campos

P -

7.3.2. Nombramiento de Tablas

Estilo de escritura: Pascal Case. Nombre:

Los nombres de las tablas deben estar asociados a la informacin que contiene, deben ser de fcil lectura y nemotcnicos. Utilizar prefijo de tres letras por agrupacin funcional (Por ejemplo: Cat, Seg. etc). En caso de utilizar algn tipo de agrupamiento en la base de datos se puede utilizar un prefijo de tres letras que permita realizar dicho agrupamiento. Para el caso de las tablas de referencia (lookup) puede ser til el uso de un prefijo que identifique las tablas como tal (Ejemplo: TipoEstado). El tamao mximo permitido por la base de datos es de 30 caracteres, aunque se sugiere que no pase de 12 o 14 caracteres para facilitar el uso de las mismas. En caso de utilizar diferentes esquemas en la base de datos se pueden emplear sinnimos con el fin de facilitar el uso de las tablas. No es permitido el uso del carcter underscore (_). Escritura General de Tablas Sin Agrupamiento (Agrupamiento por funcionalidad o cualquier otro criterio): <NombreTabla> Ejemplo: (Usuarios) Tabla para guardar la informacin de los usuarios de la aplicacin.

Escritura General de Tablas Con Agrupamiento (Agrupamiento por funcionalidad o cualquier otro criterio): <PrefijoAgrupamiento><NombreTabla> Ejemplo: (CatUsuarios) Tabla para guardar la informacin de los usuarios de la aplicacin.

Escritura General de Tablas de Referencia (lookup): <Prefijo><NombreTabla> Ejemplo: (TipoDocumento o TipoEstado) Tabla para guardar los tipos de documento o tipos de estado.

Escritura General de Tablas de Cruce: <NombreTabla1><X><NombreTabla2> Ejemplo: (UsuariosXDependencias) Tabla de cruce entre las tablas Usuarios Dependencias, la tabla de cruce podra llamarse de la siguiente forma. y

7.3.3. Nombramiento de Columnas Nombre:


Los nombres de los campos deben estar asociados a la informacin que contiene, deben ser de fcil lectura y nemotcnicos. Usar nombres descriptivos y lo mas cortos de ser posible, el objetivo es facilitar su lectura y proveer facilidad para su manejo. Las llaves primarias de la tabla deben estar agrupadas al principio de la tabla y deben estar definidas en la base de datos como llaves primarias. No se debe usar el alias de la tabla como prefijo para el nombramiento de las columnas. Para el caso de las llaves forneas, estas deben llamarse de igual manera que la tabla a la que se hace referencia y debe estar identificada como llave fornea en la tabla con su correspondiente relacin con la tabla referenciada, en caso de ser posible. En raras ocasiones no se pude establecer dicha relacin por diferentes motivos inherentes al diseo de la base de datos. En la medida de lo posible y de ser necesario se deben usar restricciones de campo (Check Constraints o Null Constraints) para validar la informacin ingresada en los campos.. No es permitido el uso del carcter underscore (_).

7.3.4. Nombramiento de Sinnimos Los nombres de los sinnimos deben ser equivalentes en la medida de lo posible a los nombres de los objetos que representan, omitiendo el esquema al que pertenece el objeto.

7.4 Documentacin

Cada procedimiento, funcin, paquete en la base de datos, debe llevar una pequea documentacin al comienzo junto con un rea para registrar las modificaciones que se realicen con el tiempo (antes del begin principal).

En los procedimientos y funciones que manejen parmetros, se debe escribir un parmetro por lnea, y frente a cada uno se debe hacer una pequea documentacin de este. Se debe documentar el cdigo de los procedimientos y funciones, de manera que se logre entender fcilmente la funcionalidad de stos. Bloques de programas grandes deben documentarse donde comienzan (debajo del begin) y donde terminan (antes del end).

Ejm: CREATE PROCEDURE GenerarCodigoPresupuestal @HBPIN varchar (13) //codigo bpin AS {FECHA CREACION: Octubre 1 de 2008 DISEO: Nro_doc_diseo AUTOR: Pedro Perez. PROGRAMA: Generacin de cdigos presupuestales PARAMETROS: HBPIN Cdigo BPIN del proyecto. MODIFICACIONES FECHA AUTOR CASO DE USODESCRIPCION 15/10/2008 Pedro Perez Nro_caso_uso Se aade validacin de codigo BPIN activo. Adems de la observacin en el encabezado de la unidad principal, se debe documentar dentro del cdigo los sitios donde se han realizado modificaciones, as: // Autor fecha comentario breve //PPEREZ 15/10/2008 Se aade consulta a la tabla historica de BPIN. Toda variable y constante utilizada debe estar documentada, por esta razn se escribe una por lnea. Ej: codigoBPIN varchar(13); //Esta variable hace referencia al cdigo completo concatenado nodo+consecutivo+subproyecto. 8. Interfaz Grfica Salvo algunas excepciones como es el caso de la estructura de las pginas y la ubicacin del men, las cuales fueron reubicadas para ampliar el rea de contenido (o rea de trabajo), como as lo solicit el usuario del sistema. El grupo debe utilizar los estndares de la capa de presentacin establecidos por la oficina de Informtica, y que se encuentran en la siguiente ubicacin: http://larebeca/Portals/0/archivos/documentos/TIC/Capa%20de%20Presentacin%20-%20Gua %20General%20para%20Sistemas%20de%20Informacin.pdf Otras consideraciones que se deben tener en cuenta son las siguientes: 8.1 Tamao de controles

El alto de los controles debe ser de 20 ppi.

CONTROL Edit 2 caracteres Edit 3 o 4 caracteres Edit 5 a 8 caracteres y fechas sin hora Edit 9 a 12 caracteres Edit 13 a 16 caracteres Edit 32 a 39 caracteres Edit 40 a 64 caracteres El edit de 40 puede ser de 232 cuando no afecte la funcionalidad Listas (4 caracteres) Listas (16 caracteres) Control Prefijo Botones de comandos Label lbl TextBox DataGrid Button ImageButton Hyperlink DropDownList ListBox DataList Repeater Checkbox CheckBoxList RadioButton RadioButtonLis t Image Panel PlaceHolder Calender Adrotator Table Validators ValidationSum mary txt dg btn ibtn lnk ddl lst dlst rep chk chk rdo rdo img pan plh cal adr tbl val vals Ejemplo lblSurname txtSurname dgResults btnSave ibtnSave lnkHomePage ddlCompany lstCompany dlstAddress repSection chkMailList chkAddress rdoSex rdoAgeGroup imgLogo panSection plhHeader calMyDate adrBanner tblResults valCreditCardNum ber valsErrors

ANCHO 20 ppi 50 ppi 66 ppi 100 ppi 120 ppi 232 ppi 298 ppi

56 ppi 140 ppi 80 ppi

Los campos donde se capturen valores numricos deben tener ancho especificado segn el nmero de enteros y decimales que se maneje. Ancho sugerido 150 para campos numricos 17,2. 8.2 Prefijos por cada control

8.3 Recomendaciones generales


1) Definir claramente los bloques de informacin, estableciendo marcos con ubicaciones fijas para el men principal, el titulo y el cuerpo de la pgina. Ej: En pginas para filtrar informacin y mostrar el resultado de la consulta, se debe tener un bloque de parmetros y un bloque de resultados identificables.

2) Verificar que todos los encabezados, titulos y nombres de los controles hayan sido modificados de acuerdo a las recomendaciones, sin dejar el nombre por defecto.

3) Frente a cada caja de texto debe existir una etiqueta con una descripcin clara y representativa que indique el dato que se debe introducir.

4) Se deben inhabilitar los controles, cuando el usuario no tenga los permisos suficientes para utilizar la pgina.

5) Los combos deben tener como maximo 25 valores, los cuales deben estar ordenados alfabticamente de manera ascendente. (En los casos en que las listas de valores sean superiores a 25 valores, se deben utilizar controles de autocompletar o ventanas emergentes con opcin de busqueda por parametros). Se debe verificar que el control tenga la longitud del maximo valor posible (para evitar redimensin del control y de la pgina, lo cual genera barras de desplazamiento).

6) Utilizar los mismos colores en todas las pginas.

7) Los conos utilizados deben cumplir en todas las pginas la misma funcin (Ej: no se debe tener un icono para imprimir en una pgina y en otra pgina el mismo icono para consultar).

8) En campos de fecha, se deben tener siempre el mismo formato de fecha. (Ej: DD-MM-YYYY y validar que no se ingresen fechas en otros formatos).

9) Las dimensiones de las pginas deben ser iguales. (Width y Height)

10) Todos los controles en el cuerpo de la pgina deben estar alineados (Ej: Todos los controles deben estar alineados a la izquierda o derecha, pero no en ambas alineaciones).

11) Todos los controles utilizados para ingresar datos o seleccionar datos, deben tener Tooltips que describa el dato a ingresar.

Bibliografa
-

Design Guidelines for Class es/library/czefa0ke(VS.71).aspx

Library

Developers

http://msdn2.microsoft.com/es-

Guidelines and Best Practices http://msdn2.microsoft.com/es-es/library/ms184412.aspx Best Practices http://msdn2.microsoft.com/es-es/library/ms184411(VS.80).aspx Instant SQL Formatter http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl
Buenas Prcticas de Codificacion , Estandar de codificacin y documentacin de codigo fuente para aplicativos informticos, Guia rpida del estandar de codificacin y documentacin de cdigo fuente para aplicativos informaticos

http://larebeca/GestindeTIC/LineamientosTcnicos/SistemasdeInformacin/Lineamient osTcnicosSI/tabid/724/Default.aspx

S-ar putea să vă placă și