• No se han encontrado resultados

Mejores Prácticas - Parte I

N/A
N/A
Protected

Academic year: 2021

Share "Mejores Prácticas - Parte I"

Copied!
17
0
0

Texto completo

(1)

Mejores Prácticas - Parte I

Diplomado en Software Libre

Ernesto Hernández-Novich

<emhn@usb.ve>

Universidad Simón Bolívar

(2)

Almacenamiento de Datos

• Archivos de texto • Simple. • Delimitados (CSV). • Estructurados (YAML). • Bases de datos SQL • PostgreSQL. • SQLite. • MySQL.

• Bases de datos no-SQL • BerkeleyDB. • Mnesia. • CouchDB.

(3)

Bases de datos SQL

PostgreSQL

• Objeto-Relacional con un sistema extenso de tipos. • Cliente-servidor.

• 100 % ACID desde el diseño. • Integridad referencial.

• Lenguajes Procedurales del lado servidor. • PL/pgSQL (parecido a Oracle PL/SQL). • PL/perlSQL.

• PL/R.

• Replicación Maestro-Esclavos. • Point In Time Recovery.

(4)

Bases de datos SQL

SQLite

• Relacional con un sistema estándar de tipos. • 100 % ACID desde el diseño.

• Embebible con cero-configuración.

• Un archivo de texto contiene toda la base de datos. • Solamente ofrece acceso local.

• El archivo de texto es multiplataforma. • Mínima concurrencia.

• Límites de almacenamiento similares a una base de datos completa. • Disponible como librería independiente.

(5)

Object Relational Mapping

OR/M o simplemente ORM

• Técnica para abstraer bases de datos relacionales cuando se usan desde un lenguaje orientado a objetos.

• Objetos persistentes generadores de resultados. • Una clase equivale a una tabla.

• Los objetos generan filas de la tabla a través de iteradores. • Los atributos del objeto corresponden a las columnas. • Generación automática de SQL para CRUD.

• Operaciones complejas sinusar SQL explícito. • Filtros sobre búsquedas.

• Agregadores.

• Procedimientos almacenados y vistas. • Excepciones.

(6)

Caso de Estudio: Perl

DBIx::Class

• Cada tabla es un objeto de claseDBIx::Class::ResultSource. • El métodosearchsobre un ResultSourcees equivalente a un

PREPARE SQLy produce un ResultSet.

• Los métodos iteradoresfirst onext sobre unResultSet son equivalentes alEXECUTE SQL.

• Consultas representadas usando SQL::Abstract. • Claves primarias multicolumna.

• Páginación de resultados, usando cursores en servidor cuando aplique, generación de valores seriales . . . .

(7)

Caso de Estudio: Perl

DBIx::Class

• Para cada tabla en la base de datos

p a c k a g e Mi : : Base : : U s u a r i o ; u s e b a s e qw ( DBIx : : C l a s s ) ;

__PACKAGE__>l o a d _ c o m p o n e n t s ( qw (PK : : Auto C o r e ) ) ; __PACKAGE__>t a b l e ( ’ u s u a r i o ’ ) ;

__PACKAGE__>add_columns ( qw ( i d name p a s s ) ) ; __PACKAGE__>s e t _ p r i m a r y _ k e y ( qw ( i d ) ) ;

• En la clase superior

p a c k a g e Mi : : Base ;

u s e b a s e qw ( DBIx : : C l a s s : : Schema ) ; __PACKAGE__>l o a d _ c l a s s e s ( ) :

(8)

Caso de Estudio: Perl

DBIx::Class

• En el programa principal se establece conexión . . .

u s e Mi : : Base ;

my $ d s n = ’ d b i : Pg : d a t a b a s e=t e s t; h o s t=l o c a l h o s t ’ ; my $db = Mi : : Base>c o n n e c t ( $dsn , $ u s e r , $ p a s s ) ;

• En lugar de SELECT * from TABLA WHERE id = 42. . .

my $row = $db> r e s u l t s e t ( ’ Tabl a ’)> f i n d ( 4 2 ) ;

• Búsquedas complejas conSQL::Abstract

my $ r o w s = $db> r e s u l t s e t ( ’ Tabl a ’)> s e a r c h ( {

name => { l i k e => ’ Ern %’ } , e d a d => { ’ > ’ => 40 } } ) ;

(9)

Caso de Estudio: Perl

DBIx::Classy herramientas relacionadas

• DBIx::Class::Schema::Loader“descubre” las tablas y sus

relaciones generando todas las clases dinámicamente, posiblemente generando código en disco.

• SQL::Translatorconvierte la representación de bajo nivel entre

bases de datos disímiles. Ideal para migraciones y documentación.

• DBIx::Class::QueryProfiler para perfilar la generación de

(10)

Generación de Resultados

• Texto • Simple.

• Delimitado (CSV). • Estructurado

• Serialización (YAML, JSON, XML).

• Despliegue (HTML).

• Presentación final • PDF o PostScript • Herramientas de oficina.

