Archivos básicos de un proyecto:
- Un archivo master general en el sitio. Tendrá llamados a los archivos js y css. También puede contener funciones javascript específicas (dentro de la etiqueta <script language="JavaScript">) y clases para modificar el diseño del sitio (dentro de las etiquetas <style>). Alguien deberá estar encargado de este archivo y cualquier cambio que se requiera deberá modificarlo.
- Un archivo JS y un archivo CSS
- Un archivo en App_Code llamado Routines.vb. Alguien estará encargado de este archivo y todas las rutinas que se quieran incluir deben ser enviadas al encargado con una explicación del funcionamiento de las rutinas. Posteriormente el encargado indicará en qué Namespace y en qué Clase estará contenida la rutina. El encargado también debe realizar un compendio de estas rutinas colocando la explicación de cada una de ellas y los parámetros que reciben (colocando si se reciben por valor o por referencia).
- Un archivo Utilerias.dll en la carpeta Bin del proyecto.
Archivo master:
- Debe contener al menos dos ContentPlaceHolder: 1) Para mensajes y 2) Para contenido general.
- Debe tener un label específico para el título que se utilizará en cada página o sección y el contenido de este label debe cambiar dinámicamente dependiendo de la página donde se encuentre el usuario.
- Debe validar la sesión de todas y cada una de las páginas que contendrán este archivo master. Debe existir un arreglo tipo string en el que se especifique cuáles páginas NO serán validadas por sesión (página de inicio de sesión, página para recuperar contraseña, etc.)
- Debe contener el menú general del sistema y los links de este menú también pueden requerir validación de sesión o cualquier otra validación necesaria para ser mostrados.
- Puede también contener validaciones generales que a veces es conveniente realizar en todas las páginas, pero hay que tener en cuenta que conexiones a la base de datos pueden afectar el performance del sitio. Así mismo se pueden manipular todos los objetos de diseño en la master, de modo que se pueden ocultar ciertos elementos como Header, ContentPlaceHolder, Footer, etc. que no se requieran en cierto momento.
Archivo Routines.vb
- Contiene funciones muy específicas de la aplicación. Para la administración de usuario habría funciones como: GuardarUsuario(ByVal StrUsuario As String, ByVal StrPassword As String, ByVal StrNombre As String, ByVal BlnActivo As Boolean), GuardarUsuario(ByVal StrNombre As String, ByVal BlnActivo As Boolean, ByVal IdUsuario As Integer), ActivarUsuario(ByVal BlnActivo As Boolean, ByVal IdUsuario As Integer) y BorrarUsuario(IdUsuario). De modo que GuardarUsuario nos servirá para crear nuevos usuarios, o bien, actualizar la información de los usuarios; ActivarUsuario para activar usuarios y BorrarUsuarios para borrar usuarios.
- Los nombres de las funciones deben ser muy descriptivos.
- Las funciones deben ser acomodadas o clasificadas mediante Namespaces y Clases. En general Routines.vb tendrá un solo namespace que será el nombre del proyecto como tal. Las clases deben ser específicas para englobar funciones relacionadas entre sí, por ejemplo, la clase Ventas podría contener funciones como GuardarVenta, LimpiarCarrito, CuentaElementosCarrito, etc.
- Es obvio que este archivo no contiene controles web de modo que todas las funciones deben arrojar las excepciones mediante el Throw Exception, de este modo, cualquier página que las utilice podrá obtener el error que se haya generado y procesar el error (mostrarlo en pantalla, enviar un correo, etc.)
Utilerias.dll
Esta librería ya contiene funciones muy específicas que podrán ser utilizadas en cualquier parte de la aplicación. Existen validadores, modificadores de strings, conexiones a la base de datos, entre muchas otras funciones.
Consideraciones generales
- Utilización de Try donde sea necesario.
- Nombres mnemónicos para las variables y funciones. Los nombres de los elementos deben ser entendibles y descriptivos para cualquier persona. El nombre "x" o "VarTKm20" no son descriptivos.
- Toda página debe contener un label llamado "lblMensajes" en el cual se mostrará cualquier mensaje de error.
- Toda página debe tener su atributo AutoEventWireup en True y la función Page_Load no debe recibir parámetros ni manejar eventos (Handles...). Esto es importante para quien esta acostumbrado a manejar todo desde diseño en Visual y que al dar doble clic en la página automáticamente se crea la función Page_Load.
- Los ID's de los controles deben indicar el tipo de control mediante un prefijo establecido. Lo mismo para los tipos de variables.
- Todos los acentos y caracteres especiales incluidos en los mensajes, deben ser manejados mediante código HTML, por ejemplo: "La conexi&oacute;n experimenta problemas. Por favor intente de nuevo m&as tarde."
- Los títulos y mensajes en general comienzan con mayúscula, siendo que las palabras restantes deben comenzar con minúscula. Un título no aceptable sería "Sección de Datos Personales", el cual deberá ser "Sección de datos personales".
- Las variables de sesión deben ser utilizadas únicamente para manejar la sesión de los usuarios. No deben ser utilizados para guardar información que será manipulada entre distintos controles. Por ejemplo una variable de sesión no se utiliza para guardar algo que nos indique si un botón fue presionado o no, etc.
- Hay dos formas de obtener información de la base de datos: la síncrona (DataReader) y la asíncrona (DataSet). Un DataReader debe ser utilizado cuando no se están manipulando más de 100 registros. Un DataSet debe ser utilizado cuando se manipula gran cantidad de información, incluso tablas completas.
- En todo formulario el botón de Aceptar estará a la izquierda del botón Cancelar.
- Definir claramente las variables de conexión a la base de datos en el archivo web.config, así como una página para CustomErrors.
- Definir documento de variables de sesión existentes y el tiempo de sesión. Las variables de sesión no indican el tipo de dato ya que todas son de tipo string. Por ejemplo, los nombres de las variables de sesión no serán "strNombre" sino "Nombre", ni strFechaNac sino FechaNac.
- Todo User Control (ASCX) creado e incorporado en un ASPX debe tener el prefijo UserControl de modo que se debe encontrar en el ASPX algo como <UserControl:MiControl id="IdMiControl" runat="server" />
Prefijos para controles más comunes
- lbl = label
- txt = textbox
- btn = button
- ddl = dropdownlist
- lbx = listbox
- cbx = checkbox
- rbtn = radiobutton
- cbl = checkboxlist
- rbl = radiobuttonlist
- bll = bulletedlist
- dg = datagrid
- gv = gridview
- mv = multiview
- dv = detailsview
- tv = treeview
Prefijos para tipos de variables más comunes
- str = string
- int = integer
- lng = long
- bln = boolean
- dt = datetime