mm15ar - magento 2: basado en una historia real

64
Magento 2 Basado en una historia real

Upload: facundo-capua

Post on 12-Apr-2017

305 views

Category:

Technology


2 download

TRANSCRIPT

Magento 2 Basado en una historia real

Magento 2Basado en una historia real

Quienes somos?

Facundo CapuaTechnical ManagerNahuel SanchezFront-End Technical Leader

Nicols GndaraSenior Back-EndDeveloper

Somos Summa Solutions:- empresa lder en desarrollo de e-commerce en latinoamerica- parte del equipo que se est dedicando a Magento2- Magento2 como desafio

Magento 2: Y ahora?Primeros pasos en Magento 2Casos prcticosConclusionesQu les vamos a contar?

No detenerse, los puntos se explican ms adelante.

Magento 2:Y ahora?

Magento 2: Y ahora?

- Modern tech stack: Composer, ZF2, Sy2, RequireJS, jQuery, LESSPerformance: FPC in core, indexes, varnish, production modeACORTAR: Streamlined customizations: cdigo desacoplado, service layer, decoupled codeHigh code quality: Implementacin consistente, test coverage, dependency injection, XSDACORTAR: Easier installations & upgrades: herramienta de instalacin, Semantic VersioningACORTAR: Simplified external integration: API Layer mejorada, estructura modular

Magento 2: Arquitectura

Magento 2 est dividido en diferentes capas.Magento Framework Magento Modules

ANOTACIN: Mejorar grfico de arquitectura

Primeros pasos en Magento 2

Magento 2: Primeros pasos

Seguimiento de los avancesDesafo, stack tecnolgico: Stack que no seguia la tendencia de la industriaNo subestimar el esfuerzo que iba a llevar

Magento 2: Primeros pasosDocumentacin oficialMagento 2 Fundamentals (on demand)Magento 2 Trained Solution Partner ProgramMagento 2 Class Add on (presencial)

Documentacin oficial: Comparacin con Magento1Magento 2 Fundamentals: Buena experiencia de Magento1 / Opcin FE y BE / Ejercicios de refuerzo propuestosMagento 2 Magento 2 Trained Solution Partner: Poner en prctica lo visto en el curso on demandMagento 2 Class Add On: 3 das intensivo / instructor para resolver las dudas

Magento 2: Primeros pasosMagento 2 Training Programs

FundamentalsCoursesDocumentationVideosBooksReal-worldExperience

+

Fundamentals es importante para entender las basesReal-world experience es indispensable para dominar la plataforma (no slo Magento 2, sino cualquiera)Re implementar un sitio de Magento2, ahora lo encapsulamos Summa Fashion para mantener el anonimato del cliente.

Casos prcticos

RequerimientoComo cliente necesito administrar informacin sobre imgenes, para luego poder mostrarlas en un slider en la pgina principal.Estas contendrn la siguiente informacin: ttulo, activo (si/no) y url de la imagen.

Luego de leer el requerimiento, se har click y se focalizar en la primer oracin del requerimiento.

Como se dijo anteriormente, el primero de los temas trata acerca de ABM en el backend.

ABM ImgenesUIComponentsUI ComponentsCon qu nos encontramos en el desarrollo del ABM?Qu fue lo que ms nos llamo la atencin?

Aca la idea es hablar acerca de los aspectos tecnicos que involucra la realizacion de un abm en magento 1, como lo conocemos. Luego una comparatiba con los cambios en magento 2, y haciendo foco en la introduccion de nuevos componentes(Containers, UI components).(Esto me intrude al tema pricipal)

Si bien hay cambios en otros de los aspectos mencionados en Magetento 1, como por ejemplo los controlaros que blablabla, nos parecio interesante mostrar estos nuevos elementos de magento 2.

ABM Imgenes - UI components

Principales componentesListing component.Form component.Otros componentes.Filter component.Pagination component.Columns Components.y otros..Principales componentesListing component.Form component.Otros componentes.Filter component.Pagination component.Columns Components.y otros..

Entonces Que son los UI Components?

ABM Imgenes - Layout

Para poder empezar a hablarles de los iu compoenentes,

ABM Imagenes - UI component - Listing

Listing component argumentosDataSourceContainersColumnsFilteringPaginationy ms

