SlideShare a Scribd company logo
1 of 45
Applying Code
Customizations to
Magento 2
Who am I?
Igor Miniailo
Interactions with Magento2
Code
Extension
UI Model
UI
Model
Service
Contracts
Service
Contracts
Vendor
Customization
UI Model
Model
Service
Contracts
Vendor
Customization Points
Customization points
Admin Configuration
Low Level Linking
High-level configuration (DSLs)
events.xml
routes.xml
routes.xml webapi.xml
acl.xml
di.xml
Object B Object C Object A
Object B
config.xml
Store Configuration
Store Configuration
• In admin application: Stores->Configuration
• Values stored in Database
• Configured in system.xml
• Default values in config.xml
High Level Configuration
Routing
High-level Configuration
Event Manager
events.xml
routes.xml
Application subsystems
AreaApplication
EntryPoint
Cron App
Web App
WebAPI
Admin
FrontendMedia App
Low Level linking
1. Composability
2. Modularity
Composability
Composability
Split your code to lots of small
chunks and then compose them to
build your application
Dependency Injection
Dependencies are not located within object but are provided to that object by environment
namespace MagentoFrameworkEvent;
class Manager implements ManagerInterface
{
public function __construct(
Invoker $invoker,
Config $eventConfig,
$prefix = ''
) {
$this->_invoker = $invoker;
$this->_eventConfig = $eventConfig;
$this->_prefix = $prefix;
}
// some other code
}
Unit Tests
class ManagerTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
$this->_invoker = $this->getMock('MagentoFrameworkEventInvoker');
$this->_eventConfigMock = $this->getMock('MagentoFrameworkEventConfig');
$this->_eventManager = new MagentoFrameworkEventManager(
$this->_invoker,
$this->_eventConfigMock
);
}
}
SOLID
1. Single responsibility – Lots of small objects
2. Open Closed - Each object has multiple extension points
3. Liskov Substitution – Polymorphism for composability
4. Interface Segregation – Granularity
5. Dependency Inversion – Decoupling. In particular, any
caller of an interface depends only on the interface, even
if a separate module implements it.
Modularity
SOLId
Module B
Module A
Implementation
Module B
Module A Implementation
Interface
Module C
Implementation
Module AB
Module AC
Impl
Impl
Coupled
Decoupled
Modules Definition
Modules serve as named containers for domain
object classes that are highly cohesive with one
another.
The goal should be low coupling between the
classes that are in different Modules
Simple rules for Module design
• Ensuring that Modules are largely independent
of others has the same benefit as loosely
coupled classes. This will make it easier to
maintain and refactor code inside the module.
• Do strive for acyclic dependencies on Modules
where coupling is necessary. Just unidirection
Service Contracts
And Compatible Customizations
Extensions Compatibility Challenges
 Interfaces may be changed in a new version
 Extensions may depend on optional modules which is turned off
 Extensions may depend on undocumented behavior
How to ensure that two extensions will be compatible in a new
version?
Challenges for Developer
How to understand what functionality of the extension is stable and
what is not?
How to implement extension in the way that it will keep backward
compatibility but can evolve?
Stable APIs
 Backward Compatible:
 Classes or Interfaces are not removed
 Methods of the classes keeps signature between versions
 Interfaces neither changes existing methods nor add new ones
 Explicit Interfaces
 No generic data types as “mixed”, “object” or “array”
Few ways to make promises in Magento 2
Semantic Versioning of the
modules makes dependencies
between modules explicit
{
"name": "magento/module-catalog-inventory",
"require": {
"magento/module-customer": "0.74.0-beta2"
},
"type": "magento2-module"
}
/**
* @api
*/
interface AuthorizationInterface
{
/**
* Check current user permission on resource and privilege
*
* @param string $resource
* @param string $privilege
* @return boolean
*/
public function isAllowed($resource, $privilege = null);
}
@api annotation identifies subset
of the methods with the stable APIs
Enforced by tools and static tests
http://alankent.me/2015/10/02/magento-2-
version-numbering-update/
MAGENTO 2 VERSION NUMBERING
Magento 1.x Domain Level API
 Model is an entry point to the Module
 Interface implicitly defined via the
database schema
 No single place for the business rules
They can be in:
 Controllers
 Models
 Helpers
 Templates
