01.31.08

Etiquetas HTML colgroup y col

Posted in HTML, Web at 7:53 pm by Miguel

Dos etiquetas HTML que pasan bastante desapercibidas son <colgroup> y <col>.

La verdad es que es una pena porque son bastante útiles para trabajar con tablas.

Ilustro su uso con un ejemplo.

<table>
<colgroup span=”4″>
<col style=”width:100px”/>
<col style= “color:red”/>
<col style= “width:30px;”/>
<col style=”background-color:blue; font-weight:bold”/>
</colgroup>
<tr>
    <td>Hola</td>
    <td>qué</td>
    <td>tal</td>
    <td>estás</td>
</tr>
<tr>
    <td>Pues</td>
    <td>bastante</td>
    <td>bien</td>
    <td>sabes</td>
</tr>
</table>

Mira tú por donde estamos definiendo las propiedades de las columnas de la tabla sin necesidad de marcarlas por cada una de sus filas.

Rating 3.00 out of 5
[?]

01.30.08

Buenas Prácticas: Uso de StringBuilder en lugar de concatenación

Posted in .NET, Buenas Prácticas, Programación at 8:42 pm by Miguel

Hola a todos. 

Para los que no lo conozcáis, StringBuilder es una de las clases provistas por los framework de .NET y de Java. La finalidad de dicha clase es la de proveernos de una serie de herramientas que nos faciliten la concatenación de strings, ya no sólo en la mantenibilidad del código si no que también en cuanto a la eficiencia en rendimiento.

El uso es muy simple (código C#):

StringBuilder builder = new StringBuilder();

builder.Append(”hola”);
builder.Append(”qué”);
builder.Append(”tal”);
builder.Append(”estás”);

En lugar de:

String builder = String.Empty;

builder += “hola”;
builder += “qué”;
builder += “tal”;
builder += “estás”;

Además, disponemos de una serie de métodos más que nos facilitan un poco la vida, pero insisto que el valor más importante es el de la mejora de rendimiento.

Saludos.

Miguel.

Rating 3.00 out of 5
[?]

01.19.08

¿Herencia en BBDD?

Posted in Bases de Datos, Programación at 11:35 am by Miguel

El otro día en un curso de Business Intelligence surgió un caso como este.

Imaginaos que tenemos una base de datos donde almacenamos información al respecto de proveedores, clientes, trabajadores, representantes y convocatorias.

En un momento dado se quieren enviar invitaciones a los diferentes proveedores, clientes… y se quiere tener constancia a nivel de base de datos de quiénes han sido invitados a cada convocatoria.

No sé por qué me vino a la cabeza inmediatamente una solución orientada a objetos, así que intenté plasmar la idea a nivel de modelo relacional, surgiendo algo similar a esto:

Herencia en BBDD

Como véis, la herencia se ve a simple vista. La clase invitado es una clase abstracta de la cual heredan tanto el representante, como el proveedor, cliente y trabajador. Para resolver la herencia a nivel de modelo relacional las cuatro tablas inferiores guardan foreign key contra invitado. Además podréis ver que en la tabla LINEA_CONVOCATORIA se tiene referencia a la tabla INVITADO, con esto hacemos algo similar a pasar a un método por parámetro la clase abstracta, para que luego en tiempo de compilación, y según el objeto que se pase (y que obligatoriamente tendrá que heredar de invitado), se actue en consecuencia.

¿Problemas de esto? Mantener a base de datos puede ser como mínimo extraño. El campo CO_INVITADO de todas las tablas debería admitir NULL (por cierto hay una errata en el diagrama al respecto ya que como podéis ver es NOT NULL, y por eso la cardinalidad hacia INVITADO aparece siempre como 1, cuando debería ser 0..1). Además, fijaros en el detalle de que la tabla INVITADO tiene un campo llamado TABLA. Allí almacenaríamos el nombre de la tabla donde realmente está el invitado… jejeje, aquí es donde se pierde la historia y me deja de gustar el tema, pero es la única manera que se me ocurrió resolver de dónde sacar de dónde viene el invitado cuando empezamos a buscar a partir de la tabla LINEA_CONVOCATORIA, es decir, lo que sería en tiempo de compilación que se te pasara un objeto INVITADO y resolver dependiendo de si el objeto es un proveedor, cliente…

Esto solución resulta como mínimo curiosa. ¿Se os ocurre cómo mejorarla? ¿Proponéis alternativas?

En el curso se dijo de resolver esto a nivel de Triggers, y dejarse de historias. A mi sinceramente, no me gustan los Triggers, pero eso no quiere decir que no sean la mejor forma de resolver este tipo de problemas.

Saludos!

Miguel.

Rating 3.00 out of 5
[?]

01.17.08

La Frase del Día respecto a la Optimización

Posted in Frase del Día at 4:25 pm by Miguel

No optimices lo que necesite ser optimizado. El coste de tu tiempo va a ser mucho peor.

Rating 3.00 out of 5
[?]

01.09.08

ASP.NET MVC Framework. Aplicando un MVC real con Visual Studio 2008.

Posted in .NET, Herramientas, Java, Patrones, Programación, Ruby On Rails, Web at 11:49 pm by Miguel

En el anterior post vimos un artículo donde se mostraba cómo trabajar con MVC + ASP.NET en Visual Studio 2005.

Para los que habéis aplicado MVC en J2EE o en Ruby on Rails os parecerá una aplicación pobre del MVC, pero bueno era lo que teníamos en su momento para ASP.NET, y los que queríamos acercarnos a ese modelo no nos quedaba más remedio que aproximarnos lo más posible a él con las herramientas con las que contábamos.

Ahora, con Visual Studio 2008 la cosa ha cambiado, y tenemos un tipo de proyecto que explota explícitamente el patrón MVC en ASP.NET.

He encontrado un artículo estupendo que habla de ello del cual os dejo el link más abajo, y que además da la puntilla dando unos toques de LINQ.

Por cierto, atención con el modelo de convenciones que utiliza el nuevo MVC para ASP.NET, para los que conozcáis Ruby on Rails os va a resultar ciertamente familiar. Es curioso como las buenas ideas se extienden como la pólvora por las diferentes herramientas de desarrollo.

Os dejo el link:

http://thinkingindotnet.wordpress.com/2007/11/18/aspnet-mvc-framework-primera-parte/

Un saludo.

Miguel.

Rating 4.00 out of 5
[?]

01.03.08

MVC y Aplicaciones N-Capas con ASP.NET y Visual Studio 2005

Posted in .NET, Arquitectura, Patrones, Programación, Web at 8:15 pm by Miguel

Para los defensores de que el patrón MVC es algo que viene de Java y que ASP.NET no está preparado para llevarlo a cabo, por favor, consulten el siguiente enlace en el que se muestra un ejemplo muy muy sencillo de implementación del patrón

http://msdn2.microsoft.com/en-us/library/ms998540.aspx

Para los interesados en ver un ejemplo magistral de implementación de una aplicación ASP.NET en N-CAPAS, os recomiendo consultar el siguiente enlace

http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=416

Un saludo a todos y feliz año.

Miguel.

Rating 3.00 out of 5
[?]