Bueno, como podemos ver el primer nodo que define el componente se denomina listing, dentro de este este tenemos la posibilidad de insertar varios tipos de componentes secundarios. El mas importante es el elemento denominado DataSource, este es obligatorio ya que es corazon de la configuracion (por asi decirlo). Lo mas importante a destacar es de las configuraciones de este es ek DataProvider que se le pasa como argumento,y el cual se puede ver que para nuestro ejemplo de imagenes el primer argumento que se le pasa es la clase con el nombre X. Que es esta clase? es una clase virtual, en realidad no existe,.. si vamos a nuestro di.xml podemos ver el tag se le indica que utilice otra en lugar de ella, en nuestro caso la otra es una collection de imagenes que se encuentra implementada dentro de la carpeta model, similar a como la conocemos en magento 1. A su vez el componente DataSource es conpartido por los otros componentes configurados en el listing, los cuales hace uso de este para en su logica de rendirazado.

ABM Imgenes - UI component - ListingData Provider

Bueno, como podemos ver el primer nodo que define el componente se denomina listing, dentro de este este tenemos la posibilidad de insertar varios tipos de componentes secundarios. El mas importante es el elemento denominado DataSource, este es obligatorio ya que es corazon de la configuracion (por asi decirlo). Lo mas importante a destacar es de las configuraciones de este es ek DataProvider que se le pasa como argumento,y el cual se puede ver que para nuestro ejemplo de imagenes el primer argumento que se le pasa es la clase con el nombre X. Que es esta clase? es una clase virtual, en realidad no existe,.. si vamos a nuestro di.xml podemos ver el tag se le indica que utilice otra en lugar de ella, en nuestro caso la otra es una collection de imagenes que se encuentra implementada dentro de la carpeta model, similar a como la conocemos en magento 1. A su vez el componente DataSource es conpartido por los otros componentes configurados en el listing, los cuales hace uso de este para en su logica de rendirazado.

ABM Imgenes - UI component -

Argumentos Tipo de datoOrdenAlineacinTtuloentre otras

ABM Imagenes - UI component -

Distintos tipos de filtrofilterInputfilterRangefilterDatefilterSelectentre otros

ABM Imgenes - Demo

RequerimientoComo cliente necesito administrar informacin sobre imgenes, para luego poder mostrarlas en un slider en la pgina principal.Estas contendrn la siguiente informacin: ttulo, activo (si/no) y url de la imagen.A su vez dichas imgenes tienen que poder ser accesibles y administrables desde un CMS externo.

Luego de leer el requerimiento, se har click y se focalizar en la primer oracin del requerimiento.

Como se dijo anteriormente, el primero de los temas trata acerca de ABM en el backend.

CMS ExternoQu nos provee Magento 2 para la manipulacin de los datos de nuestras entidades?Al CMS externo no le interesa saber nada acerca de la lgica del negocio.El CMS externo necesita enviar y recibir datos sin necesidad de entender como estos son manipulados en Magento.

Entonces, como dice la pregunta..Magento 2, que es los que nos brinda a nosotros como desarrolladores para hacernos la vida un poco ms sencilla, flexible, extensible, modificable, escalable...arquitectonicamente hablando?El CMS no debe entender como estos datos son guardados, o como es la lgica para consumir datos sobre ciertas entidades, en este caso nuestras imagenes. Como cliente solo se necesita enviar y recibir datos, con un determinado acuerdo entre las partes involucradas, en este caso entre MAGENTO y alguna otra que a nosotros no nos interesa saber.Y es aqu en Magento 2, donde se introduce los que se denominan SERVICE CONTRACTS.

Nicolas Alejandro Gandara (NAG) - Aparece luego de explicar que es lo que queremosCMS Externo - Service Layer