(11)

Generación de Resultados

La salida no se genera con

print

• Use librerías para generar archivos CSV, YAML, XML . . . • Use sistemas de plantillas para generar HTML, PDF . . . . • Separación de preocupaciones

• Simplifica actividades de traducción y cambio de formato sin alterar la lógica de programación.

(12)

Sistema de Plantillas

• Laplantilla es un documento de texto simple, con marcas especiales para indicar las posiciones de sustitución

• Valores simples.

• Valores condicionados (selectores). • Listas de valores (iteradores).

• Desde el punto de vista del diseñador de la salida, simplemente debe prepararse la “maqueta” colocando las marcas especiales en los sitios adecuados.

• Desde el punto de vista del programador • Cargar la plantilla como un objeto.

• Suministrar los valores, condiciones y listas a sustituir dentro de la plantilla.

(13)

Sistemas de Plantillas

• Evite las plantillas con lenguajes embebidos • ¡Violan el patrón MVC!

• El procesamiento suele ser más complejo y costoso que las meras sustituciones.

• Utilice el sistema de plantillas apropiado

• Sistema de plantillas para HTML integrado con un generador de formularios HTML (e.g.HTML::TemplateyCGI::FormBuilderen Perl).

• Sistema de plantillas con extensiones para múltiples formatos de salida (e.g.Template::Toolkiten Perl).

• Habilidades de inclusión ycachingson esenciales para despliegues complejos.

(14)

Caso de Estudio: Perl

HTML::Template

• Las plantillas se escriben en HTML con marcas especiales

<h1><!−− t m p l _ v a r name= t i t u l o −−></h1> B i e n v e n i d o , <!−− t m p l _ v a r name=u s u a r i o −−>

• El programador carga las plantillas y pega los valores

u s e HTML : : T e m p l a t e ;

my $ t = HTML : : Template>new ( f i l e n a m e => ’t e s t. tmpl ’ ) ; $t>param ( t i t u l o => ’ E l r e s u l t a d o ’ ) ;

$t>param ( u s u a r i o => ’ E r n e s t o ’ ) ; p r i n t $t>o u t p u t ;

• La librería hace el resto

<h1>E l r e s u l t a d o </h1> B i e n v e n i d o , E r n e s t o

(15)

Caso de Estudio: Perl

HTML::TemplateyCGI::FormBuilder

• Dentro de la plantilla se indica

• Donde incluir la “magia JavaScript” generada porCGI::FormBuilder. • Donde incluir el formulario generado porCGI::FormBuilder.

<!−− t m p l _ v a r name=j sh e a d −−> . . . <!−− t m p l _ v a r name=forms t a r t −−> . . . <!−− t m p l _ v a r name= f i e l dnombre −−> . . . <!−− t m p l _ v a r name= f i e l dc l a v e −−> <!−− t m p l _ v a r name=forms u b m i t −−> <!−− t m p l _ v a r name=formend −−>

• El programador carga las plantillas a través deCGI::FormBuilder.

my $ t = CGI : : F r o m B u i l d e r>new ( . . . l o s campos y v a l i d a c i o n e s . . .

(16)

Caso de Estudio: Perl

Template::Toolkit

• Sistema de plantillas generales susceptible de ser utilizado para generar cualquiertipo de contenido

• Texto simple, estructurado o HTML de forma natural. • PDF, gráficos a través deplugins.

• Puede utilizarse separado del lenguaje de programación para la generación estática de contenido.

Pluginsapoyados en otros módulos Perl • Gráficos a través deGD.

• YAML y XML.

• Generación de PostScript y PDF vía LATEX

(17)

Referencias

• PostgreSQL http://www.postgresql.org/ • SQLite http://www.sqlite.org/ • OR/M http://en.wikipedia.org/wiki/Object-relational_mapping • DBIx::Class http://search.cpan.org/perldoc?DBIx::Class

• Web Template System

http://en.wikipedia.org/wiki/Web_template_system

• Perl Template Toolkit

Referencias

Documento similar

Este curso se ha diseñado especialmente para guiar a los tutores clínicos de Medicina Intensiva en proporcionar un feedback, estructurado y.. efectivo, a los residentes durante

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

La primera opción como algoritmo de compresión para secuencias biológicas que sugirió la directora del proyecto fue la adaptación de los algoritmos de Lempel-Ziv al alfabeto formado

En esta sección se tratan las características que debe tener un compresor de secuencias biológicas para poder ser usado como herramienta en la construcción de los árboles de

diabetes, chronic respiratory disease and cancer) targeted in the Global Action Plan on NCDs as well as other noncommunicable conditions of particular concern in the European

Por lo tanto, en base a su perfil de eficacia y seguridad, ofatumumab debe considerarse una alternativa de tratamiento para pacientes con EMRR o EMSP con enfermedad activa

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

 Tejidos de origen humano o sus derivados que sean inviables o hayan sido transformados en inviables con una función accesoria..  Células de origen humano o sus derivados que