Model
Resource
Model
Client
getData()
Repositories
Service Contracts
Models
Resource
Models/Entity
Manager
Web API clients
M2 Module
Blocks TemplatesControllers
Other M2 Modules
Services
Data
Objects
Service Contracts
Domain Level API
Single way to define API for the business
feature
 Defines strong interface
 Single place to implement business rules
 All interactions with the module are safe to
go through the contracts: same behavior
guaranteed
Repositories
Service Contracts
Models
Resource
Models/Entity
Manager
M2 Module
Blocks TemplatesControllers
Services
Data
Objects
Service Contracts Interfaces
Service Contracts
Service
Interfaces
Data Interface
Data interfaces
 Defines data structures, used as input and
output types of the business operations
 Examples: Customer, Product, Region,
Currency, etc.
Service interfaces
 Defines business operations
 Examples: load, delete, save, change
password, etc.
They are just PHP Interfaces
More on Data Interfaces
 Has just setters and getters to describe
a data
 Reusable across different Service
interfaces
 Encapsulates all the data needed to
process service request
 Can be Serialized
 Annotations are used to extract the data
More on Service Interfaces
 Defines public operations supported by
the module
 Methods are independent and
stateless.
 Invocation of one method should not
affect the result of another
 Methods combined in interface by
cohesion principle
 Annotated with types information
Classes Implementing Data Interfaces
 It can be Model (NOT
Recommended):
 All the setters and getters should be
declared explicitly
 No magic methods
 It can be Any PHP class:
 Implements data interface and any
other methods
 It can be Data Object:
 Implements just methods from the
data interface
Models
Data
Objects
Data Interfaces
Implementation of Service Interfaces
 Resource Models (legacy, not
recommended):
 Used for persistence operations
 Implements load/save/delete
methods and accept Data Interface
as an input
 Entity Manager:
 Used for persistence operations
 ORM implementation
 Services:
 Implements operations and business
rules around them
Service Interfaces
Resource
Models/EntityM
anager
Services
Use Service Contracts
 Define dependency on service interface in the constructor
class CreateCustomer extends MagentoCustomerControllerAccount
{
public function __construct(
AccountManagementInterface $accountManagement
) {
$this->accountManagement = $accountManagement;
}
public function execute()
{
$customer = $this->getRequest()->getParam('customer');
$password = $this->getRequest()->getParam('password');
$redirectUrl = $this->getRequest()->getParam('redirect_url');
$customer = $this->accountManagement
->createAccount($customer, $password, $redirectUrl);
…
}
}
Re-Implement Service Contracts
 Define a preference in DI: it will point on a new implementation
 All the constructors will be injected with a new implementation
<preference for="MagentoCustomerApiAccountManagementInterface"
type="SomeVendorNewExtensionModelAccountManagement" />
<preference for="MagentoCustomerApiDataRegionInterface"
type="SomeVendorNewExtensionModelDataRegion" />
Customize Service Contracts
 Plugins is a way to add new behavior each time Service Interface
implementation is invoked
/**
* Plugin after create customer that updates any newsletter subscription that may have existed.
*
* @param CustomerRepositoryInterface $subject
* @param CustomerInterface $customer
* @return CustomerInterface
*/
public function afterSave(CustomerRepositoryInterface $subject, CustomerInterface $customer)
{
$this->subscriberFactory->create()->updateSubscription($customer->getId());
return $customer;
}
Extend Data Interfaces
 Extension Attributes is a way to Extend Data Interfaces from third-
party module
 Added via xml configuration, generated as an object
Review fields
Catalog
Inventory fields
Rating and
Reviews
Module Catalog
Inventory
Module
Product Data
Interface
Product fields
Generated Extension Attributes
<extension_attributes for="MagentoCatalogApiDataProductInterface">
<attribute
code="bundle_product_options"
type="MagentoBundleApiDataOptionInterface[]" />
</extension_attributes>
interface ProductExtensionInterface extends MagentoFrameworkApiExtensionAttributesInterface
{
/**
* @return MagentoBundleApiDataOptionInterface[]
*/
public function getBundleProductOptions();
/**
* @param MagentoBundleApiDataOptionInterface[] $bundleProductOptions
* @return $this
*/
public function setBundleProductOptions($bundleProductOptions);
...
}
Summary
 Magento 2.x gives stronger promises on public APIs
 Service Contracts are the way to define API for the Business features
 Service Contracts should be the single entry point to functionality of the