Para hablar de lo que son los service contracts, tenemos que hablar de la arquitectura de magento.. En la imagen podemos ver algunas cosas conocidas y otras no tanto.. Esta nueva capa de servicios que se encuentra entre la de presentacion y la capa de logica de negocios nos brinda muchos beneficios a nivel arquitectonico porque??En un nivel un poco mas tecnico, el objetivo es relizar todos los llamados desde otros modulos atravez de la capa de servicios, es decir cuando hablo de todos me refiero a los controladores, bloques, helpers, etc.Que beneficios nos provee a nosotros como desarrolladores, y al cliente por supuesto?? hacernos la vida mas facil, sobre todo en priyectos muy grandes los cuales la cantidad de customizaciones pueden ser muchas.Entonces, entre otras cosas nos permite:Desde la capa de presentacin, abstraer lgica de negocios que normalmente se encuentran en los bloques o templates.Nos asegura que toda la lgica de negocio se puede hacer fcilmente disponibles para aplicaciones externas como servicios web (en un ratito vamos a ver los facil que es). (Esto era un problema a veces en Magento 1 donde la lgica de cdigo de servicios web incluido lgica duplicado de la capa de presentacin, lo que caus problemas cuando extensiones en funcionamiento cambiado la interfaz de usuario, pero se perdi la API de servicios web, lo que resulta en un comportamiento incoherente.)Puede hacer ms fcil la depuracin - puntos de interrupcin en un depurador es ms fcil cuando se sabe que todas las llamadas fluirn a travs.Hace que sea ms fcil de sustituir la lgica de negocio - todas las llamadas se canalizan a travs de una nica API. En magento 1, puede pasar que otros mdulos salten cdigo de otro mdulo en cualquier momento, por lo que es ms difcil para una extensin de garantizar intercept todas las llamadas correctamente. (Ver un ejemplito cotidiano)El uso de definiciones de interfaz hace que sea ms sencillo de sustituir por completo la implementacin de un servicio con una definicin alternativa. (Una idea interesante aqu es tener un mdulo que slo contiene la definicin de interfaz de servicio y tener otros mdulos proporcionan implementaciones alternativas de la interfaz de servicio. Esto puede ser una exageracin para cada capa de servicio del mdulo, pero para las API clave como el envo esta podra ser una interesante idea.)

http://alankent.me/2014/05/22/magento-2-service-layer/ Benefecios y mas

Merchants might be reluctant to upgrade Magento because customized extensions that they have purchased might not be compatible with new versions of Magento. Also, Magento and third-party developers can find it difficult to track and report the dependencies that customized extensions have on other extensions.A service contract is a set of PHP interfaces that are defined for a module. A service contract includes data interfaces, which preserve data integrity, and service interfaces, which hide business logic details from service requestors such as controllers, web services, and other modules.

Magento is a modular system. Service contracts define agreements between clients and implementations of services. For a client, a well-defined API it can rely on to be (relatively) stable across upgrades is great. But Magento also wants to allow other implementations to be slotted in as well, and service contracts help here too.All service contracts (that obey some simple rules) can be easily exposed as REST or SOAP with no additional PHP coding required. That opens up more external integration possibilities and more creativity in frontend design and technologies. It is also open to all extension developers.

CMS Externo - Service Contracts

Interfaces de datos en el directorio /Api/Data

Tres tipos de serviciosInterfaces de repositorioInterfaces de administracinInterfaces de metadatosInterfaces de servicios en el espacio de nombres /API del mdulo

Para ser precicios esta nueva capa de servicios, los services contract, practicamente son un conjunto de interfaces que residen en Module/App directorios, las cuales nosotros como desarrolladores debemos definirlas..Estas interfaces nos van a proveer accesos a la logica del negocio para poder ser llamadas desde la capa de presentacion, dentro de el espacio de nombres Api/Data, el cual va a contener las interfaces de acceso a las estructuras de datos o pasadas o retornadas a travez de las funciones definidas en las interfaces del directorio api.Como podemos en el slide esta nueva capa nos provee tres tipo de interfaces, nosotros solo vamos hacer hincapie solo en la primera ya que la que utilizamos para el desarrollo de nuestro ejemplo, pero no queriamos dejar de nombrarlas para que sepan que existen otras..Interfaces de repositorio dan acceso a entidades de datos persistentes. En el caso de nuestro modulo, vammos a tener acceso a la informacion de las imagenes, otros casos de magento son las de los customer, estas incluyen al cliente, direccin, y el Grupo por ejemplo. Por lo tanto hay tres interfaces CustomerRepositoryInterface, AddressRepositoryInterface y GroupRepositoryInterface.

..

CMS Externo - Service Contracts - Interfaces

Getters / Setters

Entonces, continuando con nuestro ejemplo, podemos ver en la imagen de la izquierda nuestro modulo con sus respectica estructura de directorios en la cual podemos ver la inclusion de la carpeta API, la cual contiene tanto la interfaz ImageRepositoryInterface, y dentro de data la interfaz de la entidad ImageInterface.

