Sunteți pe pagina 1din 41

ESTANDARES Y BUENAS

PRACTICAS DE DESARROLLO DE
SOFTWARE
CORE BANK 1.5

Marzo 2015

Contenido

ESTANDARES Y BUENAS PRACTICAS DE


DESARROLLO DE SOFTWARE CORE BANK
1.5

Revisin: 01
Fecha:
Cdigo: EDS-SI

1. Objetivo...................................................................................................... 5
2. Nivel de aplicacin.................................................................................... 5
2.1. Nomenclatura......................................................................................... 5
2.1.1. De proyectos........................................................................................ 5
2.1.2. De clases.............................................................................................. 5
2.1.3. De Objetos y/o Controles...................................................................5
2.1.4. Nomenclatura de Las instancias de las clases y formularios......7
2.1.5. De los mtodos en clases y formularios.........................................7
2.1.6. De Variables......................................................................................... 7
2.1.7. De Constantes..................................................................................... 9
2.1.8. Del Indentado...................................................................................... 9
2.1.9. De Editor de cdigo............................................................................ 9
2.2. Uso de control de excepciones..........................................................10
2.3. Liberacin de cuentas.........................................................................10
2.4. Uso de imgenes en los controles.....................................................10
2.5. Uso clases de encriptacin.................................................................10
2.6. Uso de Regiones................................................................................... 11
2.7. Uso de Snippets................................................................................... 11
2.8. Administracin de plantillas en Visual Studio.................................15
3. Nivel de Base de datos...........................................................................20
3.1. Definicin de objetos o tablas...........................................................20
3.2. Definicin de campos..........................................................................21
3.3. Constraint e ndices............................................................................. 22
3.4. Vistas..................................................................................................... 23
3.5. Procedimientos almacenados............................................................23
3.6. Triggers.................................................................................................. 24
3.7. Declaracin de variables en SQL.......................................................24
3.8. Uso de Proyectos en Sql Server Management................................26
4. Estndares de codificacin SQL Server...............................................29
4.1. Objetivo de la estandarizacin en la base de datos.......................29
4.2. Convenciones de sintaxis de Transact-Sql.......................................29
5. Variables Globales del Core Bank.........................................................37
6. Buenas Prcticas de Programacin......................................................38
6.1. Codificacin........................................................................................... 38
Elaborado
Revisado:
Aprobado:
Pgina
Alan Huanca Villaverde
Comit revisor
Vidal Egas Arroyo
Pgina 2 de 41
Confidencial: Est prohibida la reproduccin total o parcial del contenido de este documento sin permiso de la
empresa Soluciones Integrales ELS S.A.C. - SolIntELS.

ESTANDARES Y BUENAS PRACTICAS DE


DESARROLLO DE SOFTWARE CORE BANK
1.5

Revisin: 01
Fecha:
Cdigo: EDS-SI

6.2. En la Base de Datos............................................................................. 40

Elaborado
Revisado:
Aprobado:
Pgina
Alan Huanca Villaverde
Comit revisor
Vidal Egas Arroyo
Pgina 3 de 41
Confidencial: Est prohibida la reproduccin total o parcial del contenido de este documento sin permiso de la
empresa Soluciones Integrales ELS S.A.C. - SolIntELS.

ESTANDARES Y BUENAS PRACTICAS DE


DESARROLLO DE SOFTWARE CORE BANK
1.5

Revisin: 01
Fecha:
Cdigo: EDS-SI

INTRODUCCION
El presente documento proporciona un nivel de estndares de desarrollo de
sistemas, que permite a los usuarios encargados de mantenimiento de los
sistemas, cumplir adecuadamente sus funciones bajo parmetros y lineamiento
generales. Del mismo modo presentamos nomenclaturas convencionales que
conforman los Estndares para la programacin y mantenimiento de la base de
datos. El uso de procedimientos y documentacin estandarizada proporciona la
base de una comunicacin clara y rpida, adiestramiento menos costoso del
personal de sistemas, ayuda a los analistas y diseadores de sistemas en el
trabajo de integracin de sistemas, reduccin de costos de almacenamiento,
entre otros.
Por lo crtica de esta documentacin se debe revisar y actualizar
permanentemente, ajustando a las condiciones ms convenientes para el
desarrollo de sistemas.

Elaborado
Revisado:
Aprobado:
Pgina
Alan Huanca Villaverde
Comit revisor
Vidal Egas Arroyo
Pgina 4 de 41
Confidencial: Est prohibida la reproduccin total o parcial del contenido de este documento sin permiso de la
empresa Soluciones Integrales ELS S.A.C. - SolIntELS.

1. Objetivo
Establecer un marco de desarrollo nico y de fcil aplicacin al momento
de implementar las aplicaciones realizar por la empresa.

2. Nivel de aplicacin
2.1.

Nomenclatura

2.1.1.