module
 Customizable via dependency injection, plugins and extension attributes
 Customizations become available for all the clients of Service Contracts
Thank you!
Igor Miniailo
iminiailo@magento.com
Q & A

More Related Content

What's hot

Mule real-world-old
Mule real-world-oldMule real-world-old
Mule real-world-oldF K
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API ProxyVince Soliza
 
Mule esb–api layer
Mule esb–api layerMule esb–api layer
Mule esb–api layerhimajareddys
 
Best practices for multi saa s integrations
Best practices for multi saa s integrationsBest practices for multi saa s integrations
Best practices for multi saa s integrationsD.Rajesh Kumar
 
Mule Fundamentals
Mule FundamentalsMule Fundamentals
Mule FundamentalsKhasim Cise
 
Development using anypointstudio
Development using anypointstudioDevelopment using anypointstudio
Development using anypointstudiohimajareddys
 
MuleSoft CloudHub FAQ
MuleSoft CloudHub FAQMuleSoft CloudHub FAQ
MuleSoft CloudHub FAQShanky Gupta
 
Real world integration using mule
Real world integration using muleReal world integration using mule
Real world integration using muleManav Prasad
 
Introduction To Spring Enterprise Integration - SpringPeople
Introduction To Spring Enterprise Integration - SpringPeopleIntroduction To Spring Enterprise Integration - SpringPeople
Introduction To Spring Enterprise Integration - SpringPeopleSpringPeople
 
Mule esb whole_web_services
Mule esb whole_web_servicesMule esb whole_web_services
Mule esb whole_web_servicesNaresh Naidu
 
Mule -solutions for data integration
Mule -solutions for data integrationMule -solutions for data integration
Mule -solutions for data integrationD.Rajesh Kumar
 
Mule Concur Connector
Mule Concur ConnectorMule Concur Connector
Mule Concur ConnectorAnkush Sharma
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitecturePaul Mooney
 

What's hot (20)

Mule real-world-old
Mule real-world-oldMule real-world-old
Mule real-world-old
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API Proxy
 
mule real world
mule real worldmule real world
mule real world
 
Mule esb–api layer
Mule esb–api layerMule esb–api layer
Mule esb–api layer
 
Mule execution
Mule executionMule execution
Mule execution
 
Best practices for multi saa s integrations
Best practices for multi saa s integrationsBest practices for multi saa s integrations
Best practices for multi saa s integrations
 
Mule Fundamentals
Mule FundamentalsMule Fundamentals
Mule Fundamentals
 
Development using anypointstudio
Development using anypointstudioDevelopment using anypointstudio
Development using anypointstudio
 
Mule execution
Mule executionMule execution
Mule execution
 
Mule oracle connectors
Mule oracle connectorsMule oracle connectors
Mule oracle connectors
 
MuleSoft CloudHub FAQ
MuleSoft CloudHub FAQMuleSoft CloudHub FAQ
MuleSoft CloudHub FAQ
 
Real world integration using mule
Real world integration using muleReal world integration using mule
Real world integration using mule
 
Introduction To Spring Enterprise Integration - SpringPeople
Introduction To Spring Enterprise Integration - SpringPeopleIntroduction To Spring Enterprise Integration - SpringPeople
Introduction To Spring Enterprise Integration - SpringPeople
 
Mule esb whole_web_services
Mule esb whole_web_servicesMule esb whole_web_services
Mule esb whole_web_services
 
Mule -solutions for data integration
Mule -solutions for data integrationMule -solutions for data integration
Mule -solutions for data integration
 
Mule real-world-old
Mule real-world-oldMule real-world-old
Mule real-world-old
 
Mule Concur Connector
Mule Concur ConnectorMule Concur Connector
Mule Concur Connector
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Mule 3.4 features
Mule 3.4 featuresMule 3.4 features
Mule 3.4 features
 
Mule testing
Mule testingMule testing
Mule testing
 

Viewers also liked