Sobre la derecha podemos ver la la definicion del reposorio en donde podemos ver metodos comunes para cualquier tipo repositorio, getList al cual recibe como parametro un objeto del TIpo SearchCriteria(si bien no se hablo este probe la logica para las busquedas). Tambien pordemos ver el tipo load al cual se le pasa un id para poder obtener una determina entidad del tipo que implement ImageInterface, o por ultimo el metodo save para hacer el efectiva la persistencia de una nueva entidad o una entidad existente pero con sus datos modificados.

Por ultimo la interfaz Image la cual nos probe metodos para acceder a informacion especifica de la imagen, como me habiamos dicho, titiulo, activo o no, fechas de creacion, entre otras.

CMS Externo - Service Contracts - Interfaces

Entonces, continuando con nuestro ejemplo, podemos ver en la imagen de la izquierda nuestro modulo con sus respectica estructura de directorios en la cual podemos ver la inclusion de la carpeta API, la cual contiene tanto la interfaz ImageRepositoryInterface, y dentro de data la interfaz de la entidad ImageInterface.

Sobre la derecha podemos ver la la definicion del reposorio en donde podemos ver metodos comunes para cualquier tipo repositorio, getList al cual recibe como parametro un objeto del TIpo SearchCriteria(si bien no se hablo este probe la logica para las busquedas). Tambien pordemos ver el tipo load al cual se le pasa un id para poder obtener una determina entidad del tipo que implement ImageInterface, o por ultimo el metodo save para hacer el efectiva la persistencia de una nueva entidad o una entidad existente pero con sus datos modificados.

Por ultimo la interfaz Image la cual nos probe metodos para acceder a informacion especifica de la imagen, como me habiamos dicho, titiulo, activo o no, fechas de creacion, entre otras.

CMS Externo - Service Contracts - Implementaciones

CMS Externo - Service Contracts - Implementaciones

CMS Externo - Service Contracts - DI

CMS Externo - Service Layer

Para hablar de lo que son los service contracts, tenemos que hablar de la arquitectura de magento.. En la imagen podemos ver algunas cosas conocidas y otras no tanto.. Esta nueva capa de servicios que se encuentra entre la de presentacion y la capa de logica de negocios nos brinda muchos beneficios a nivel arquitectonico porque??En un nivel un poco mas tecnico, el objetivo es relizar todos los llamados desde otros modulos atravez de la capa de servicios, es decir cuando hablo de todos me refiero a los controladores, bloques, helpers, etc.Que beneficios nos provee a nosotros como desarrolladores, y al cliente por supuesto?? hacernos la vida mas facil, sobre todo en priyectos muy grandes los cuales la cantidad de customizaciones pueden ser muchas.Entonces, entre otras cosas nos permite:Desde la capa de presentacin, abstraer lgica de negocios que normalmente se encuentran en los bloques o templates.Nos asegura que toda la lgica de negocio se puede hacer fcilmente disponibles para aplicaciones externas como servicios web (en un ratito vamos a ver los facil que es). (Esto era un problema a veces en Magento 1 donde la lgica de cdigo de servicios web incluido lgica duplicado de la capa de presentacin, lo que caus problemas cuando extensiones en funcionamiento cambiado la interfaz de usuario, pero se perdi la API de servicios web, lo que resulta en un comportamiento incoherente.)Puede hacer ms fcil la depuracin - puntos de interrupcin en un depurador es ms fcil cuando se sabe que todas las llamadas fluirn a travs.Hace que sea ms fcil de sustituir la lgica de negocio - todas las llamadas se canalizan a travs de una nica API. En magento 1, puede pasar que otros mdulos salten cdigo de otro mdulo en cualquier momento, por lo que es ms difcil para una extensin de garantizar intercept todas las llamadas correctamente. (Ver un ejemplito cotidiano)El uso de definiciones de interfaz hace que sea ms sencillo de sustituir por completo la implementacin de un servicio con una definicin alternativa. (Una idea interesante aqu es tener un mdulo que slo contiene la definicin de interfaz de servicio y tener otros mdulos proporcionan implementaciones alternativas de la interfaz de servicio. Esto puede ser una exageracin para cada capa de servicio del mdulo, pero para las API clave como el envo esta podra ser una interesante idea.)

http://alankent.me/2014/05/22/magento-2-service-layer/ Benefecios y mas

