Buscar

Cargando...

miércoles, mayo 21, 2008

Patrón de diseño estrategia


"El patrón Strategy permite mantener un conjunto de algoritmos de los que el objeto cliente puede elegir aquel que le conviene e intercambiarlo según sus necesidades.

Los distintos algoritmos se encapsulan y el cliente trabaja contra un objeto contexto o Context. Como hemos dicho, el cliente puede elegir el algoritmo que prefiera de entre los disponibles o puede ser el mismo objeto Context el que elija el más apropiado para cada situación.

Cualquier programa que ofrezca un servicio o función determinada, que pueda ser realizada de varias maneras, es candidato a utilizar el patrón Strategy. Puede haber cualquier número de estrategias y cualquiera de ellas podrá ser intercambiada por otra en cualquier momento, incluso en tiempo de ejecución."

En definitiva esta explicación está medio rebuscada así que les paso un diagrama de clases que hice para mi tesis inspirado en el libro Head FirstDesign Patterns.




Saludos

domingo, mayo 18, 2008

Paginación con SQL Server 2005 (v2.0)

Sin mucho preámbulo les dejo un stored procedure generado por las plantillas NetTiers que permite paginar una tabla de las siguientes características:

| Tabla |
-------------
| Id
| Clave
| Descripcion
| Activo


Create PROCEDURE [dbo].[Catalogo_Simple_Paginar]
(
@WhereClause varchar (2000) ,
@OrderBy varchar (2000) ,
@PageIndex int ,
@PageSize int
)
AS
BEGIN
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int

-- Set the page bounds
SET @PageLowerBound = @PageSize * @PageIndex
SET @PageUpperBound = @PageLowerBound + @PageSize

IF (@OrderBy is null or LEN(@OrderBy) < 1)
BEGIN
-- default order by to first column
SET @OrderBy = '[Id]'
END

-- SQL Server 2005 Paging
declare @SQL as nvarchar(4000)
SET @SQL = 'WITH PageIndex AS ('
SET @SQL = @SQL + ' SELECT'
IF @PageSize > 0
BEGIN
SET @SQL = @SQL + ' TOP ' + convert(nvarchar, @PageUpperBound)
END
SET @SQL = @SQL + ' ROW_NUMBER() OVER (ORDER BY ' + @OrderBy + ') as RowIndex'
SET @SQL = @SQL + ', [Id]'
SET @SQL = @SQL + ', [Clave]'
SET @SQL = @SQL + ', [Descripcion]'
SET @SQL = @SQL + ', [Activo]'
SET @SQL = @SQL + ' FROM dbo.[Catalogo_Simple]'
IF LEN(@WhereClause) > 0
BEGIN
SET @SQL = @SQL + ' WHERE ' + @WhereClause
END
SET @SQL = @SQL + ' ) SELECT'
SET @SQL = @SQL + ' [Id],'
SET @SQL = @SQL + ' [Clave],'
SET @SQL = @SQL + ' [Descripcion],'
SET @SQL = @SQL + ' [Activo]'
SET @SQL = @SQL + ' FROM PageIndex'
SET @SQL = @SQL + ' WHERE RowIndex > ' + convert(nvarchar, @PageLowerBound)
IF @PageSize > 0
BEGIN
SET @SQL = @SQL + ' AND RowIndex <= ' + convert(nvarchar, @PageUpperBound)
END
SET @SQL = @SQL + ' ORDER BY ' + @OrderBy
exec sp_executesql @SQL

-- get row count
SET @SQL = 'SELECT COUNT(*) as TotalRowCount'
SET @SQL = @SQL + ' FROM dbo.[Catalogo_Simple]'
IF LEN(@WhereClause) > 0
BEGIN
SET @SQL = @SQL + ' WHERE ' + @WhereClause
END
exec sp_executesql @SQL

END