Magento 2.2 B2B, Pimcore, Open Loyalty - features and case study
Magento 2.2 B2B, Pimcore, Open Loyalty -  features and case studyMagento 2.2 B2B, Pimcore, Open Loyalty -  features and case study
Magento 2.2 B2B, Pimcore, Open Loyalty - features and case studyDivante
 
David Bolufer - Make your magento2 fly2
David Bolufer - Make your magento2 fly2David Bolufer - Make your magento2 fly2
David Bolufer - Make your magento2 fly2Mage Titans ES
 
Magento2 Varnish Integration | Magento2 Speed & Optimization
Magento2 Varnish Integration | Magento2 Speed & OptimizationMagento2 Varnish Integration | Magento2 Speed & Optimization
Magento2 Varnish Integration | Magento2 Speed & OptimizationWebkul Software Pvt. Ltd.
 
Magento2 Search insights by Klevu
Magento2 Search insights by KlevuMagento2 Search insights by Klevu
Magento2 Search insights by KlevuDivante
 
vue-storefront - PWA eCommerce for Magento2 MM17NYC presentation
vue-storefront - PWA eCommerce for Magento2 MM17NYC presentationvue-storefront - PWA eCommerce for Magento2 MM17NYC presentation
vue-storefront - PWA eCommerce for Magento2 MM17NYC presentationDivante
 
How to build a container monitoring solution - David Gildeh, CEO and Co-Found...
How to build a container monitoring solution - David Gildeh, CEO and Co-Found...How to build a container monitoring solution - David Gildeh, CEO and Co-Found...
How to build a container monitoring solution - David Gildeh, CEO and Co-Found...Outlyer
 
Require js and Magento2
Require js and Magento2Require js and Magento2
Require js and Magento2Irene Iaccio
 
Tools out of the box with Magento 2 in PHPSTORM
Tools out of the box with Magento 2 in PHPSTORMTools out of the box with Magento 2 in PHPSTORM
Tools out of the box with Magento 2 in PHPSTORMAndra Elena Lungu
 

Viewers also liked (8)

Magento 2.2 B2B, Pimcore, Open Loyalty - features and case study
Magento 2.2 B2B, Pimcore, Open Loyalty -  features and case studyMagento 2.2 B2B, Pimcore, Open Loyalty -  features and case study
Magento 2.2 B2B, Pimcore, Open Loyalty - features and case study
 
David Bolufer - Make your magento2 fly2
David Bolufer - Make your magento2 fly2David Bolufer - Make your magento2 fly2
David Bolufer - Make your magento2 fly2
 
Magento2 Varnish Integration | Magento2 Speed & Optimization
Magento2 Varnish Integration | Magento2 Speed & OptimizationMagento2 Varnish Integration | Magento2 Speed & Optimization
Magento2 Varnish Integration | Magento2 Speed & Optimization
 
Magento2 Search insights by Klevu
Magento2 Search insights by KlevuMagento2 Search insights by Klevu
Magento2 Search insights by Klevu
 
vue-storefront - PWA eCommerce for Magento2 MM17NYC presentation
vue-storefront - PWA eCommerce for Magento2 MM17NYC presentationvue-storefront - PWA eCommerce for Magento2 MM17NYC presentation
vue-storefront - PWA eCommerce for Magento2 MM17NYC presentation
 
How to build a container monitoring solution - David Gildeh, CEO and Co-Found...
How to build a container monitoring solution - David Gildeh, CEO and Co-Found...How to build a container monitoring solution - David Gildeh, CEO and Co-Found...
How to build a container monitoring solution - David Gildeh, CEO and Co-Found...
 
Require js and Magento2
Require js and Magento2Require js and Magento2
Require js and Magento2
 
Tools out of the box with Magento 2 in PHPSTORM
Tools out of the box with Magento 2 in PHPSTORMTools out of the box with Magento 2 in PHPSTORM
Tools out of the box with Magento 2 in PHPSTORM
 

Similar to Applying Code Customizations to Magento 2

MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCAnton Krasnoshchok
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014Ran Wahle
 
Hybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow Up
Hybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow UpHybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow Up
Hybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow UpNicole Bray
 
angularJs Workshop
angularJs WorkshopangularJs Workshop
angularJs WorkshopRan Wahle
 
Build Message-Based Web Services for SOA
Build Message-Based Web Services for SOABuild Message-Based Web Services for SOA
Build Message-Based Web Services for SOAJeffrey Hasan
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .NetRichard Banks
 