Merchants might be reluctant to upgrade Magento because customized extensions that they have purchased might not be compatible with new versions of Magento. Also, Magento and third-party developers can find it difficult to track and report the dependencies that customized extensions have on other extensions.A service contract is a set of PHP interfaces that are defined for a module. A service contract includes data interfaces, which preserve data integrity, and service interfaces, which hide business logic details from service requestors such as controllers, web services, and other modules.

Magento is a modular system. Service contracts define agreements between clients and implementations of services. For a client, a well-defined API it can rely on to be (relatively) stable across upgrades is great. But Magento also wants to allow other implementations to be slotted in as well, and service contracts help here too.All service contracts (that obey some simple rules) can be easily exposed as REST or SOAP with no additional PHP coding required. That opens up more external integration possibilities and more creativity in frontend design and technologies. It is also open to all extension developers.

CMS Externo - Servicios REST

Por ultimo y no menos importante (para responder al requiermiento) el archivo de configuracion webapi.xml que podemos ver sobre la izquierda, este archivo sirve para indicar que url responde a que metodos de nuestro repositorio de imagenes, (aca es nombrar que metodo reponde a que url)

CMS Externo - Service Layer

Para hablar de lo que son los service contracts, tenemos que hablar de la arquitectura de magento.. En la imagen podemos ver algunas cosas conocidas y otras no tanto.. Esta nueva capa de servicios que se encuentra entre la de presentacion y la capa de logica de negocios nos brinda muchos beneficios a nivel arquitectonico porque??En un nivel un poco mas tecnico, el objetivo es relizar todos los llamados desde otros modulos atravez de la capa de servicios, es decir cuando hablo de todos me refiero a los controladores, bloques, helpers, etc.Que beneficios nos provee a nosotros como desarrolladores, y al cliente por supuesto?? hacernos la vida mas facil, sobre todo en priyectos muy grandes los cuales la cantidad de customizaciones pueden ser muchas.Entonces, entre otras cosas nos permite:Desde la capa de presentacin, abstraer lgica de negocios que normalmente se encuentran en los bloques o templates.Nos asegura que toda la lgica de negocio se puede hacer fcilmente disponibles para aplicaciones externas como servicios web (en un ratito vamos a ver los facil que es). (Esto era un problema a veces en Magento 1 donde la lgica de cdigo de servicios web incluido lgica duplicado de la capa de presentacin, lo que caus problemas cuando extensiones en funcionamiento cambiado la interfaz de usuario, pero se perdi la API de servicios web, lo que resulta en un comportamiento incoherente.)Puede hacer ms fcil la depuracin - puntos de interrupcin en un depurador es ms fcil cuando se sabe que todas las llamadas fluirn a travs.Hace que sea ms fcil de sustituir la lgica de negocio - todas las llamadas se canalizan a travs de una nica API. En magento 1, puede pasar que otros mdulos salten cdigo de otro mdulo en cualquier momento, por lo que es ms difcil para una extensin de garantizar intercept todas las llamadas correctamente. (Ver un ejemplito cotidiano)El uso de definiciones de interfaz hace que sea ms sencillo de sustituir por completo la implementacin de un servicio con una definicin alternativa. (Una idea interesante aqu es tener un mdulo que slo contiene la definicin de interfaz de servicio y tener otros mdulos proporcionan implementaciones alternativas de la interfaz de servicio. Esto puede ser una exageracin para cada capa de servicio del mdulo, pero para las API clave como el envo esta podra ser una interesante idea.)

http://alankent.me/2014/05/22/magento-2-service-layer/ Benefecios y mas

Merchants might be reluctant to upgrade Magento because customized extensions that they have purchased might not be compatible with new versions of Magento. Also, Magento and third-party developers can find it difficult to track and report the dependencies that customized extensions have on other extensions.A service contract is a set of PHP interfaces that are defined for a module. A service contract includes data interfaces, which preserve data integrity, and service interfaces, which hide business logic details from service requestors such as controllers, web services, and other modules.

Magento is a modular system. Service contracts define agreements between clients and implementations of services. For a client, a well-defined API it can rely on to be (relatively) stable across upgrades is great. But Magento also wants to allow other implementations to be slotted in as well, and service contracts help here too.All service contracts (that obey some simple rules) can be easily exposed as REST or SOAP with no additional PHP coding required. That opens up more external integration possibilities and more creativity in frontend design and technologies. It is also open to all extension developers.

