jueves, 26 de septiembre de 2013

Una útil combinación de CROSS APPLY y FOR XML

De los numerosos problemas que pueden darse a la hora de presentar información de una base de datos a un cliente, quizás uno de los más recurrentes sea que quieran ver determinados datos agrupados -concatenados- en una única columna. Por ejemplo, supongamos que hay un concesionario de coches de lujo que sirve vehículos exclusivos a una serie de clientes. El caso es que el concesionario mantiene una tabla de clientes y una tabla de vehículos asociados a los clientes. Como son clientes con mucha pasta, cada uno puede tener un número indeterminado de coches (ya que pensamos un ejemplo no vamos a andarnos con miseras de supermercados ecológicos donde se compran calabacines y tomatitos cherry...). 

lunes, 12 de agosto de 2013

No borres nada de la base de datos... pero ni se te ocurra usar borrados lógicos.

Me encanta la cara que me ponen los programadores y analistas cuando les suelto esta frase. Se quedan quietos pensando en la frase e intentando comprender como puede no ser una paradoja imposible de cumplir lo que les acabo de soltar en tan pocas palabras.

La primera parte de la frase se entiende fácil y rápidamente. Unos de los requisitos del sistema es no perder la información original que se ha borrado o modificado para poder consultarla en un momento futuro. En el caso de las modificaciones o borrados permitidos, la solución mas sencilla que viene a la cabeza es una solución completamente válida, aceptable y con unos problemas inherentes asumibles: Tablas de auditoría. Con ellas podemos recuperar fácilmente los valores de una entidad en una fecha concreta.

jueves, 4 de julio de 2013

Arquitecturas para Domain-Driven Design - Parte VII

Diseño final

Bueno final final... queda muchísimo por hacer y definir para tener una arquitectura de verdad, pero sí que puedo crear un esqueleto muy básico que puede dar una idea a grandes rasgos.

Una vez definida la colaboración entre las distintas capas del sistema, voy a dejar fragmentos de código de ejemplo para que el lector se haga una idea del resultado final.

En estos ejemplos se utiliza un contenedor de inyección de dependencias para resolver los servicios de aplicación que se van a utilizar, esto nos ayuda a tener un ServiceLocator que además se encarga de montar toda la cascada de dependencias entre clases. Cosa muy buena para tener una arquitectura débilmente acoplada. 

lunes, 24 de junio de 2013

Conceptos básicos de CSS

Hace poco he hecho un breve resumen introductorio de CSS para una persona que está comenzando a aprender lo que es el HTML, el resultado es este artículo, que está dirigido a personas que no tienen una idea clara de lo que es el CSS. 

jueves, 13 de junio de 2013

Un proyecto en NetBeans de principio a fin (VI). Clases de entidad y beans de sesión

En esta parte del tutorial se presentan las tecnologías Enterprise JavaBeans y Java Persistence. Vamos a conocer a dos asistentes que nos facilitarán bastante la vida a la hora de desarrollar para Java EE:
  • El Asistente para Clases de Entidad de Base de Datos, crea una clase de entidad de la API de persistencia de Java completa para cada tabla seleccionada de la base de datos; con anotaciones de consultas con nombre, campos representando columnas y relaciones representado claves externas.
  • El Asistente de Beans de Sesión para Clases de Entidad crea una fachada EJB de sesión para cada clase de entidad, con métodos básicos de acceso. 

viernes, 31 de mayo de 2013

La fiesta de los bocazas. (Blowhard Jamboree)

Buscando en Internet los antipatrones para refrescarlos en mi mente y redactar el post anterior he caído en un antipatrón (título de este post) que aunque no es muy común en los ambientes que me muevo actualmente es muy fácil caer en ellos y además refleja la paradoja de que yo mismo soy un bocazas.

Este antipatrón consiste en tomas decisiones y asumir cosas simplemente con la información salida de lo que ha publicado un señor cualquiera en un medio de comunicación. Por ejemplo, este blog.

En mi caso en concreto me ha pasado con "el lado oscuro" de los patrones de diseño.

Los antipatrones más comunes a los que me enfrento de forma diaria.

Como descanso a DDD y como forma de desahogo voy a poner una lista de los antipatrones de diseño que día tras día veo que se repiten una y otra vez sin que nadie que cuente con la capacidad decisoria para poder atajar el problema mueva un dedo al respecto.

lunes, 20 de mayo de 2013

Arquitecturas para Domain-Driven Design - Parte VI

Capa de Persistencia.
Esta capa sirve como puente entre la lógica de negocio (servicios y entidades) y el proveedor de datos. Históricamente es una capa que se usa para encapsular las especificaciones del proveedor de datos. Aunque esto sigue siendo, en cierta manera, así, gracias a nuevas tecnologías como los ORM (los cuales ya realizan una abstracción del proveedor de datos) su propósito puede llegar a ser el de abstraerse de los detalles de implementación del ORM y proporcionar mecanismos para la satisfacción de consultas utilizando el ORM escogido.

viernes, 26 de abril de 2013

Un uso para la función RAND() en SQL

Gran parte de mi trabajo transcurre con los ojos pegados al Server Management Studio de SQL. En ocasiones tengo que buscar soluciones a ciertos problemas, y a veces encuentro maneras (unas veces más elegantes que otras) de salvar el escollo. El caso es que cuando un año después me surge otro problema semejante me mata tener que buscar un fragmento de código entre cientos de procedimientos almacenados con más o menos líneas de Transact-SQL... Y como no todo el monte es NetBean o Arquitecturas DDD, voy a poner aquí una "breve" reseña sobre un uso de la función RAND() que he necesitado en un par de ocasiones y que, a buen seguro, volveré a necesitar.

lunes, 8 de abril de 2013

Un proyecto en NetBeans de principio a fin (V). Conexión con la base de datos

No es por desanimar, pero si la entrada anterior os pareció larga y cansina agarraros con ésta. Si estáis siguiendo este tutorial con tanto entusiasmo que no podéis parar de leer y enredar con NetBeans hasta llegar al final de cada post, más vale que vayáis a mear y a picar algo a la cocina... En esta ocasión vamos a centrarnos en la comunicación entre la base de datos y la aplicación. Añadiremos unos cuantos datos a la base de datos y examinaremos algunas de las características que proporciona el editor de SQL del IDE. Configuraremos el origen de datos y un pool de conexiones en el servidor GlassFish, y crearemos una página JSP para probar la conexión mediante alguna consulta simple a la base de datos.