Introduction to Angularjs : kishan kumar
Introduction to Angularjs : kishan kumarIntroduction to Angularjs : kishan kumar
Introduction to Angularjs : kishan kumarAppfinz Technologies
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular jsAayush Shrestha
 
Mc0081 .(dot)net technologies
Mc0081  .(dot)net technologiesMc0081  .(dot)net technologies
Mc0081 .(dot)net technologiessmumbahelp
 
Wcf best practice
Wcf best practiceWcf best practice
Wcf best practiceYu GUAN
 
SaaS transformation with OCE - uEngineCloud
SaaS transformation with OCE - uEngineCloudSaaS transformation with OCE - uEngineCloud
SaaS transformation with OCE - uEngineClouduEngine Solutions
 
IBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic InvestmentIBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic InvestmentStrongback Consulting
 
Lecture 18 - Model-Driven Service Development
Lecture 18 - Model-Driven Service DevelopmentLecture 18 - Model-Driven Service Development
Lecture 18 - Model-Driven Service Developmentphanleson
 
MVC ppt presentation
MVC ppt presentationMVC ppt presentation
MVC ppt presentationBhavin Shah
 

Similar to Applying Code Customizations to Magento 2 (20)

MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVC
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014
 
Hybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow Up
Hybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow UpHybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow Up
Hybrid Identity Made Simple - Microsoft World Partner Conference 2016 Follow Up
 
MVC 4
MVC 4MVC 4
MVC 4
 
angularJs Workshop
angularJs WorkshopangularJs Workshop
angularJs Workshop
 
J2EE pattern 5
J2EE pattern 5J2EE pattern 5
J2EE pattern 5
 
Build Message-Based Web Services for SOA
Build Message-Based Web Services for SOABuild Message-Based Web Services for SOA
Build Message-Based Web Services for SOA
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
 
Spring Framework-II
Spring Framework-IISpring Framework-II
Spring Framework-II
 
Introduction to Angularjs : kishan kumar
Introduction to Angularjs : kishan kumarIntroduction to Angularjs : kishan kumar
Introduction to Angularjs : kishan kumar
 
Introduction to Angularjs
Introduction to AngularjsIntroduction to Angularjs
Introduction to Angularjs
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
 
Designingapplswithnet
DesigningapplswithnetDesigningapplswithnet
Designingapplswithnet
 
Mc0081 .(dot)net technologies
Mc0081  .(dot)net technologiesMc0081  .(dot)net technologies
Mc0081 .(dot)net technologies
 
Wcf best practice
Wcf best practiceWcf best practice
Wcf best practice
 
SaaS transformation with OCE - uEngineCloud
SaaS transformation with OCE - uEngineCloudSaaS transformation with OCE - uEngineCloud
SaaS transformation with OCE - uEngineCloud
 
IBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic InvestmentIBM Innovate 2013: Making Rational HATS a Strategic Investment
IBM Innovate 2013: Making Rational HATS a Strategic Investment
 
Lecture 18 - Model-Driven Service Development
Lecture 18 - Model-Driven Service DevelopmentLecture 18 - Model-Driven Service Development
Lecture 18 - Model-Driven Service Development
 
MVC ppt presentation
MVC ppt presentationMVC ppt presentation
MVC ppt presentation
 

More from Igor Miniailo

Extensibility of Magento, the look into the future
Extensibility of Magento, the look into the futureExtensibility of Magento, the look into the future
Extensibility of Magento, the look into the futureIgor Miniailo
 
Magento Storefront architecture
Magento Storefront architectureMagento Storefront architecture
Magento Storefront architectureIgor Miniailo
 
Something Architecture
Something ArchitectureSomething Architecture
Something ArchitectureIgor Miniailo
 
A long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLA long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLIgor Miniailo
 
The long way from Monolith to Microservices
The long way from Monolith to MicroservicesThe long way from Monolith to Microservices
The long way from Monolith to MicroservicesIgor Miniailo
 
CQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSICQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSIIgor Miniailo
 
MageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesMageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesIgor Miniailo
 
Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018Igor Miniailo
 