CMS Externo - Servicios REST - Demo

Video que muestra el cms externo en funcionamiento, consumiento y enviando datos a magento, y por ultimo la validacion en el abm de magento mostrando de las nuevas imagenes enviadas atravez de el cms externo.

Luego de esto otro video que muestra como atravez de alguna herramienta de prueba para servicios REST(chrome) se obtienen y envian datos.

CMS Externo - Service Layer

Para hablar de lo que son los service contracts, tenemos que hablar de la arquitectura de magento.. En la imagen podemos ver algunas cosas conocidas y otras no tanto.. Esta nueva capa de servicios que se encuentra entre la de presentacion y la capa de logica de negocios nos brinda muchos beneficios a nivel arquitectonico porque??En un nivel un poco mas tecnico, el objetivo es relizar todos los llamados desde otros modulos atravez de la capa de servicios, es decir cuando hablo de todos me refiero a los controladores, bloques, helpers, etc.Que beneficios nos provee a nosotros como desarrolladores, y al cliente por supuesto?? hacernos la vida mas facil, sobre todo en priyectos muy grandes los cuales la cantidad de customizaciones pueden ser muchas.Entonces, entre otras cosas nos permite:Desde la capa de presentacin, abstraer lgica de negocios que normalmente se encuentran en los bloques o templates.Nos asegura que toda la lgica de negocio se puede hacer fcilmente disponibles para aplicaciones externas como servicios web (en un ratito vamos a ver los facil que es). (Esto era un problema a veces en Magento 1 donde la lgica de cdigo de servicios web incluido lgica duplicado de la capa de presentacin, lo que caus problemas cuando extensiones en funcionamiento cambiado la interfaz de usuario, pero se perdi la API de servicios web, lo que resulta en un comportamiento incoherente.)Puede hacer ms fcil la depuracin - puntos de interrupcin en un depurador es ms fcil cuando se sabe que todas las llamadas fluirn a travs.Hace que sea ms fcil de sustituir la lgica de negocio - todas las llamadas se canalizan a travs de una nica API. En magento 1, puede pasar que otros mdulos salten cdigo de otro mdulo en cualquier momento, por lo que es ms difcil para una extensin de garantizar intercept todas las llamadas correctamente. (Ver un ejemplito cotidiano)El uso de definiciones de interfaz hace que sea ms sencillo de sustituir por completo la implementacin de un servicio con una definicin alternativa. (Una idea interesante aqu es tener un mdulo que slo contiene la definicin de interfaz de servicio y tener otros mdulos proporcionan implementaciones alternativas de la interfaz de servicio. Esto puede ser una exageracin para cada capa de servicio del mdulo, pero para las API clave como el envo esta podra ser una interesante idea.)

http://alankent.me/2014/05/22/magento-2-service-layer/ Benefecios y mas

Merchants might be reluctant to upgrade Magento because customized extensions that they have purchased might not be compatible with new versions of Magento. Also, Magento and third-party developers can find it difficult to track and report the dependencies that customized extensions have on other extensions.A service contract is a set of PHP interfaces that are defined for a module. A service contract includes data interfaces, which preserve data integrity, and service interfaces, which hide business logic details from service requestors such as controllers, web services, and other modules.

Magento is a modular system. Service contracts define agreements between clients and implementations of services. For a client, a well-defined API it can rely on to be (relatively) stable across upgrades is great. But Magento also wants to allow other implementations to be slotted in as well, and service contracts help here too.All service contracts (that obey some simple rules) can be easily exposed as REST or SOAP with no additional PHP coding required. That opens up more external integration possibilities and more creativity in frontend design and technologies. It is also open to all extension developers.

CMS Externo - Conclusiones Service Layer: Nos permiti abstraer la lgica del manejo de las imgenes y hacerlas fcilmente disponibles para la capa de presentacin.WebApi Component: Facilidad y rapidez para exponer los servicios de ImageRepositoryInterface como REST.

