Вы находитесь на странице: 1из 3

12.6. Desarrolle un lenguaje de esqueleto de patrón para un deporte con el que esté familiarizado.

Comience por abordar el contexto, el sistema de fuerzas y los problemas amplios que deban
resolver un entrenador y su equipo. Sólo necesita especificar los nombres de los patrones y hacer
la descripción frase por frase de cada uno.

12.7. Encuentre cinco repositorios de patrones y presente la descripción abreviada de los tipos de
patrones que contenga cada uno.

Data Mapper

Imaginemos que tenemos un sistema de almacenamiento de datos complejo, algo así como una
base de datos. La gestión mediante nuestro lenguaje de programación preferido de esta
información, puede resultar compleja y para nada relacionada con la forma de gestionar la
información dentro de nuestra aplicación.

Por citar un ejemplo más concreto, no resulta sencillo ni natural, recoger un dato de la una base
de datos SQL Server, usando c#. Básicamente porque el lenguaje c# está pensado para programar
orientado a objetos y el motor de SQL Server está pensado para modelos de datos relacionales
usando SQL como lenguaje de comunicación.

Repository

Una vez hemos montado nuestra capa de “Data Mapper”, al ir construyendo el resto de la
aplicación, nos vamos dando cuenta de que necesitamos crear un método que acepte condiciones
y filtros para realizar un gran número de consultas diferentes. Por ejemplo, necesitamos listados
de usuarios paginados, listados de usuarios para mostrar en un control de tipo “ComboBox”, e
incluso los usuarios que su nombre sea “Pepe”. Entonces, como resultado de este requerimiento
tan genérico, tendríamos una función parecida a esta:

public interface IDataMapper<TObject> where TObject : class

/* ... */

IEnumerable<TObject> GetFiltered(string conditions, string order, int pageSize, int pageIndex);

Así tendríamos la libertad de llamar a nuestro objeto “UserDataMapper” de formas diferentes:

var userDataMapper = new UserDataMapper(conStr);

// seleccionar los usuarios de nombre 'Pepe', ordenados por el apellido, paginando de 10 en 10, y
quiero la primera página

userDataMapper.GetFiltered("Name = 'Pepe'", "LastName", 10, 1);


// seleccionar los usuarios de apellido 'Perez',sin orden, con el tamaño de página más grande que
pueda, dame la página

userDataMapper.GetFiltered("LastName = 'Perez' AND Email LIKE '%@mail.com'", "",


int.MaxValue, 1);

Pero el lenguaje de nuestro almacén de información (SQL), no debería ser manejado desde la capa
que gestiona el negocio de la aplicación.

Specification

El patrón “Specification” viene a resolver un problema de crear diferentes reglas de negocio que
puedan ser combinadas. Esto quiere decir que nos ayudará a crear diferentes normas que
resolverán un problema concreto de formas diferentes. Pero para orientarnos más rápido, vamos
a ver un ejemplo de implementación:

public interface ISpecification

bool IsSatisfiedBy(object candidate);

public interface ICompositeSpecification : ISpecification

ISpecification And(ISpecification other);

ISpecification Or(ISpecification other);

ISpecification Not();

Implementando de la forma correcta este patrón, el resultado que tendríamos es que si


tuviéramos diferentes especificaciones, podríamos combinarlas para conseguir algo más concreto.

12.8. Cuando Christopher Alexander afirma que “un buen diseño no se logra con sólo reunir las
partes ejecutantes”, ¿qué cree usted que quiere decir?

El buen diseño comienza con la consideración del contexto: el panorama. Cuando se evalúa el
contexto, se extrae una jerarquía de problemas que deben resolverse. Algunos de éstos serán
de naturaleza global, mientras que otros se abocarán a características y funciones específicas
del software. Todo será afectado por las fuerzas del sistema que influirán en la naturaleza
de la solución propuesta.
12.9. Con el uso de las tareas de diseño basado en patrones mencionadas en la sección 12.2.3,
desarrolle un diseño de esqueleto para el “sistema de diseño de interiores” descrito en la sección
11.3.2.

12.10. Elabore una tabla de organización de patrones para aquellos que haya utilizado en el
problema 12.9.