Magento Multi-Source Inventory (MSI)
Magento Multi-Source Inventory (MSI)Magento Multi-Source Inventory (MSI)
Magento Multi-Source Inventory (MSI)Igor Miniailo
 
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)Igor Miniailo
 
Testing in Magento 2
Testing in Magento 2 Testing in Magento 2
Testing in Magento 2 Igor Miniailo
 
API design best practices
API design best practicesAPI design best practices
API design best practicesIgor Miniailo
 
Architecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source InventoryArchitecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source InventoryIgor Miniailo
 
Dare to Share Magento Community Engineering
Dare to Share Magento Community Engineering Dare to Share Magento Community Engineering
Dare to Share Magento Community Engineering Igor Miniailo
 
Multi Source Inventory (MSI) in Magento 2
Multi Source Inventory (MSI) in Magento 2 Multi Source Inventory (MSI) in Magento 2
Multi Source Inventory (MSI) in Magento 2 Igor Miniailo
 
Backward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarBackward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarIgor Miniailo
 
Backwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NLBackwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NLIgor Miniailo
 
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZBackward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZIgor Miniailo
 
Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Igor Miniailo
 
Modular development in Magento 2
Modular development in Magento 2Modular development in Magento 2
Modular development in Magento 2Igor Miniailo
 

More from Igor Miniailo (20)

Extensibility of Magento, the look into the future
Extensibility of Magento, the look into the futureExtensibility of Magento, the look into the future
Extensibility of Magento, the look into the future
 
Magento Storefront architecture
Magento Storefront architectureMagento Storefront architecture
Magento Storefront architecture
 
Something Architecture
Something ArchitectureSomething Architecture
Something Architecture
 
A long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NLA long way from Monolith to Service Isolated Architecture #MM19NL
A long way from Monolith to Service Isolated Architecture #MM19NL
 
The long way from Monolith to Microservices
The long way from Monolith to MicroservicesThe long way from Monolith to Microservices
The long way from Monolith to Microservices
 
CQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSICQRS and Event-Sourcing in Magento2 by examples of MSI
CQRS and Event-Sourcing in Magento2 by examples of MSI
 
MageConf 2017, Design API Best Practices
MageConf 2017, Design API Best PracticesMageConf 2017, Design API Best Practices
MageConf 2017, Design API Best Practices
 
Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018Multi-Source Inventory. Imagine. Las Vegas. 2018
Multi-Source Inventory. Imagine. Las Vegas. 2018
 
Magento Multi-Source Inventory (MSI)
Magento Multi-Source Inventory (MSI)Magento Multi-Source Inventory (MSI)
Magento Multi-Source Inventory (MSI)
 
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
Magento 2 Automated Testing via examples of Multi-Source Inventory (MSI)
 
Testing in Magento 2
Testing in Magento 2 Testing in Magento 2
Testing in Magento 2
 
API design best practices
API design best practicesAPI design best practices
API design best practices
 
Architecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source InventoryArchitecture and workflow of Multi-Source Inventory
Architecture and workflow of Multi-Source Inventory
 
Dare to Share Magento Community Engineering
Dare to Share Magento Community Engineering Dare to Share Magento Community Engineering
Dare to Share Magento Community Engineering
 
Multi Source Inventory (MSI) in Magento 2
Multi Source Inventory (MSI) in Magento 2 Multi Source Inventory (MSI) in Magento 2
Multi Source Inventory (MSI) in Magento 2
 
Backward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide WebinarBackward Compatibility Developer's Guide Webinar
Backward Compatibility Developer's Guide Webinar
 
Backwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NLBackwards Compatibility Developers Guide. #MM17NL
Backwards Compatibility Developers Guide. #MM17NL
 
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZBackward Compatibility Developer's Guide in Magento 2. #MM17CZ
Backward Compatibility Developer's Guide in Magento 2. #MM17CZ
 
Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2Backward Compatibility Developer's Guide in Magento 2
Backward Compatibility Developer's Guide in Magento 2
 
Modular development in Magento 2
Modular development in Magento 2Modular development in Magento 2
Modular development in Magento 2
 

Recently uploaded

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noidabntitsolutionsrishis
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 

Recently uploaded (20)

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 