Para hablar de lo que son los service contracts, tenemos que hablar de la arquitectura de magento.. En la imagen podemos ver algunas cosas conocidas y otras no tanto.. Esta nueva capa de servicios que se encuentra entre la de presentacion y la capa de logica de negocios nos brinda muchos beneficios a nivel arquitectonico porque??En un nivel un poco mas tecnico, el objetivo es relizar todos los llamados desde otros modulos atravez de la capa de servicios, es decir cuando hablo de todos me refiero a los controladores, bloques, helpers, etc.Que beneficios nos provee a nosotros como desarrolladores, y al cliente por supuesto?? hacernos la vida mas facil, sobre todo en priyectos muy grandes los cuales la cantidad de customizaciones pueden ser muchas.Entonces, entre otras cosas nos permite:Desde la capa de presentacin, abstraer lgica de negocios que normalmente se encuentran en los bloques o templates.Nos asegura que toda la lgica de negocio se puede hacer fcilmente disponibles para aplicaciones externas como servicios web (en un ratito vamos a ver los facil que es). (Esto era un problema a veces en Magento 1 donde la lgica de cdigo de servicios web incluido lgica duplicado de la capa de presentacin, lo que caus problemas cuando extensiones en funcionamiento cambiado la interfaz de usuario, pero se perdi la API de servicios web, lo que resulta en un comportamiento incoherente.)Puede hacer ms fcil la depuracin - puntos de interrupcin en un depurador es ms fcil cuando se sabe que todas las llamadas fluirn a travs.Hace que sea ms fcil de sustituir la lgica de negocio - todas las llamadas se canalizan a travs de una nica API. En magento 1, puede pasar que otros mdulos salten cdigo de otro mdulo en cualquier momento, por lo que es ms difcil para una extensin de garantizar intercept todas las llamadas correctamente. (Ver un ejemplito cotidiano)El uso de definiciones de interfaz hace que sea ms sencillo de sustituir por completo la implementacin de un servicio con una definicin alternativa. (Una idea interesante aqu es tener un mdulo que slo contiene la definicin de interfaz de servicio y tener otros mdulos proporcionan implementaciones alternativas de la interfaz de servicio. Esto puede ser una exageracin para cada capa de servicio del mdulo, pero para las API clave como el envo esta podra ser una interesante idea.)

http://alankent.me/2014/05/22/magento-2-service-layer/ Benefecios y mas

Merchants might be reluctant to upgrade Magento because customized extensions that they have purchased might not be compatible with new versions of Magento. Also, Magento and third-party developers can find it difficult to track and report the dependencies that customized extensions have on other extensions.A service contract is a set of PHP interfaces that are defined for a module. A service contract includes data interfaces, which preserve data integrity, and service interfaces, which hide business logic details from service requestors such as controllers, web services, and other modules.

Magento is a modular system. Service contracts define agreements between clients and implementations of services. For a client, a well-defined API it can rely on to be (relatively) stable across upgrades is great. But Magento also wants to allow other implementations to be slotted in as well, and service contracts help here too.All service contracts (that obey some simple rules) can be easily exposed as REST or SOAP with no additional PHP coding required. That opens up more external integration possibilities and more creativity in frontend design and technologies. It is also open to all extension developers.

Test Unitarios

HTML 5CSS3RequireJSLESSSASSCompassPrototypejQueryGruntMagento 2: Front-end

Prototype en el core desde el comienzo.SASS/Compass y jQuery recin en 1.14/1.9 dentro del package RWDLESS en reemplazo de SASSRequireJS para la carga de JS.Grunt para agilizar la etapa de desarrollo con compilacin de LESS y LiveLoad.

RequerimientoComo cliente quiero modificar la parte visual de mi sitio para adaptarla a mi marca.Al cliente le gusta toda o gran parte de la estructura por defecto.Slo quiere cambiar los colores por los utilizados por su marca, tipografas, y el logo.

- Poco trabajo en la parte de modificacin de estructuras, en los templates. Mucho trabajo en los estilos.

Crear un nuevo theme basado en magento/blank.Aprovechar Magento UI LibraryCmo lo hacemos?

No detenerse, los puntos se explican ms adelante.

Qu es magento/blank? hay otros themes? cambio algo el theme inheritance comparado con Magento 1?

Qu es magento/blank? hay otros themes? cambio algo el theme inheritance comparado con Magento 1?Presentar summa/fashion.

Es una librera en LESS que agiliza el desarrollo del front-end de Magento.Esta formada por mixins y variables que definen el aspecto visual de muchos elementos.Como Bootstrap pero pensado para Magento.Magento UI Library

