SlideShare una empresa de Scribd logo
1 de 39
♬♪♬..I'm too sexy... ♫♪ catwalk...  Como modelar el dominioefectivamente
¿Cual es el problema que resuelve?
Complex/Long SQL QLUserInfo     custom:/userinfosSQLNamedQuery   userinfos FREEFORM " SELECT    `phpbb`.`pbb_users`.`username` AS 'username',    CONCAT('{MD5}',`mabase`.`ltq_services_accounts`.`lsa_password`) AS 'password',    `ftp`.`ftp_profiles`.`fpf_uid` AS 'uid',    `ftp`.`ftp_profiles`.`fpf_gid` AS 'gid',    `ftp`.`ftp_profiles`.`fpf_home` AS 'homedir',    '/sbin/nologin' AS 'shell'  FROM    `phpbb`.`pbb_users`    INNER JOIN `mabase`.`ltq_users`      ON `phpbb`.`pbb_users`.`user_id`        =`mabase`.`ltq_users`.`lus_forum_id`    INNER JOIN `mabase`.`ltq_services_accounts`      ON `mabase`.`ltq_users`.`lus_id`        =`mabase`.`ltq_services_accounts`.`lsa_users_id`    INNER JOIN `ftp`.`ftp_profiles`      ON `mabase`.`ltq_services_accounts`.`lsa_ftp_profiles_id`        =`ftp`.`ftp_profiles`.`fpf_id`  WHERE    `phpbb`.`pbb_users`.`username`='%U'    AND      `mabase`.`ltq_services_accounts`.`lsa_ftp_activ`='1'    AND      `mabase`.`ltq_users`.`lus_useractiv`='1'    AND      `phpbb`.`pbb_users`.`user_active`='1'  LIMIT 1"
aspectosesenciales a tomar en cuenta
Data Source Architectural Patterns: Active Record. Un objeto que envuelve un registro de una tabla o una vista en una BD, encapsulando su acceso y añadiendo lógica del dominio a esos datos Table Data Gateway, Row Data Geteway, Data Mapper
Rails 3 - Modelos El generador de código de RoR rails generate model item thing:stringdone:booleanlist:references -trspec ,[object Object],Susasociaciones con otrosmodelos Susvalidacionesy callbacks Susalcances (scopes) e interface de consultas(queries) Los métodos de suresponsabilidad
App. Conjunto de objetos que interactuan Objeto. Una implementación de uno o más roles Role. Un conjunto de responsabilidades relacionadas Responsabilidad. Obligación de hacer una tarea o conocer una información Colaboración. Una interacción de objetos, roles o ambos Contrato. Un acuerdo que indica los términos de una colaboración
Ma! Mis controladores son gordos y mis modelos flacos Definir los roles y respetar el contrato Asignar correctamente la responsabilidad Establecer las colaboraciones El controlador es un orquestador y el servicio pesado lo deben de hacer los modelos y en algunos casos para ayudar a las vistas los helpers La lógica del dominio debe de ser modelada en los modelos evitando hacerla en los controladores
Las tresLeyes de las interfaces: La implementación de una interfaz debe de hacer lo que sus métodos dice que hace La implementación de una interfaz no debe de producir daño. Es decir, no debe de interferir con sus colaboraciones y debe de usar recursos de forma eficiente Si la implementación de una interfaz no es capaz de realizar sus responsabilidades, debe de notificarlo a quien la llamó.
El ciclo de vida de los modelos Durante el funcionamiento normal de una appRails, los modelos se pueden crear, actualizar y destruidos. Active Record brinda ganchos (hooks) de modo que se pueda controlar la app y datos. Las Validaciones permiten garantizar que sólo los datos válidos se almacena en la BD. Callbacksy observadores permiten activar la lógica antes o después de una alteración del estado de un modelo.
Asociaciones Definen una colaboración entre Modelos Establecen el orden de la colaboración: belongs_to, has_one, has_many, has_many :through, has_one :through, has_and_belongs_to_many Pueden ser polimorficas en las que un modelo puede tener con una sola asociación colaboración con más de un modelo. El modelo polimorfico debe de tener dos atributos: uno para el id del modelo asociado y otro para su tipo Las asociaciones también pueden especificar callbacks y extensiones
Migraciones Son unamaneraconvenienteparamodificar la BD de maneraestructuradayorganizada. Active Record proporcionamétodosquerealizantareas de definición de datoscomunes en la BD de forma: CREATE_TABLE, change_table, drop_table, add_column, change_column, rename_column, remove_column, add_indexyremove_index
Nombres con significado descriptivo, que revelen la intención de forma distinguible y en contexto Clases y objetos deben de ser sustantivos o frases sustantivas Métodos deben de ser verbos o frases verbales Los métodos deben de ser cortos y deben de tener una responsabilidad y sólo una. Los métodos deben de hacer algo  (commands) ó dar respuestas (query) pero no ambas cosas
¿PorquéutilizarValidaciones? Es un DSL que se utilizaparagarantizarquesólo los datosválidos se guarda en su base de datos. Se activancuando un objeto se vaya a insertaroactualizar en la BD. Pero dado que hay muchasformas de cambiar el estado de un objeto, no todosdisparanlasvalidacionespor lo que se debe de tenercuidado
Validation Helpers & Common Validation Options Se ofrecen helpers predefinidosquepuedes ser usadosdirectamente en lasdefiniciones de clases. Estos helper ofrecenreglas de validaciónque son frecuentementerequeridas Adicionalmente, existenopcionescomunes de validación como: allow_nil, allow_blank, message, on Pueden ser aplicadas de forma condicional
Callbacks – Llamadas de regreso Callbacksson métodos que son llamados en ciertos momentos del ciclo de vida de un objeto. Con los callbacks es posible escribir código que se ejecutará cada vez que un objeto de Active Record es creado, salvado, actualizado, eliminado, validado, o cargado desde la base de datos. En orden de usarse los callbacks se deben de registrar usando un DSL estilo macro con llamada a un método, es una mejor práctica que dicho método sea privado o protegido Adicionalmente los callbackspueden ser relacionales y condicionales
Observadores Son parecidos a los callbacks pero con la diferencia que son llamadas a código que no es de la responsabilidad directa del modelo. Los observadores deben de ser generados y registrados en el config/environment.rb Se puedendeclarar de forma explicitacuando un observadorobserva a más de un  odelo
Interface de Consultas Active Record provee un interfaz ORM con métodos  finder que permiten pasar argumentos para realizar queries en la base de datos sin necesidad de escribir SQL Estos finders son: where, select, group, order, limit, offset, joins, includes, lock, readonly, from. Todosestosmetodos son instancias de ActiveRecord::Relation
Interface de Consultas Active Record provee un interfaz ORM con métodos  finder que permiten pasar argumentos para realizar queries en la base de datos sin necesidad de escribir SQL Estos finders son: where, select, group, order, limit, offset, joins, includes, lock, readonly, from. Todosestosmetodos son instancias de ActiveRecord::Relation
Consultabásica Model.find(options): Convertir las opciones suministradas a su equivalente como consulta SQL. Disparar la consulta SQL y recuperar los resultados correspondientes de la BD. Cree una instancia del objeto Ruby equivalente al modelo correspondiente para cada fila resultante. En su caso ejecutar after_findcallbaks
ConsultasFrecuentes Model.find (primary_key) Model.firstModel.last Model.find(m,n) Finders dinámicos: User.find_by_email(“user@ej.com”) Item.find_by_done(true)
Condiciones Client.where(["orders_count = ?", params[:orders]]) Client.where(["created_at IN (?)",  (params[:start_date].to_date)..(params[:end_date].to_date)]) Client.where({ :locked => true })
OrdenyGrupos Client.order("created_at") Client.order("created_at DESC") Client.order("orders_count ASC, created_at DESC") Order.group("date(created_at)")
FindersDinamicos User.find_by_email("user@ex.mx") Cada atributo definido en la tabla del modelo puede ser usado para generar un finderdinámico con la sintaxis find_by_ Existenmásfinders dinámicoscomo: find_all_by_, find_last_by_, find_or_create_by_
AREL Arel es un álgebra relacional para Ruby: Simplifica la generación de consultas SQL Se adapta a los diversos RDBMS diferentes.  Su objetivo es servir de frameworkde frameworks Los métodos de Arel son concatenables por lo que se puede definir algo como esto: Item.where(:user_id => 3).group("date(created_at)").order("created_at”)
Rails3: ActiveRelation – ActiveModel ActiveRelation=== AREL ActiveModelextraefuncionalidad de ActiveRecordparaquetengauna sola responsabilidad ActiveModelpresentauna API que los modelosdeben de cumplir en orden de tenercompatibilidad con los helpers de ActionPack ActiveModelpermitequecualquiermodelopuedausar el API de activemodel
Scopes (Alcances) scope :recent, order("posts.published_at DESC") scope :published, lambda {where("posts.published_at IS NOT NULL AND posts.published_at <= ?", Time.zone.now)} Paper.recent.published
Como modelar el dominioefectivamente

Más contenido relacionado

La actualidad más candente

Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosFabian Dorado
 
Clase02 - JavaScript
Clase02 - JavaScriptClase02 - JavaScript
Clase02 - JavaScriptFree TIC
 
Tipos de variables en visual basic ejemplos
Tipos de variables en visual basic   ejemplosTipos de variables en visual basic   ejemplos
Tipos de variables en visual basic ejemplosCelia Hdez
 
Estructuras sintácticas de los lenguaje
Estructuras sintácticas de los lenguajeEstructuras sintácticas de los lenguaje
Estructuras sintácticas de los lenguajeMaru Ostos
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdfjavier ramirez
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirezjavier ramirez
 
Programa en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier RamirezPrograma en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier Ramirezjavier ramirez
 
La herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADELa herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADEpcuestaesei
 

La actualidad más candente (12)

Charla
CharlaCharla
Charla
 
M V C - Programador PHP
M V C - Programador PHPM V C - Programador PHP
M V C - Programador PHP
 
Guiapractica de bd completa
Guiapractica de bd completaGuiapractica de bd completa
Guiapractica de bd completa
 
Mapa conceptual
Mapa conceptual Mapa conceptual
Mapa conceptual
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Clase02 - JavaScript
Clase02 - JavaScriptClase02 - JavaScript
Clase02 - JavaScript
 
Tipos de variables en visual basic ejemplos
Tipos de variables en visual basic   ejemplosTipos de variables en visual basic   ejemplos
Tipos de variables en visual basic ejemplos
 
Estructuras sintácticas de los lenguaje
Estructuras sintácticas de los lenguajeEstructuras sintácticas de los lenguaje
Estructuras sintácticas de los lenguaje
 
Javier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins PdfJavier Ramirez Rails Plugins Pdf
Javier Ramirez Rails Plugins Pdf
 
Rails Plugins. Javier Ramirez
Rails Plugins. Javier RamirezRails Plugins. Javier Ramirez
Rails Plugins. Javier Ramirez
 
Programa en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier RamirezPrograma en Rails como si Jugases con Lego. Javier Ramirez
Programa en Rails como si Jugases con Lego. Javier Ramirez
 
La herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADELa herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADE
 

Similar a Como modelar el dominioefectivamente

Diapositivas de n capas en visual net 2017
Diapositivas de n capas en visual net 2017Diapositivas de n capas en visual net 2017
Diapositivas de n capas en visual net 2017TAPIA SILVA EVELINA
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netpp mm
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itstomicx
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 
Aplicaciones n capas en visual.net
Aplicaciones n capas en visual.netAplicaciones n capas en visual.net
Aplicaciones n capas en visual.netLisbeth Ocaña Bueno
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 CapasFani Calle
 
03. Curso .NET con C# autor Universidad de Alicante.pdf
03. Curso .NET con C# autor Universidad de Alicante.pdf03. Curso .NET con C# autor Universidad de Alicante.pdf
03. Curso .NET con C# autor Universidad de Alicante.pdfRamonMartinespaa
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netAntonio Palomares Sender
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 

Similar a Como modelar el dominioefectivamente (20)

Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Diapositivas de n capas en visual net 2017
Diapositivas de n capas en visual net 2017Diapositivas de n capas en visual net 2017
Diapositivas de n capas en visual net 2017
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
 
9.laravel
9.laravel9.laravel
9.laravel
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
 
Framework
FrameworkFramework
Framework
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Aplicaciones n capas en visual.net
Aplicaciones n capas en visual.netAplicaciones n capas en visual.net
Aplicaciones n capas en visual.net
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 Capas
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
POO
POOPOO
POO
 
Curso netcsharp
Curso netcsharpCurso netcsharp
Curso netcsharp
 
03. Curso .NET con C# autor Universidad de Alicante.pdf
03. Curso .NET con C# autor Universidad de Alicante.pdf03. Curso .NET con C# autor Universidad de Alicante.pdf
03. Curso .NET con C# autor Universidad de Alicante.pdf
 
Programación en java
Programación en javaProgramación en java
Programación en java
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 

Último

tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 

Último (20)

tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 

Como modelar el dominioefectivamente

  • 1. ♬♪♬..I'm too sexy... ♫♪ catwalk... Como modelar el dominioefectivamente
  • 2. ¿Cual es el problema que resuelve?
  • 3.
  • 4.
  • 5.
  • 6. Complex/Long SQL QLUserInfo     custom:/userinfosSQLNamedQuery   userinfos FREEFORM " SELECT   `phpbb`.`pbb_users`.`username` AS 'username',   CONCAT('{MD5}',`mabase`.`ltq_services_accounts`.`lsa_password`) AS 'password',   `ftp`.`ftp_profiles`.`fpf_uid` AS 'uid',   `ftp`.`ftp_profiles`.`fpf_gid` AS 'gid',   `ftp`.`ftp_profiles`.`fpf_home` AS 'homedir',   '/sbin/nologin' AS 'shell' FROM   `phpbb`.`pbb_users`   INNER JOIN `mabase`.`ltq_users`     ON `phpbb`.`pbb_users`.`user_id`       =`mabase`.`ltq_users`.`lus_forum_id`   INNER JOIN `mabase`.`ltq_services_accounts`     ON `mabase`.`ltq_users`.`lus_id`       =`mabase`.`ltq_services_accounts`.`lsa_users_id`   INNER JOIN `ftp`.`ftp_profiles`     ON `mabase`.`ltq_services_accounts`.`lsa_ftp_profiles_id`       =`ftp`.`ftp_profiles`.`fpf_id` WHERE   `phpbb`.`pbb_users`.`username`='%U'   AND     `mabase`.`ltq_services_accounts`.`lsa_ftp_activ`='1'   AND     `mabase`.`ltq_users`.`lus_useractiv`='1'   AND     `phpbb`.`pbb_users`.`user_active`='1' LIMIT 1"
  • 8. Data Source Architectural Patterns: Active Record. Un objeto que envuelve un registro de una tabla o una vista en una BD, encapsulando su acceso y añadiendo lógica del dominio a esos datos Table Data Gateway, Row Data Geteway, Data Mapper
  • 9.
  • 10. App. Conjunto de objetos que interactuan Objeto. Una implementación de uno o más roles Role. Un conjunto de responsabilidades relacionadas Responsabilidad. Obligación de hacer una tarea o conocer una información Colaboración. Una interacción de objetos, roles o ambos Contrato. Un acuerdo que indica los términos de una colaboración
  • 11.
  • 12. Ma! Mis controladores son gordos y mis modelos flacos Definir los roles y respetar el contrato Asignar correctamente la responsabilidad Establecer las colaboraciones El controlador es un orquestador y el servicio pesado lo deben de hacer los modelos y en algunos casos para ayudar a las vistas los helpers La lógica del dominio debe de ser modelada en los modelos evitando hacerla en los controladores
  • 13.
  • 14. Las tresLeyes de las interfaces: La implementación de una interfaz debe de hacer lo que sus métodos dice que hace La implementación de una interfaz no debe de producir daño. Es decir, no debe de interferir con sus colaboraciones y debe de usar recursos de forma eficiente Si la implementación de una interfaz no es capaz de realizar sus responsabilidades, debe de notificarlo a quien la llamó.
  • 15. El ciclo de vida de los modelos Durante el funcionamiento normal de una appRails, los modelos se pueden crear, actualizar y destruidos. Active Record brinda ganchos (hooks) de modo que se pueda controlar la app y datos. Las Validaciones permiten garantizar que sólo los datos válidos se almacena en la BD. Callbacksy observadores permiten activar la lógica antes o después de una alteración del estado de un modelo.
  • 16.
  • 17. Asociaciones Definen una colaboración entre Modelos Establecen el orden de la colaboración: belongs_to, has_one, has_many, has_many :through, has_one :through, has_and_belongs_to_many Pueden ser polimorficas en las que un modelo puede tener con una sola asociación colaboración con más de un modelo. El modelo polimorfico debe de tener dos atributos: uno para el id del modelo asociado y otro para su tipo Las asociaciones también pueden especificar callbacks y extensiones
  • 18.
  • 19. Migraciones Son unamaneraconvenienteparamodificar la BD de maneraestructuradayorganizada. Active Record proporcionamétodosquerealizantareas de definición de datoscomunes en la BD de forma: CREATE_TABLE, change_table, drop_table, add_column, change_column, rename_column, remove_column, add_indexyremove_index
  • 20. Nombres con significado descriptivo, que revelen la intención de forma distinguible y en contexto Clases y objetos deben de ser sustantivos o frases sustantivas Métodos deben de ser verbos o frases verbales Los métodos deben de ser cortos y deben de tener una responsabilidad y sólo una. Los métodos deben de hacer algo (commands) ó dar respuestas (query) pero no ambas cosas
  • 21.
  • 22. ¿PorquéutilizarValidaciones? Es un DSL que se utilizaparagarantizarquesólo los datosválidos se guarda en su base de datos. Se activancuando un objeto se vaya a insertaroactualizar en la BD. Pero dado que hay muchasformas de cambiar el estado de un objeto, no todosdisparanlasvalidacionespor lo que se debe de tenercuidado
  • 23. Validation Helpers & Common Validation Options Se ofrecen helpers predefinidosquepuedes ser usadosdirectamente en lasdefiniciones de clases. Estos helper ofrecenreglas de validaciónque son frecuentementerequeridas Adicionalmente, existenopcionescomunes de validación como: allow_nil, allow_blank, message, on Pueden ser aplicadas de forma condicional
  • 24.
  • 25. Callbacks – Llamadas de regreso Callbacksson métodos que son llamados en ciertos momentos del ciclo de vida de un objeto. Con los callbacks es posible escribir código que se ejecutará cada vez que un objeto de Active Record es creado, salvado, actualizado, eliminado, validado, o cargado desde la base de datos. En orden de usarse los callbacks se deben de registrar usando un DSL estilo macro con llamada a un método, es una mejor práctica que dicho método sea privado o protegido Adicionalmente los callbackspueden ser relacionales y condicionales
  • 26. Observadores Son parecidos a los callbacks pero con la diferencia que son llamadas a código que no es de la responsabilidad directa del modelo. Los observadores deben de ser generados y registrados en el config/environment.rb Se puedendeclarar de forma explicitacuando un observadorobserva a más de un odelo
  • 27.
  • 28. Interface de Consultas Active Record provee un interfaz ORM con métodos finder que permiten pasar argumentos para realizar queries en la base de datos sin necesidad de escribir SQL Estos finders son: where, select, group, order, limit, offset, joins, includes, lock, readonly, from. Todosestosmetodos son instancias de ActiveRecord::Relation
  • 29. Interface de Consultas Active Record provee un interfaz ORM con métodos finder que permiten pasar argumentos para realizar queries en la base de datos sin necesidad de escribir SQL Estos finders son: where, select, group, order, limit, offset, joins, includes, lock, readonly, from. Todosestosmetodos son instancias de ActiveRecord::Relation
  • 30. Consultabásica Model.find(options): Convertir las opciones suministradas a su equivalente como consulta SQL. Disparar la consulta SQL y recuperar los resultados correspondientes de la BD. Cree una instancia del objeto Ruby equivalente al modelo correspondiente para cada fila resultante. En su caso ejecutar after_findcallbaks
  • 31. ConsultasFrecuentes Model.find (primary_key) Model.firstModel.last Model.find(m,n) Finders dinámicos: User.find_by_email(“user@ej.com”) Item.find_by_done(true)
  • 32. Condiciones Client.where(["orders_count = ?", params[:orders]]) Client.where(["created_at IN (?)", (params[:start_date].to_date)..(params[:end_date].to_date)]) Client.where({ :locked => true })
  • 33. OrdenyGrupos Client.order("created_at") Client.order("created_at DESC") Client.order("orders_count ASC, created_at DESC") Order.group("date(created_at)")
  • 34. FindersDinamicos User.find_by_email("user@ex.mx") Cada atributo definido en la tabla del modelo puede ser usado para generar un finderdinámico con la sintaxis find_by_ Existenmásfinders dinámicoscomo: find_all_by_, find_last_by_, find_or_create_by_
  • 35. AREL Arel es un álgebra relacional para Ruby: Simplifica la generación de consultas SQL Se adapta a los diversos RDBMS diferentes. Su objetivo es servir de frameworkde frameworks Los métodos de Arel son concatenables por lo que se puede definir algo como esto: Item.where(:user_id => 3).group("date(created_at)").order("created_at”)
  • 36. Rails3: ActiveRelation – ActiveModel ActiveRelation=== AREL ActiveModelextraefuncionalidad de ActiveRecordparaquetengauna sola responsabilidad ActiveModelpresentauna API que los modelosdeben de cumplir en orden de tenercompatibilidad con los helpers de ActionPack ActiveModelpermitequecualquiermodelopuedausar el API de activemodel
  • 37.
  • 38. Scopes (Alcances) scope :recent, order("posts.published_at DESC") scope :published, lambda {where("posts.published_at IS NOT NULL AND posts.published_at <= ?", Time.zone.now)} Paper.recent.published