Applying Code Customizations to Magento 2

  • 2. Who am I? Igor Miniailo
  • 7. Customization points Admin Configuration Low Level Linking High-level configuration (DSLs) events.xml routes.xml routes.xml webapi.xml acl.xml di.xml Object B Object C Object A Object B config.xml
  • 9. Store Configuration • In admin application: Stores->Configuration • Values stored in Database • Configured in system.xml • Default values in config.xml
  • 16. Composability Split your code to lots of small chunks and then compose them to build your application
  • 17. Dependency Injection Dependencies are not located within object but are provided to that object by environment namespace MagentoFrameworkEvent; class Manager implements ManagerInterface { public function __construct( Invoker $invoker, Config $eventConfig, $prefix = '' ) { $this->_invoker = $invoker; $this->_eventConfig = $eventConfig; $this->_prefix = $prefix; } // some other code }
  • 18. Unit Tests class ManagerTest extends PHPUnit_Framework_TestCase { protected function setUp() { $this->_invoker = $this->getMock('MagentoFrameworkEventInvoker'); $this->_eventConfigMock = $this->getMock('MagentoFrameworkEventConfig'); $this->_eventManager = new MagentoFrameworkEventManager( $this->_invoker, $this->_eventConfigMock ); } }
  • 19. SOLID 1. Single responsibility – Lots of small objects 2. Open Closed - Each object has multiple extension points 3. Liskov Substitution – Polymorphism for composability 4. Interface Segregation – Granularity 5. Dependency Inversion – Decoupling. In particular, any caller of an interface depends only on the interface, even if a separate module implements it.
  • 21. SOLId Module B Module A Implementation Module B Module A Implementation Interface Module C Implementation Module AB Module AC Impl Impl Coupled Decoupled
  • 22. Modules Definition Modules serve as named containers for domain object classes that are highly cohesive with one another. The goal should be low coupling between the classes that are in different Modules
  • 23. Simple rules for Module design • Ensuring that Modules are largely independent of others has the same benefit as loosely coupled classes. This will make it easier to maintain and refactor code inside the module. • Do strive for acyclic dependencies on Modules where coupling is necessary. Just unidirection
  • 25. Extensions Compatibility Challenges  Interfaces may be changed in a new version  Extensions may depend on optional modules which is turned off  Extensions may depend on undocumented behavior How to ensure that two extensions will be compatible in a new version?
  • 26. Challenges for Developer How to understand what functionality of the extension is stable and what is not? How to implement extension in the way that it will keep backward compatibility but can evolve?
  • 27. Stable APIs  Backward Compatible:  Classes or Interfaces are not removed  Methods of the classes keeps signature between versions  Interfaces neither changes existing methods nor add new ones  Explicit Interfaces  No generic data types as “mixed”, “object” or “array”
  • 28. Few ways to make promises in Magento 2 Semantic Versioning of the modules makes dependencies between modules explicit { "name": "magento/module-catalog-inventory", "require": { "magento/module-customer": "0.74.0-beta2" }, "type": "magento2-module" } /** * @api */ interface AuthorizationInterface { /** * Check current user permission on resource and privilege * * @param string $resource * @param string $privilege * @return boolean */ public function isAllowed($resource, $privilege = null); } @api annotation identifies subset of the methods with the stable APIs Enforced by tools and static tests
  • 30. Magento 1.x Domain Level API  Model is an entry point to the Module  Interface implicitly defined via the database schema  No single place for the business rules They can be in:  Controllers  Models  Helpers  Templates Model Resource Model Client getData()
  • 31. Repositories Service Contracts Models Resource Models/Entity Manager Web API clients M2 Module Blocks TemplatesControllers Other M2 Modules Services Data Objects Service Contracts
  • 32. Domain Level API Single way to define API for the business feature  Defines strong interface  Single place to implement business rules  All interactions with the module are safe to go through the contracts: same behavior guaranteed Repositories Service Contracts Models Resource Models/Entity Manager M2 Module Blocks TemplatesControllers Services Data Objects
  • 33. Service Contracts Interfaces Service Contracts Service Interfaces Data Interface Data interfaces  Defines data structures, used as input and output types of the business operations  Examples: Customer, Product, Region, Currency, etc. Service interfaces  Defines business operations  Examples: load, delete, save, change password, etc. They are just PHP Interfaces
  • 34. More on Data Interfaces  Has just setters and getters to describe a data  Reusable across different Service interfaces  Encapsulates all the data needed to process service request  Can be Serialized  Annotations are used to extract the data
  • 35. More on Service Interfaces  Defines public operations supported by the module  Methods are independent and stateless.  Invocation of one method should not affect the result of another  Methods combined in interface by cohesion principle  Annotated with types information
  • 36. Classes Implementing Data Interfaces  It can be Model (NOT Recommended):  All the setters and getters should be declared explicitly  No magic methods  It can be Any PHP class:  Implements data interface and any other methods  It can be Data Object:  Implements just methods from the data interface Models Data Objects Data Interfaces
  • 37. Implementation of Service Interfaces  Resource Models (legacy, not recommended):  Used for persistence operations  Implements load/save/delete methods and accept Data Interface as an input  Entity Manager:  Used for persistence operations  ORM implementation  Services:  Implements operations and business rules around them Service Interfaces Resource Models/EntityM anager Services
  • 38. Use Service Contracts  Define dependency on service interface in the constructor class CreateCustomer extends MagentoCustomerControllerAccount { public function __construct( AccountManagementInterface $accountManagement ) { $this->accountManagement = $accountManagement; } public function execute() { $customer = $this->getRequest()->getParam('customer'); $password = $this->getRequest()->getParam('password'); $redirectUrl = $this->getRequest()->getParam('redirect_url'); $customer = $this->accountManagement ->createAccount($customer, $password, $redirectUrl); … } }
  • 39. Re-Implement Service Contracts  Define a preference in DI: it will point on a new implementation  All the constructors will be injected with a new implementation <preference for="MagentoCustomerApiAccountManagementInterface" type="SomeVendorNewExtensionModelAccountManagement" /> <preference for="MagentoCustomerApiDataRegionInterface" type="SomeVendorNewExtensionModelDataRegion" />
  • 40. Customize Service Contracts  Plugins is a way to add new behavior each time Service Interface implementation is invoked /** * Plugin after create customer that updates any newsletter subscription that may have existed. * * @param CustomerRepositoryInterface $subject * @param CustomerInterface $customer * @return CustomerInterface */ public function afterSave(CustomerRepositoryInterface $subject, CustomerInterface $customer) { $this->subscriberFactory->create()->updateSubscription($customer->getId()); return $customer; }
  • 41.
  • 42. Extend Data Interfaces  Extension Attributes is a way to Extend Data Interfaces from third- party module  Added via xml configuration, generated as an object Review fields Catalog Inventory fields Rating and Reviews Module Catalog Inventory Module Product Data Interface Product fields
  • 43. Generated Extension Attributes <extension_attributes for="MagentoCatalogApiDataProductInterface"> <attribute code="bundle_product_options" type="MagentoBundleApiDataOptionInterface[]" /> </extension_attributes> interface ProductExtensionInterface extends MagentoFrameworkApiExtensionAttributesInterface { /** * @return MagentoBundleApiDataOptionInterface[] */ public function getBundleProductOptions(); /** * @param MagentoBundleApiDataOptionInterface[] $bundleProductOptions * @return $this */ public function setBundleProductOptions($bundleProductOptions); ... }
  • 44. Summary  Magento 2.x gives stronger promises on public APIs  Service Contracts are the way to define API for the Business features  Service Contracts should be the single entry point to functionality of the module  Customizable via dependency injection, plugins and extension attributes  Customizations become available for all the clients of Service Contracts

Editor's Notes

  1. Here I will provide a general overview of how 3rd party developers can interact with Magento code. There are 2 general ways to do this: customize Magento behavior and build your own behavior using Magento APIs. In this first part I will focus on customizing Magento behavior and in second part I will describe how 3rd party developers can build their extensions using Magento APIs.
  2. Let’s see example of extension. Here we have Magento application that stores data in database and represents it in UI. And
  3. Service is stateless by design: it does not rely on the result of the previous invocations of the service methods. It allows to use services in distributed environment. Separation of the Contracts on Service and Data Interfaces outlines stateless design of the service: input data is constructed, then it is passed to the service method. Besides, it makes it easy to map the service interface to corresponding operations on rest and soap
  4. ----- Meeting Notes (4/7/15 16:01) ----- Fix Useful links Combine summary New slide for references