Qu es? Una librera en LESS para agilizar el desarrollo de Magento.Cmo est hecha? Mixins y variables.Para que sirve? Permite modificar el look and feel del sitio de forma rpida.Compararlo con Bootstrap.

MagentoUI Libraryactions-toolbarbreadcrumbsbuttonsdrop-downsformsiconslayoutloadersmessagespaginationpopupsratingssectionstabsaccordionstablestooltipstypography

Algunas de las cosas que permite customizar.Mencionar el comportamiento de la empresa de ofrecer diseos basados en la estructura de Magento.

Mostrar rpidamente dnde se encuentran las cosas.

RequerimientoComo cliente quiero modificar la parte visual de mi sitio para adaptarla a mi marca.Al cliente le gusta toda o gran parte de la estructura por defecto.Slo quiere cambiar los colores para los utilizados por su marca, tipografas, y el logo.

- Poco trabajo en la parte de modificacin de estructuras, en los templates. Mucho trabajo en los estilos.

Creamos la carpeta del modulo Magento_Theme en nuestro theme summa/fashion.Nos traemos el default.xml por defecto de dicho mdulo con el fin de editar el ancho y alto de la imagenY agregamos el logo.pngRetomar Magento UI Library con el _theme.less (colores, tipografas)

Hacer hincapi en que slo se editan variables, no hay CSS/LESS propiamente dicho (corchetes), son 30 lineas contando comentarios.Repasar que elementos se estn alterando.

Mostrar el cambio, repitiendo que slo fueron 30 variables, se compil y listo.

Mostrar el cambio, repitiendo que slo fueron 30 variables, se compil y listo.

RequerimientoComo cliente quiero modificar el diseo aprovechando la llegada de la NavidadAgregar un fondo navideo detrs del logo.Agregar una decoracin navidea al slider de la pgina principal.

- Recordar que Magento UI Library no es la solucin para todos

Crear un nuevo theme basado en summa/fashion.Extender el theme padre para las modificaciones visuales del header.Modificar el front-end del mdulo del slider.Cmo lo hacemos?

Especificar que estamos contentos con la estructura de summa/fashion, con las modificaciones implementadas por Magento UI Library, y que los cambios son menores sobre la base de lo existente.No vamos a detenernos en el primer punto.

_extend.less, cmo funciona?

Hacemos referencia al modulo._module.less, qu es?

Mostrar el cambio desde magento/blank, pasando por summa/fashion hasta summa/christmas

RequerimientoComo administrador del sitio Summa Fashion necesito poder ofrecer descuentos diferenciados por producto y cliente ya que cuento con diferentes convenios.

DESTACAR: Cada cliente puede tener un descuento distinto por producto. No sirve el customer group.Posteriormente se piensa e una etapa B2B, donde este sera el escenario.

Estrategia

MagentoTables

CustomTable

- Agregar tabla de relacin- La tabla se llena con un cron

EstrategiaPrice Calculation General Flow

Lgica de Negocios

Nuevo flujo de clculo de preciosMucho ms maduro que Magento1

Implementacin

2 mtodos claves: extractAdjustment / applyAdjustment

Hacer que entre bien el signature, dejar el if completo, el query no es necesario

Bonus Track

PHPUnit, SeleniumScreenshot / Logs on failureEntities: Fixture / Repository / Handler / ConstraintTest Cases: Injectable / ScenarioMagento Testing Framework (MTF)

MTF: Framework de Magento para realizar test funcionalesPHPUnit / SeleniumFixture / Repository / HandlersFixture: Listado de propiedades de la entidad a probar. Utilizado para probar un conjunto de test o como una pre condicin.Repository: Informacin pre definida para un FixtureHandlers: Setear pre condiciones / preparar el entorno para ciertos test3 tipos: curl, ui, webapi

Conclusiones

DesafianteFacilitadorEstructuradoHomogneoConclusiones

Desafiante: Terreno no explorado / Stack actualizado > Cmo lo hace Magento2? Lo estbamos esperandoFacilitador: En poco tiempo de desarrollo, hemos podido lograr bastante / MTFEstructurado: Tiene una buena estructura, y una una vez entendida es fcil navegar el cdigoHomogeneos: Mantiene la coherencia y estructura en los diferentes mdulos

Diferencia entre Magento way y Magento 2 con standards de la industria.

GRACIAS