De proyectos
La nomenclatura del proyecto a nivel de capas se define con la
abreviatura del mdulo y en la capa a la que pertenece. Como
se muestra en la imagen
Ejm: CAJ.CapaNegocio
es el ejemplo del nombre del
proyecto del mdulo de caja en la capa de lgica de negocio.
CAJ.AccesoDatos es el ejemplo del nombre del proyecto
del mdulo de Caja en la capa de acceso a datos.
Cualquier proyecto que se adicione deber ser del tipo
ClassLibrary de a acuerdo a la versin del netframework (4.5)
de la aplicacin y el lenguaje de programacin a seleccionar es
C Sharp (c#).

2.1.2.

De las clases
La Clase es la estructura de un objeto, es decir, la definicin de
todos los elementos de que est hecho un objeto. Una clase se
compone de dos partes atributos y Mtodos.
La definicin del nombre de las clases deber iniciar con el
prefijo cls de una clase, seguido por la abreviatura de la
capa al cual pertenece mostrado en la tabla N 1, finalizando
con el nombre de la clase. Donde la sintaxis quedara de la
siguiente forma: prefijo+Abreviatura+NombreClase.cls

Ejem1: La
forma de
nombrar
una clase
que

Abreviat
ura
CN
AD

Tabla N 1. Abreviatura de clase


Capa
Sintaxis

Capa de negocio
clsCNNombreClase.cs
Capa de acceso a
clsADNombreClase.cs
datos
pertenece a la capa de negocio encargado del cierre de crdito seria como
sigue: inicia con cls la que indica que representa a una clase, continua
con CN la que indica que pertenece a la capa de negocio, y finalmente el
nombre de la clase CierreCredito. Dando como resultado el siguiente
nombre: clsCNCierreCredito.cs
2.1.3.

De Objetos y/o Controles


Para los nombre lgicos se debe evitar totalmente el uso de los
nombres por DEFECTO cuando insertamos los controles y
objetos en los formularios, dichos nombres deben ser

cambiados tan pronto como se han adherido en los formularios,


haciendo uso de los prefijos establecidos.
Todos los objetos de los formularios deben tener el siguiente
prefijo, seguidamente de la descripcin del objeto tal como se
mencionan los campos:
Tabla N 2
GroupBox
Textbox
Button
Combo box
GridView
Label (etiqueta)
RadioButtonList
CheckBox
NumericUpDown
Picture box
TabControl
DateTimerPicker
ListView
User control

grb
txt
btn
cbo
dtg
lbl
rbl
chb
nud
pbx
dtp
tmr
ltv
con

Ejemplos:
cboAgencia
Combo box para listar las agencias
chbCodOfi
Check box para seleccionar los cdigos
de oficina
txtNroDocumento Textbox para recabar la informacin
del Nmero de documento.
Nombres Fsicos
El Primer grupo de tres caracteres debe hacer referencia a las
abreviaciones para identificacin del objeto mostrada en la
tabla N 3.
Para asignar nombres a los formularios, programas, libreras,
etc. deben tener el siguiente estndar:
Xxx Yyy Zzz Www N . ext
Donde:
XXX

Abreviacin del objeto


Para el caso de un formulario seria frm
(ver tabla de abreviatura de objetos
fsicos)
YYY

primer detalle descriptivo.


ZZZ

segundo detalle descriptivo


XXX

tercer detalle descriptivo (opcional)


N

nmero que permite diferenciar dos


programas idnticos (no es obligatorio).
EXT

Extensin que permite saber si es


programa, formulario, librera, ejecutable, etc.

Ejemplo 1: frmDeclaracionMasivaSueldo.frm
frm

Abreviacin de objeto fsico


Declaracion

primer detalle
descriptivo.
Masiva

segundo detalle descriptivo.


Sueldo

tercer detalle descriptivo.


Tabla N 3 Abreviatura Objeto fsico
Nombre
Prefijo
Sintaxis
Formulari
frm
frmNombreFormulario
os
Reportes
rpt
rptNombreReporte
Clases
cls
clsNombreClase
Ejemplo 2: el nombre de un formulario de apertura de cuenta
estar compuesto de la siguiente manera, inicia con frm por
tratarse de un formulario, seguido por el nombre del formulario
que sera AperturaCuenta, quedado como nombre de
formulario lo siguiente: frmAperturaCuenta
2.1.4.
Nomenclatura de las instancias de las clases y
formularios
Al crear una nueva instancia de una clase debe anteponerse las
siglas de la capa a la que pertenece la clase, la nomenclatura
deber ser en letras minsculas, por ejemplo:
Para la instancia de la clase clsADDeposito debe de ser:
addeposito
Y para la clase clsCNCredito debe de ser: cncredito
Y para el caso de formularios de ser necesario su uso, deber
iniciar nombrarse con el mismo nombre pero con letras
minsculas, por ejemplo:
Para el formulario
frmcontenedornue

frmContenedorNue

la

instancia

es:

2.1.5.
De los mtodos en clases y formularios
Los mtodos y/o funciones que se declaran en las clases y
formularios debern seguir el siguiente formato:
-

xxxYyy()
Donde
xxx: es la accin en verbo infinitivo, escrito en
minsculas.
Yyy: es el objeto sobre la cual se aplica la accin,
escrito con la primera letra en mayscula y a
continuacin en letras minsculas.
Ejemplo:
guardarCobranza()
retornarSolicitud()

2.1.6.

De Variables
Las variables vienen precedidas por una letra, la cual indica el
tipo de variable que es. El nombre de la variable deber ser
significativo en relacin a su significado y/o uso, utilizando
palabras representativas, y comenzando de preferencia con
una letra en mayscula.
Compuesta por las siguientes partes:

t
Yyy
Zzz
?

t Yyy Zzz Xxx ?


Prefijo de tipo de variable (todo en minscula)
1ra. Descripcin del campo. (1ra Letra en mayscula)
2da. Descripcin del campo.(1ra. Letra en mayscula)
Nro. Adicional para diferenciar dos variables iguales

Tipos de Variables (t):

c
d
t
n
l
g
a

Tabla N 4
Carcter
Fecha
Fecha y hora
Numrico
Lgico
General
Array (arreglos)

Ejemplos: cCodigoCliente,
dFechaSistema

cCodigoCliente1,

El uso de nombres como J, K, L, M, debe restringirse a


variables de control de ciclos (for K = 1), contadores cuyo
significado resulte obvio.

Clasificacin de Variables
Para asignar los prefijos y nombres las variables se clasifican de
la siguiente manera:

Por alcance de las variables:


Tabla N 5
Local, debe de declararse en un
mbito de un mtodo.
Global o publica, debe de declararse
en la regin de variables globales.
Pblicas o Globales: Declaradas en la regin de variables
globales dentro de la clase.
Privadas o Locales: Variables que van a servir solo para
uso local de formularios, programas o procedimientos y sus
respectivos sub niveles en casos fuesen necesarios.

Ejemplos: cCuenta, lVigente


Ejemplo: dFechaNacimiento
2.1.7.
De Constantes
No deben de usarse constantes no nombradas. Las nicas
constantes permitidas deben ser las obvias tal como 1 en for j
= 1
2.1.8.
Del Indentado
Por cada nivel de anidamiento se deber contar con indentado
por defecto proporcionado por Visual Studio.
2.1.9.
De Editor de cdigo
La fuente, tamao, color, color de fondo, etc. Correspondern a
los que por defecto brinda Visual Studio.
2.1.10.
De Comentarios.
Los comentarios se realizaran a nivel de los mtodos y
funciones.
Usar // para comentar en un rengln y para comentarios ms
amplios, usar el siguiente formato:
Ejm:
///
///
///
///

<summary>
Realiza una bsqueda de cliente por nombre
Seguridad: Administradores
</summary>
/// <param name="nombre">Parte del nombre a
buscar</param>
/// <returns>Lista de clientes</returns>
2.1.11.
De Operadores
Todos los operadores deben rodearse de un espacio antes y
despus del operador. Ejemplo A = A + B, los que por defecto
brinda el .Net. al asignar el ; al final.
2.1.12.
De Llamadas a Sp
La Ejecucin de Stores Procedures deber realizarse a travs
de la clase objEjeSp y su mtodo EjecSP. Adems el envo de
parmetros al SP deber ser de forma implcita.
Luego deber ejecutarse el SP de la siguiente manera:
objEjeSp.EjecSP("GEN_InsSoliciAproba_SP", idAgencia,
idCliente,
nTipOper, idMoneda, idProducto,
nMonto, idCuenta, dFecSolic, idMotivo,
cSustento, dFecAprob, idUsuario);
2.1.13.

De Messagebox

En el cuadro de mensaje, se debe de colocar un mensaje claro


y conciso de lo que se quiere expresar. Como ttulo de mensaje
debe ir la descripcin del proceso que se est ejecutando, de
preferencia con un verbo dentro del ttulo.
*Revisar el uso de CodeSnippets.
Tabla N 6
Icono
Signo de
exclamacin.
Titulo. ADVERTENCIA
Icono de
informacin (i).
Ttulo:
INFORMACION
siguientes iconos para

Situacin
Para avisar o consultar al usuario sobre
algo inesperado, se puede dar la
posibilidad de elegir entre varios botones.
Cuando se desea informar de un proceso
concluido, o de una tarea ejecutada
satisfactoriamente.

Utilizar
los

los casos especificados:

2.2.
Uso de control de excepciones
La arquitectura actual proporciona de manera genrica el control de
excepciones al iniciar cada instancia de un formulario al ser llamado
de manera dinmica desde el men con la clase Exception, sin
considerar el formulario de inicio y el formulario principal.
Solo en casos que justifiquen su uso explicito se proceder a
implementar la sentencia:
try
{}
catch (ExceptionExplicit ex)
{}

2.3.
Liberacin de cuentas
Al utilizar los controles de bsqueda de cuentas ya sea de crditos
y/o
depsitos,
dichas
cuentas
quedaran
bloqueadas
automticamente de manera lgica en el registro de la base de
datos, por ello deber implementar el mtodo de liberacin en los
eventos de cierre de formularios.
2.4.
Uso de imgenes en los controles
Para la creacin de un nuevo botn deber considerar un icono en
formato PNG la cual deber ser lo ms descriptivo con respecto a
la funcin que realizara. Las dimensiones son:
-

Width : 24 px
Height : 24 px

2.5.
Uso clases de encriptacin
Deber utilizar la clase clsCriptografia ya existente para la encriptacin
y desencriptacin de cadenas, dicha clase podr referenciarla desde
el namespace GEN.Funciones.

Nota: Dicha clase es utilizada directamente ya que contiene mtodo


de tipo esttico.
2.6.
Uso de Regiones
En la codificacin se debe usar las regiones para facilitar la lectura
del cdigo.
Las regiones deben agruparse por los eventos, variables globales
(Definicin de Variables), mtodos y funciones. Por ejemplo en la
capa de presentacin se dar de la siguiente forma:

Para la declaracin de los namespaces se utilizara la regin de


directivas, tal como se muestra en la siguiente imagen.

2.7.
Uso de Snippets
Un snippet es un bloque de cdigo reutilizable que puede insertar
donde sea necesario en el cdigo.
Ejemplo de un snippet:
for (int i = 0; i < length; i++)
{
}

El ejemplo muestra el snippet para el bloque de cdigo for, por


conceptos de programacin se sabe que el bloque de cdigo se usa
para un bucle repetitivo controlado por los parmetros indicados.
Creacin de snippets para Visual Studio
Un Snippet es un archivo en formato xml con la extensin .snippet.
Para crear nuestros propios snippets solo tendremos que crear un
archivo xml con la siguiente estructura:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>MensajeInfo</Title>
<Shortcut>minfo</Shortcut>
<Description>Code snippet para messageBox de
informacin</Description>
<Author>Alan Huanca Villaverde</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>Mensaje</ID>
<ToolTip>Mensaje a mostrar</ToolTip>
<Default>Informacin ....</Default>
</Literal>
<Literal>
<ID>Titulo</ID>
<ToolTip>Titulo del mensaje</ToolTip>
<Default>Titulo ....</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[MessageBox.Show("$Mensaje$", "$Titulo$",
MessageBoxButtons.OK,
MessageBoxIcon.Information);]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

Los parmetros a configurar dentro del formato son los siguientes:

Title: Es el ttulo del snippet, generalmente indica la


funcionalidad del bloque de cdigo que contiene el snippet.
Shortcut: Es la abreviatura del snippet, y el nombres por el cual
podremos llamar al snippet en el IDE Visual Studio.
Descripcin: Descripcin de la funcionalidad del bloque de
cdigo que contiene el snippet.
Author: Nombre del autor del snippet.

SnippetTypes: Enumera los tipos de snippets, por defecto se


colocaran los dos tipos: Expansions y SurroundsWith.
Declarations: Dentro de esta parte, se declararan los literales o
partes del snippet en que se podrn reemplazar con los valores
que el desarrollador desee.
Literal : Para declarar un literal, solo tendr que agregar un
elemento de tipo Literal, dentro de este elemento, colocar un
elemento ID, que ser el identificador del literal, este deber de
ser nico en el snippet. Adems se debe agregar un elemento
Tooltip, que ser el texto que se mostrar como ayuda o
descripcin del snippet; por ltimo agregar un elemento Default,
que ser el valor que asumir el Literal por defecto.
Podr agregar tantos elementos Literal como desee.
Code: En este elemento se colocar el cdigo del snippet, para
hacer uso de un literal previamente declarado, solo bastar con
ponerlo entre signos de dlar (Ejemplo: $Numero$).

Importacin de Snippets a Visual Studio


Para importar los snippets creados a nuestro entorno de desarrollo
que en este caso es Visual Studio, seguiremos los siguientes pasos.
1. Ingresar al Administrador de Snippets, por medio del men
Herramientas.

2. Seleccione el botn Importar, y busque la ubicacin del snippet o


snippets que quiere importar.

3. Por ultimo seleccione la carpeta a la que se agregaran los


snippets.

Uso de Snippets en Visual Studio


Para hacer uso del snippet solo tiene que escribir el shortcut
configurado al crear el snippet, y presionar dos veces la tecla TAB, a
continuacin el cdigo referente al snippet se mostrar.

2.8.

Administracin de plantillas en Visual Studio

Visual Studio permite definir plantillas de archivos para agregar


sobre algn proyecto, esto facilita a los desarrolladores a no tener
que reescribir cdigo repetitivo y comenzar con una base
predefinida.
Las plantillas pueden ser cualquier tipo de archivo soportado por
Visual Studio, por ejemplo podremos crear plantillas de clases,
formularios, archivos css, javascript, etc.
Creacin de plantillas
Para crear una plantilla, es necesario que usted gener el cdigo que
desee plasmar en la plantilla.

Para crear la plantilla a partir del archivo generado, ingrese al men


Archivo y a continuacin al submen Exportar plantilla

Seleccione la opcin Item Template, luego seleccin el tem que


quiere convertir en una plantilla.

Si la plantilla requiere referencia seleccione las que sean necesarias.

Complete los datos de la plantilla, los datos solicitados sern el


nombre de la plantilla, la descripcin de la plantilla, un icono que
identifique la plantilla, una imagen de vista previa de lo que generar
el archivo, y por ltimo se mostrar la ruta del archivo de salida,
donde podr buscar la plantilla.
La plantilla generada ser un archivo comprimido en formato ZIP.

Agregar una plantilla a Visual Studio


Para agregar una plantilla deber de ingresar al menu Herramientas
y al submenu Opciones. Selecione la opcion Proyecto y soluciones y
luego la opcion General.

Para poder usar las plantillas de usuario personalizadas, tiene dos


opciones, la primera cambiar la ruta de la localizacin de las
plantillas de usuario, o caso contrario agregar sus plantillas a la
carpeta asignada por defecto.
Luego de haber realizado alguna de las opciones, acepte los
cambios.
Uso de plantillas en Visual Studio
Para usar una plantilla previamente agregada, solo deber agregar
un elemento al proyecto, al hacer esto se mostrar la plantilla
agregada.

Al agregar el elemento, podr ver que se genera un archivo con el


cdigo de la plantilla agregada.

3. Nivel de Base de datos


3.1.

Definicin de objetos o tablas

Para la definicin de una tabla se debe tener en cuenta el siguiente


formato:

SI_FI

Tabla N 7
Xxx
Yyy

Zzz

N
(T) Debe identificarse qu tipo de tabla es:

M
T
H
D
P
W
A

maestro
Tipos genricos
Histrico
Detalle (descriptivo)
Puente
Tabla de Trabajo Temporal
Auditoria

(Xxx) Primera descripcin de la tabla. (Abreviacin)


(Zzz) Segunda descripcin de la tabla. (Abreviacin)
(Yyy) Tercera descripcin de la tabla. (Abreviacin)
Mnimo 6 caracteres
Ejemplo: SI_FinDReciboEgreso
Donde:

SI_Fin
D
Recibo
Egreso
3.2.

Prefijo de una tabla


Detalle
Primera descripcin de la tabla
Segunda descripcin de la tabla

Definicin de campos

Los campos de las tablas deben al igual que las variables mantener
las normas. Se tiene la siguiente descripcin del armado de los
campos.
t Yyy Zzz Xxx ?
t
Yyy
Zzz
Xxx
?

tipo de dato
1ra. Descripcin del campo. (1ra Letra en mayscula)
2da. Descripcin del campo.(1ra. Letra en mayscula)
3ra. Descripcin del campo. (1ra Letra en mayscula)
Nro. Adicional para diferenciar dos campos iguales

Ejemplos: nNumeroDocumento
Donde:
n
Numero

Documento

Prefijo del tipo de dato numrico


Primera descripcin del campo
Segunda descripcin del campo

La asignacin de diccionario de datos ser con la siguiente sentencia


Sql:
GO
EXEC sp_addextendedproperty
@name = N'cVariable',
@value = 'Nombre de la variable',
@level0type = N'Schema', @level0name = 'dbo',
@level1type = N'Table', @level1name = 'SI_FINVariable',
@level2type = N'Column', @level2name = 'cVariable';
GO

3.3.

Constraint e ndices
CONSTRAINT PRIMARY KEY (Clave Primaria)
Estructura:
NombreTabla_NombreIndice_CPK
Ejemplo: SI_FinMCliente_CPK
PK_SI_FinEstadoComprobante

CONSTRAINT FOREING KEY (Clave fornea)


Estructura:
Nombretabla1_Nombretabla2_ NombreClaveForanea
_CFK
Nombretabla1: Tabla Origen
Nombretabla2: Tabla Destino
Ejemplo: SI_FinMCliente_SI_FinMMatricula_CFK

CONSTRAINT DEFAULT
Estructura:
NombreTabla_NombreDefault_CDF
Ejemplo: SI_FinMCliente_SI_FinMMatricula_CDF

CONSTRAINT CHECK
Estructura:
NombreTabla_NombreCheck_CCH
Ejemplo: SI_FinMCurso_cCodigoCurso_CCH

INDICES CLUSTERED
Estructura:
NombreTabla_NombreIndice_IXC
Ejemplo: SI_FinMRecibo_nNumRecibo_IXC

INDICE NONCLUSTERED
Estructura:
NombreTabla_NombreIndice_IXN
Ejemplo: SI_FinMRecibo_dFecEmiRec_IXC

3.4.
Vistas
Estructura:
xxxNombreVista_Vis
xxx
Bank
NombreVista

Abreviatura (SI_Fin) que corresponde a Core


Nombre corto de la vista

Ejemplo: SI_FinMDireccionCliente_Vis
3.5.
Procedimientos almacenados
Estructura:
XXX_NombreSP_SP
Donde:
Abreviatura del mdulo al que pertenece (ver tabla
de mdulos). Longitud 03 caracteres.

Xxx

Descripcin del procedimiento almacenado.


La descripcin tiene 12 caracteres de longitud.
Compuesto de la siguiente manera:
XxxYyyZzzWww
Identifica que se trata de un procedimiento
almacenado. (store procedure)

NombreSp

SP

Tabla N 9. Tabla Mdulos


Nombre
Abreviat
ura
CREDITOS
CRE
AHORROS(DEPOSITO)
DEP
CAJA
CAJ
CLIENTES
CLI
CONTABILIDAD
CNT
RECURSOS HUMANOS
GRH
LOGISTICA
LOG
ADMINISTRACION
ADM
SERVICIOS
SER
SPLAFT
SPL
REPORTES
RPT
CANALES ELECTRONICOS
CNE
Ejemplo: ADM_InsertarProducto_SP

Los
Stored
Procedures
deben
nombrarse
con
prefijo
AbreviaturaModulo_. NO usar nunca sp_, La razn porque: SQL
Server reconoce el prefijo sp_ como System Stored Procedure, es
decir, un procedimiento almacenado de Sistema y lo buscara en la
BBDD Master.
3.6.

Triggers

Estructura:
xxx_yyy_NOMBRETABLA_TR
Donde:
XXX Nombre del mdulo
yyy Tipo de desencadenador (Upd, Ins, Del), o la combinacin de
los 3 casos.
Nombre Tabla
Nombre de la Tabla sin el indicador de aplicativo
Ejemplo: CRE_Upd_SI_FinMCliente_tr
3.7.
Declaracin de variables en SQL
Las variables seguirn el patrn de estndares para la declaracin de
campos en tablas BD. Bajo las siguientes consideraciones:

Normas generales de nomenclatura


Los identificadores deben cumplir los siguientes requisitos:
El primer carcter del identificador debe ser una letra o uno de los
siguientes smbolos _, @, # Los smbolos @ y # tienen un significado
especial:
Un identificador comenzando con @ representa a una variable local.
Un identificador comenzando con # representa el nombre de un
objeto temporal (Tabla o ndice).
En caso de una tabla o stored procedure, el smbolo # representa a
un objeto temporal local, y dos smbolos (##) representan a un
objeto temporal global.
Los nombres de los objetos temporales no deben exceder los 13
caracteres, incluyendo al # o ##, debido a que SQL Server les
agrega un sufijo numrico interno.
Los caracteres posteriores al primer carcter deben ser referidos
bsicamente a la descripcin de la variable. Definiendo en tres
palabras con la abreviacin de cada una con 03 caracteres por
palabra.
Por defecto, no se aceptan espacios en blanco en medio de los
identificadores; no obstante, su uso est permitido si se usan
identificadores delimitados por comillas dobles. En el presente

estndar, no se permiten los espacios en blanco como parte de un


identificador.

Convenciones para nombres de variables


Todos los nombres de variables deben escribirse con una letra
minscula inicial seguido de un descriptor preferentemente referido
a un campo, respetando los estndares y nomenclaturas:
<prefijo> <descripcin> <variante>
Donde:
<prefijo>

Prefijo del tipo de dato (01 carcter)


<descripcin>

Descripcin de la variable (09


caracteres)
Preferentemente debe hacer referencia a los campos.
<variante>
Son nmeros que marcan la diferencia de una a
otra variable.
El prefijo debe representar el tipo de dato de la variable como se
muestra en la siguiente tabla:

Tipo de Dato
Binary
Character
Date and time
Exact numeric
Approximate
numeric
Integer
Monetary
Special
user-defined
datatypes
Text and image

Tabla N 10.
Tipo de dato de SQL Prefijo
Server
binary[(n)]
b
varbinary[(n)]
b
char[(n)]
c
varchar[(n)]
c
Datetime
d
smalldatetime
d
decimal[(p[, s])]
n
numeric[(p[, s])]
n
float[(n)]
n
Real
Int
Smallint
Tinyint
Money
smallmoney
Bit
timestamp

n
n
n
n
n
n
l
d
udt

Text
Image
Xml

t
I
x

En la medida de lo posible usar abreviaciones para variables segn la


tabla de abreviaciones (estas abreviaciones estn incluidas el
repositorio de estndares del proyecto).
3.8.
Uso de Proyectos en Sql Server Management
Para un control adecuado de los scripts generados durante el
desarrollo se deber hacer el uso de proyectos, los cuales nos
proporcionan una adecuada gestin y mantenibilidad de los
documentos en Sql Server Management, a continuacin se describe
los pasos a realizar:
a. Realizar la conexin al servidor de base de datos

b. Desde la barra de
File/New/Project

men

principal

seleccionar

la

opcin

c. Se mostrara la ventana donde se asignara el nombre del proyecto


y su ubicacin a almacenar dicho proyecto.

d. Una vez guardado, se mostrara la ventana Solution Explorer


donde podr visualizar la solucin y el proyecto creado.

e. Dentro del proyecto se mostrara la carpeta Queries donde podr


agregar los archivos .sql

f.

A nivel de cada Proyecto deber mantener la siguiente estructura


bsica de archivos.

g. Las consideraciones para crear proyectos dentro de la soluciones


son:
- Un proyecto por cada requerimiento complejo.
- Un proyecto si se ha de crear un nuevo mdulo de la
aplicacin.
- Un proyecto referido a un proceso del negocio
h. Para Agregar un nuevo proyecto de sql, hacer click derecho sobre
la solucin y seleccionar la opcin a Add/New Project

i.

A continuacin deber asignar el nombre del proyecto de acuerdo


a lo requerido.

j.

Finalmente podr gestionar tantos proyectos que requiera dentro


de una solucin, siempre manteniendo el formato bsico de los
archivos.

4. Estndares de codificacin SQL Server


Transact-SQL es fundamental para trabajar con Microsoft SQL Server.
Todas las aplicaciones que se comunican con SQL Server lo hacen
enviando instrucciones Transact-SQL al servidor, independientemente de
la interfaz de usuario de la aplicacin.
4.1.

Objetivo de la estandarizacin en la base de datos


Hacer que el cdigo sea ms legible, claro y entendible, lo que a su
vez permitir asegurar un adecuado mantenimiento del mismo.

4.2.

Convenciones de sintaxis de Transact-Sql


Para codificacin de Procedimientos Almacenados (SPs), Funciones
(FNc) y Vistas (VIs) se deber cumplir con los siguientes estndares:
1. Para la creacin y/o modificacin de objetos como SPs, FNs y VIs
se deber tener el siguiente estndar:
a. Se deber verificar si el objeto existe, de ser as, se procede
con la eliminacin del objeto para su posterior creacin.
b. Los objetos debern contener una cabecera donde se
especifique los siguientes datos:
i. El Objetivo del cdigo
ii. La Persona que escribi el cdigo as algunos otros datos
personales (email, mvil, etc.)

iii. La Fecha de Creacin del objeto


iv. El Sistema y Mdulo para el cual se ha desarrollado el
objeto
v. Un historial de Modificaciones hechas al cdigo
vi. Una Sintaxis de Ejemplo, que indica el modo bsico de
ejecucin del objeto.
c. Luego de la cabecera se deber escribir el cdigo del objeto.
d. Finalmente se deber escribir los permisos requeridos para el
objeto.
e. La generacin del script de creacin de los objetos deber
realizarse con el asistente de Generacin Sql Script del MS
SQL Server (se debe marcar siempre la opcin: Script objectlevel permissions).
Ejemplo:
--ESTNDAR a.
IF EXISTS (SELECT * FROM dbo.sysobjects
where id = OBJECT_ID(N'[dbo].[dba_dbccreindex]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[dba_dbccreindex]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
--ESTNDAR b.
/*******************************************************************
* Copyright 2012 SolIntELS SAC - All rights reserved.
*
* Objetivo
:
Registro de una Cobranza
*
* Escrito por
:
Vidal EGAS ARROYO
* Email/Movil/Phone
:
vegas@solintels.com / #943616064
*
* Fecha creacin
:
2012/05/01
*
* Sistema / Modulo
:
CRE
*
* Modificaciones:
* Fecha
Responsable
Descripcion del cambio
* 2012-08-29
glopez
Insercion detalle de kardex
*
* Sintaxis de ejemplo:
EXEC CRE_RegCobro_SP cadena,'2013/02/13' ,69 ,1 ,0 ,2241 ,1
********************************************************************/

--ESTNDAR c.
CREATE PROCEDURE [dbo].[CRE_RegCobro_SP]
@XmlPlanPagoCobrado
XML
@dFechaSistema
SMALLDATETIME
@nUsuarioSis
INT
,

,
,

@nIdAgencia
@nMoraPagada
@cNroOpera

AS
BEGIN

INT

,
DECIMAL(14,2)
VARCHAR(50)

SET NOCOUNT ON
<CODIGO>
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
--ESTNDAR d.
GRANT EXECUTE ON [dbo].[CRE_RegCobro_SP] TO [ROL_FIN]
GO
2. Para un adecuado control de las fechas de despliegue de los SPs,
FNs y Vistas NO se admite modificaciones a los objetos con
la sentencia ALTER.
3. Cuando se codifiquen SPs, la primera declaracin que se debe
escribir es SET NOCOUNT ON, pues mediante esta sentencia se
minimiza el trfico de red entre el Servidor SQL y las aplicaciones
cliente.
Ejemplo:
CREATE PROCEDURE dba_dbccreindex
@iScanDensIni SMALLINT,--valor del rango inicial del scan density
a corregir
@iScanDensFin SMALLINT,--valor del rango final del scan density a
corregir
@cFrecuencia CHAR(2),--frec. de ejecucion del mtto. (TD: todos
los dias, DO: domingos)
@cDb
VARCHAR(50) --nombre de la BD a la que se hace
el mentenimiento
AS
SET NOCOUNT ON
<CODIGO>
4. Slo se crearn SPs cifrados (opcin WITH ENCRYPTION) si se
justifica la proteccin del cdigo contenido en estos.
Ejm:

CREATE PROCEDURE dba_dbccreindex


@iScanDensIni SMALLINT,--valor del rango inicial del scan density
a corregir
@iScanDensFin SMALLINT,--valor del rango final del scan density a
corregir
@cFrecuencia CHAR(2),--frec. de ejecucion del mtto. (TD: todos
los dias, DO: domingos)
@cDb
VARCHAR(50) --nombre de la BD a la que se hace
el mentenimiento
WITH ENCRYPTION
AS
SET NOCOUNT ON
<CODIGO>

5. Slo se crearn SPs para recompilacin (opcin WITH RECOMPILE)


si se justifica la recompilacin del plan de ejecucin en la cach.
Ejemplo:
CREATE PROCEDURE dba_dbccreindex
@iScanDensIni SMALLINT,--valor del rango inicial del scan density
a corregir
@iScanDensFin SMALLINT,--valor del rango final del scan density a
corregir
@cFrecuencia CHAR(2),--frec. de ejecucion del mtto. (TD: todos
los dias, DO: domingos)
@cDb
VARCHAR(50) --nombre de la BD a la que se hace
el mentenimiento
WITH RECOMPILE
AS
SET NOCOUNT ON
<CODIGO>
6. Cuando se escriba cdigo para SPs, es necesaria la utilizacin de
la variable @@ERROR, pues esta variable retorna el cdigo de
error de la ltima sentencia Transact-SQL y permite un control
sobre las excepciones que pudieran presentarse en una
transaccin. Se debe chequear frecuentemente la variable
@@ERROR, especialmente luego de sentencias de modificacin
de datos.
Ejemplo:
BEGIN TRAN

INSERT authors
(au_id, au_lname, au_fname, phone, address, city, state,
zip, contract)
VALUES ('409-56-7008', 'Bennet', 'Abraham', '415 6589932',
'6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
IF @@ERROR = 0
BEGIN
COMMIT TRAN
END
ELSE
BEGIN
ROLLBACK TRAN
END
Try catch
Go to trataerror
7. Las palabras reservadas se deben escribir en maysculas.
Ejemplo:
--LAS PALABRAS RESERVADAS SE ESCRIBEN EN
MAYSCULAS
DECLARE @loginame SYSNAME
SET @loginame = NULL

8. El identado consta de 4 espacios. El cdigo debe identarse para


que se identifique fcilmente una sentencia Transact-SQL dentro
un bloque de cdigo que realice una transaccin especfica. Es
decir, el identado debe facilitar la lectura adecuada del cdigo. As
mismo, debe minimizarse el ancho de las lneas escritas, puesto
que lneas de cdigo muy anchas tienden a ser menos
entendibles.
Ejemplo:
--IDENTADO en un bloque de cdigo
BEGIN TRAN
INSERT authors
(au_id, au_lname, au_fname, phone, address, city,
state, zip)
VALUES
('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
'6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
IF @@ERROR = 0
BEGIN
COMMIT TRAN
END
ELSE
BEGIN

ROLLBACK TRAN
END
9. Tambin se debe identar las sentencias SELECT que contienen
mltiples lneas.
Ejemplo:
--IDENTADO en mltiples lneas
SELECT e.emp_id, e.fname, e.lname, j.job_desc
FROM employee e
INNER JOIN jobs j
ON e.job_id = j.job_id
WHERE e.hire_date > '1990-01-01'
AND j.min_lvl >= 100
10.Para casos en que se tenga que usar sentencias CASE complejas,
se debern usar mltiples lneas para un mejor entendimiento del
cdigo.
Ejemplo:
--CASE complejos
SELECT
CASE region
WHEN 'WA' THEN 'Phil'
WHEN 'WA' THEN 'Phil'
WHEN 'WA' THEN 'Phil'
ELSE 'Unknown'
END AS Salesman,
CustomerID,
CompanyName,
ContactName
FROM Customers
ORDER BY Salesman

11.No es necesario incluir dentro del cdigo de los SPs la sentencia


BEGIN/END puesto que es innecesario. La sentencia BEGIN/END
debe usarse para los casos en que se requiera tener in flujo de
control de ciertas sentencias. Siempre se debe alinear
verticalmente la sentencia BEGIN con la sentencia END.
Ejemplo:
--Uso de clausulas BEGIN/END
IF @var = 1
BEGIN
PRINT '1'
END
ELSE
BEGIN
PRINT 'not 1'
END

12.Con la finalidad de tener cdigo T-SQL ms claro, se debe


mantener un espacio horizontal entre los operadores ( +, =,
<>, etc.) y dems cdigo. Tambin, se debe mantener un solo
espacio entre las clusulas T-SQL, columnas, etc.
Ejemplo:
--Espacios horizontales
SELECT CustomerID, CompanyName, ContactName
FROM Customers
WHERE City <> 'Madrid'
ORDER BY Salesman

13.Alias para columnas; en el caso de los alias para columnas se


deber mantener el siguiente estndar: ColumnName AS Label.
Ejemplo:
--uso de alias para columnas
SELECT
CASE region
WHEN 'WA' THEN 'Phil'
WHEN 'WA' THEN 'Phil'
WHEN 'WA' THEN 'Phil'
ELSE 'Unknown'
END AS Salesman,
CustomerID,
CompanyName,
ContactName
FROM Customers
ORDER BY Salesman

14.Alias para tablas; para el caso de alias de tablas, se puede omitir


la clusula AS y por ende se puede escribir seguidamente a la
tabla o vista el alias. Esto ayuda a distinguir los alias de columnas
y de tablas.
Cuando el query involucra al menos 2 tablas, vistas o funciones
tipo tabla, se debe poner como prefijo de la columna el respectivo
alias de la tabla.
Los nombres de los alias de tablas debern ser las letras del
alfabeto, y sern bsicamente una abreviacin o identificacin
nica de la tabla.
Para queries cortos sobre una sola tabla no se escriben alias.
Ejemplo:
--Alias de tablas
SELECT E.emp_id, E.fname, E.lname, J.job_desc
FROM employee E
INNER JOIN jobs J

ON E.job_id = J.job_id
WHERE
E.hire_date > '1990-01-01'
AND J.min_lvl >= 100

15.Se deben listar las columnas afectadas por la sentencia INSERT,


es decir cuando se realicen inserciones la lista de columnas
afectadas por esta sentencia debe ser explcita.
Ejemplo:
--Especificar claramente las columnas afectadas por la
sentencia INSERT
INSERT INTO miTabla
(codigo, nombre, apellido, puesto)
SELECT e.emp_id, e.fname, e.lname, j.job_desc
FROM employee e
INNER JOIN jobs j
ON e.job_id = j.job_id
16.Cuando se crean TRIGGERS, se debe escribir la sentencia SET
NOCOUNT ON dentro del cdigo para minimizar trfico de red.
Otra razn para usar el SET NOCOUNT ON dentro de Triggers es
porque los mensajes extras devueltos cuando se disparan
desencadenadores (producto de la ejecucin de algn cdigo)
puede causar resultados inesperados.
Ejemplo:
--Sentencia SET NOCOUNT ON dentro de Triggers
CREATE TRIGGER AHO_Del_AHOMCuenta_TR
ON dbo.AHOMCuenta
FOR DELETE
AS
SET NOCOUNT ON
INSERT INTO AHOAMCuenta
(cCodCuenta, cCodCliente, cCodTipCta, dFecApeCta,
cCodUsuApe, cCodMoneda, nMonDepApe, nMonCheVal,
cAuditUser, dAuditDate, cAuditStation, cAuditClient,
cModiUser, dModiDate, cModiStation, cModiClient, cAudTipCmd)
SELECT
cCodCuenta, cCodCliente, cCodTipCta, dFecApeCta,
cCodUsuApe, cCodMoneda, nMonDepApe, nMonCheVal,
cAuditUser, dAuditDate, cAuditStation, cAuditClient,
ISNULL(SUSER_SNAME(), 'NT Trusted'), GETDATE(),
HOST_NAME(), LEFT(APP_NAME(),50), 'D'
FROM Deleted
17.Se debe evitar el uso de sentencias tipo SELECT *. El uso de *
en sentencias SELECT resulta inadecuado puesto que el
mantenimiento del cdigo se hace ms tedioso, adems

modificaciones en la estructura de la tabla pueden ocasionar


errores o problemas de performance.
18.Comentarios. Se debe comentar aquel cdigo ambiguo o difcil de
entender, as como aquel cdigo que es significativo e importante
dentro del procedimiento. Se debe evitar sobre comentar as
como dejar de comentar, puesto que comentarios en exceso
hacen difcil de distinguir los comentarios importantes de los
menos importantes, y en caso de dejar de comentar dificulta el
mantenimiento y la identificacin de procesos importantes.
Los comentarios cortos deben estar precedidos de la clusula:
--<comentario>
Los comentarios que tengan ms de una lnea deben tener la
siguiente clusula:
/*
<comentario>
*/
19.Especificar la creacin de los cursores como de solo lectura

5. Variables Globales del Core Bank


La relacin de variables se encuentra en la tabla SI_FINMVariable con
nombre maestro de Variables, de la Base de Datos de Negocio, las
cuales tiene los siguientes campos:
Cada vez que se va aumentando alguna variable esta se agrega en la
tabla mencionada
dFechaAct
cURLReport
nTipoCambio
nIGV
nMoraMinima
cRutaBackUp
cNomImpTer
cNomEmpresa
cNomCortoEmp

Tabla 11. Variables Globales


Fecha del Sistema
Servidor Reportes
Tipo de Cambio
Impuesto General a las Ventas
Monto Mora Minima
Ruta BackUp full Base de Datos
Nombre de la impresora trmica
Nombre de La Empresa
Nombre Corto de La Empresa

Ojo: la notacin a usar para el campo nombre en todo el proyecto es la


Pascal donde el primer carcter de todas las palabras se escribe en Maysculas
y los otros caracteres en minsculas.

6. Buenas Prcticas de Programacin


6.1.

Codificacin
Para comparar dos strings se debe utilizar el String.Equal
pasndole cmo parmetro el StringComparison para evitar
diferencias entre maysculas y minsculas, as como tambin
las diferentes culturas.

Utilizar String.Empty
en lugar de en lugar de utilizar el
carcter de comilla doble ().

Utilizar enum en donde sea requerido. No uses nmeros o


cadenas para indicar valores fijos
Ejemplo:
enum TipoCorreo
{
Html,
TextoPlano
}

switch ( tipoCorreo )
{
case TipoCorreo.Html:
//hacer algo
break;
case TipoCorreo.TextoPlano:
// hacer algo
}
No utilizar cdigo duro en rutas o letras de dispositivos. Esto
deber ser almacenado en la base de datos.

Un mtodo debe tener solo una tarea. No combines ms de


una tarea en un solo mtodo, an si esas tareas son pequeas.

Evitar escribir try-catch en todos sus mtodos. Utilcelo slo si


hay una posibilidad de que una excepcin especfica se pueda
producir y no se pueda evitar por cualquier otro medio. Por
ejemplo 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.

Adoptar el paradigma Orientado a Objetos, con el paradigma


orientado a objetos tenemos la ventaja de reutilizar cdigo,
todo esto con el fin de aprovechar al mximo los pilares de la
programacin orientada a objetos
Abstraccin
Encapsulacin
Herencia
Polimorfismo
Introspeccin
Reflexin

Usa palabras entendibles y descriptivas para nombrar a las


variables. No uses
abreviaciones.

Correcto:
string direccion;
int salario;

Incorrecto:
string nom;
string domic;
int sal;
El nombre de los mtodos debe decir lo que hace. No uses
nombres engaosos. Si el nombre del mtodo es obvio, no hay
necesidad de documentacin que explique qu hace el
mtodo.

Convierte las cadenas de texto a minsculas o maysculas


antes de compararlas. Esto asegurar que la cadena coincida.

Evita usar variables globales. Declara variables locales siempre


que sea necesario y psalas a otros mtodos en vez de
compartir una variable global entre mtodos. Si compartes una
variable global entre mtodos, te ser difcil rastrear qu
mtodo cambia el valor y cuando.

Las rutinas que controlan los eventos (event handlers) no


deben contener el cdigo que ejecuta la accin requerida. En
vez de ello, llama a otro mtodo desde la rutina controladora.

Nunca asumas que tu cdigo se ejecutar desde el disco C:.


No puedes saber si algunos usuarios lo ejecutan desde la red o
desde Z:.

Evitar la procrastinacin - dejar para maana lo que se puede


hacer hoy." Bsicamente, es no afrontar una tarea que
tenemos pendiente, y que vamos retrasando horas, das o
incluso semanas.

Escribe comentarios siempre que sea requerido. Pero un buen


cdigo requerir muchos menos comentarios. Si todos los
nombres de variables y mtodos son entendibles, eso har que
el cdigo sea muy legible y no necesitar muchos comentarios.

6.2.

En la Base de Datos

S ACID (Atomicity, consistency, isolation, and durability) con


los datos
a. Atomicidad: es la propiedad que asegura que la operacin
se ha realizado o no, y por lo tanto ante un fallo del sistema
no puede quedar a medias.
b. Consistencia: Integridad. Es la propiedad que asegura que
slo se empieza aquello que se puede acabar. Por lo tanto
se ejecutan aquellas operaciones que no van a romper las
reglas y directrices de integridad de la base de datos.
c. Aislamiento: es la propiedad que asegura que una
operacin no puede afectar a otras. Esto asegura que la
realizacin de dos transacciones sobre la misma
informacin sea independientes y no generen ningn tipo
de error.
d. Durabilidad: es la propiedad que asegura que una vez
realizada la operacin, sta persistir y no se podr
deshacer aunque falle el sistema.
e.
Considerar los campos de identificacin y rastreo del registro
tales como: un campo para la fecha y hora de insercin, un
campo para la fecha y hora de modificacin, un campo para el
usuario que realiza la insercin, uno para el usuario que realiza
la modificacin.
Es recomendable, NO eliminar fsicamente un registro de
primeras. Pasarlo a un estado de baja lgica y
posteriormente, en un proceso manual y/o automtico (Data
Garbage Collection), peridico, eliminarlo fsicamente y/o
pasarlo a un histrico.

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