the de constructed - magento · the law of demeter (lod) or principle of least knowledge is a...
TRANSCRIPT
![Page 1: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/1.jpg)
![Page 2: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/2.jpg)
The de constructedMagento module
![Page 3: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/3.jpg)
James CowieTechnical Team Lead Inviqa
t/@jcowie gh/jamescowie
2016 Magento Master mover
![Page 4: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/4.jpg)
deconstruct...verb | de·con·struct \ˌdē-kən-ˈstrəkt\ |
To take apart or examine in order to reveal the basis or composition of ?often with the intention of
exposing biases, flaws, or inconsistencies— Wayne Karlin
![Page 5: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/5.jpg)
deconstruction in software
![Page 6: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/6.jpg)
The Law of Demeter (LoD)Or principle of least knowledge is a design guideline
for developing software, particularly object-oriented programs. In its general form, the LoD is a
specific case of loose coupling. 1
1 Robert C. Martin
![Page 7: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/7.jpg)
![Page 8: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/8.jpg)
What is decoupled code ?
![Page 9: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/9.jpg)
Tight couplingTight coupling is when a group of classes are highly
dependent on one another. This scenario arises when a class assumes too many responsibilities, or
when one concern is spread over many classes rather than having its own class.10
10 https://en.wikipedia.org/wiki/Coupling(computerprogramming)
![Page 10: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/10.jpg)
Loose couplingLoosely coupled code is where each of a systems
modules has, or makes use of, little or no knowledge of the definitions of other separate modules11
11 https://en.wikipedia.org/wiki/Loose_coupling
![Page 11: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/11.jpg)
High Cohesion Modules with high cohesion tend to be preferable, because high cohesion is associated with several desirable traits of software including robustness,
reliability, reusability, and understandability. 3
3 https://en.wikipedia.org/wiki/Cohesion(computerscience)
![Page 12: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/12.jpg)
Low CohesionIn contrast, low cohesion is associated with
undesirable traits such as being difficult to maintain, test, reuse, or even understand.13
13 https://en.wikipedia.org/wiki/Cohesion(computerscience)
![Page 13: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/13.jpg)
Don't Repeat Yourself⌘
⌘ Cut: Command ⌘ - x, Copy: Command ⌘ - c, Paste: Command ⌘ - v
![Page 14: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/14.jpg)
Traits
![Page 15: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/15.jpg)
Composition
![Page 16: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/16.jpg)
⎏Interfaces
![Page 17: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/17.jpg)
Code TimeCreate an out of stock command that emails store admin using
Mandrill because that never changes does it :)
![Page 18: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/18.jpg)
<?php namespace MageTitans\Emailer\Commands;
use Symfony\Component\Console\Input\InputInterface;use Symfony\Component\Console\Input\InputArgument;use Symfony\Component\Console\Input\InputOption;use Symfony\Component\Console\Output\OutputInterface;use Symfony\Component\Console\Command\Command;
class EmailCommand extends Command{ protected function configure() { $this->setName('magetitans:email'); $this->setDescription('Send all email out to people about how much stock is remaining'); parent::configure(); }
protected function execute(InputInterface $input, OutputInterface $output) { $emailer = new Mandrill('SOMEAPIKEY');
$message = array( 'subject' => 'Out of stock email', 'from_email' => '[email protected]', 'html' => '<p>You are being notified about product stock information!.</p>', 'to' => array(array('email' => '[email protected]', 'name' => 'Recipient 1')), 'merge_vars' => array(array( 'rcpt' => '[email protected]', 'vars' => array( array( 'name' => 'FIRSTNAME', 'content' => 'Recipient 1 first name'), array( 'name' => 'LASTNAME', 'content' => 'Last name') ))));
$template_name = 'Products';
// load all products $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$collection = $productCollection->create() ->addAttributeToSelect('*') ->addAttributeToFilter('stock_status', 0) ->load();
$productHtml = '';
foreach ($collection as $product) { $productHtml .= '<p>' . $product->getName() . '</p>'; }
$template_content = array( array( 'name' => 'main', 'content' => 'Hi *|FIRSTNAME|* *|LASTNAME|*, thanks for signing up.'), array( 'name' => 'footer', 'content' => 'Copyright 2016.')
);
$emailer->messages->sendTemplate($template_name, $template_content, $message);
$output->writeln("Email is sent for out of stock products"); }}
![Page 19: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/19.jpg)
![Page 20: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/20.jpg)
class EmailCommand extends Command{ protected function configure() { .. }
protected function execute(InputInterface $input, OutputInterface $output) { ... }}
![Page 21: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/21.jpg)
...$emailer = new Mandrill('SOMEAPIKEY');
$message = array( 'subject' => 'Out of stock email', 'from_email' => '[email protected]', 'html' => '<p>You are being notified about product stock information!.</p>', 'to' => array(array('email' => '[email protected]', 'name' => 'Recipient 1')), 'merge_vars' => array(array( 'rcpt' => '[email protected]', 'vars' => array( array( 'name' => 'FIRSTNAME', 'content' => 'Recipient 1 first name'), array( 'name' => 'LASTNAME', 'content' => 'Last name')))));
$template_name = 'Products';...
![Page 22: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/22.jpg)
...$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productCollection = $objectManager->create( 'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
$collection = $productCollection->create() ->addAttributeToSelect('*') ->addAttributeToFilter('stock_status', 0) ->load();
$productHtml = '';
foreach ($collection as $product) { $productHtml .= '<p>' . $product->getName() . '</p>';}...
![Page 23: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/23.jpg)
...$template_content = array( array( 'name' => 'main', 'content' => 'Hi *|FIRSTNAME|* *|LASTNAME|*.'), array( 'name' => 'footer', 'content' => 'Copyright 2016.')
);
$emailer->messages->sendTemplate( $template_name, $template_content, $message);
$output->writeln("Email is sent for out of stock products");
![Page 24: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/24.jpg)
![Page 25: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/25.jpg)
Attempt 1→ All logic enclosed in a single method
→ No reuse→ Hard to understand→ Hard to change
![Page 26: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/26.jpg)
Issues with the class→ Fragility
→ Cost of change→ Technical debt
![Page 27: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/27.jpg)
Fragility→ No tests
→ Mixed business logic and framework
![Page 28: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/28.jpg)
Cost of change→ Email may be used throughout the app
→ Hard to understand→ Becomes "That class"
![Page 29: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/29.jpg)
Technical debt→ Cost of code over time
→ Impact on speed of change
![Page 30: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/30.jpg)
What is our method actually doing ?→ Building vars for email sending
→ Getting all products that are out of stock→ Sending the email
![Page 31: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/31.jpg)
![Page 32: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/32.jpg)
EmailCommand.php
Becomes→ Model/Emailer.php
→ Model/OutOfStockProducts.php→ Commands/EmailCommand.php
![Page 33: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/33.jpg)
Model for Emailernamespace MageTitans\BetterEmailer\Model;
class Emailer{ public function setTemplate(array $templateData) { ... }
public function sendEmail($ApiKey, $templateName, $templateContent, $message) { ... }}
![Page 34: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/34.jpg)
Model for OOS productsnamespace MageTitans\BetterEmailer\Model;
class OutOfStockProducts{ public function getOutOfStockProducts() { ... }}
![Page 35: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/35.jpg)
Emailer Command<?php namespace MageTitans\BetterEmailer\Commands;...
class EmailCommand extends Command{ protected function configure() { ... }
protected function execute(InputInterface $input, OutputInterface $output) { $products = new \MageTitans\BetterEmailer\Model\OutOfStockProducts(); $emailer = new \MageTitans\BetterEmailer\Model\Emailer();
$emailTemplate = $emailer->setTemplate(['name' => 'james', 'lastname' => 'cowie', ]); $emailer->sendEmail( 'KEY','products',$emailTemplate, $products->getOutOfStockProducts() );
$output->writeln("Email has been sent"); }}
![Page 36: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/36.jpg)
Getting better→ Separate class and methods
→ Easier to test→ Easier to understand
→ Extracted from the framework
![Page 37: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/37.jpg)
![Page 38: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/38.jpg)
Attempt 3→ Interfaces
→ Dependency Injection
![Page 39: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/39.jpg)
Interfaces AKA Service Contracts<?php
interface Emailer{ public function send($templateName, $templateContent, $message); public function setVariables(array $templateData);}
![Page 40: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/40.jpg)
Why are interfaces important ?→ Contract for other developers to follow
→ Aid in testing→ Backwards Compatibility breaks
→ Type safe checking
![Page 41: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/41.jpg)
SOLID1
S – Single-responsiblity principleO – Open-closed principle
L – Liskov substitution principleI – Interface segregation principleD – Dependency Inversion Principle
1 Robert C. Martin
![Page 42: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/42.jpg)
SOLIDO – Open-closed principle
This simply means that a class should be easily extendable without modifying the class itself
![Page 43: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/43.jpg)
Implement our Interfaces"Model/Emailers/Mandrill.php"
<?php namespace MageTitans\ImprovedEmailer\Model\Emailers;
use MageTitans\ImprovedEmailer\Api\EmailerInterface;
class Mandrill implements EmailerInterface{ public function setVariables(array $templateData) { ... }
public function send($templateName, $templateContent, $message) { ... }}
![Page 44: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/44.jpg)
Back to our command/** @var \MageTitans\ImprovedEmailer\Api\EmailerInterface */protected $emailer;
/** @var OutOfStockProducts */protected $outOfStockProducts;
public function __construct( \MageTitans\ImprovedEmailer\Api\EmailerInterface $emailer, OutOfStockProducts $ofStockProducts){ $this->emailer = $emailer; $this->outOfStockProducts = $ofStockProducts; parent::__construct('ImprovedEmail');}
![Page 45: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/45.jpg)
Injecting an interface ?Trust me just go with it :)
![Page 46: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/46.jpg)
Executing our commandprotected function execute(InputInterface $input, OutputInterface $output){ $templateVars = $this->emailer->setVariables(['name', 'james']); $this->emailer->send( 'Products', $templateVars, $this->outOfStockProducts->getOutOfStockProducts() );}
![Page 47: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/47.jpg)
Welcome di.xml<config> <preference for="MageTitans\ImprovedEmailer\Api\EmailerInterface" type="MageTitans\ImprovedEmailer\Model\Emailers\Mandrill" /></config>
![Page 48: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/48.jpg)
SOLIDD - Dependency Inversion principle
Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they
should depend on abstractions.
![Page 49: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/49.jpg)
Mandrill changes its pricing and wewant to change implementation quick ?
→ Create a new Emailer client→ Update di.xml
![Page 50: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/50.jpg)
PHPClient<?php namespace MageTitans\ImprovedEmailer\Model\Emailers;
use MageTitans\ImprovedEmailer\Api\EmailerInterface;
class PHPClient implements EmailerInterface{ public function send($templateName, $templateContent, $message) { return mail($templateContent['email'], $templateContent['subject'], $message); }
public function setVariables(array $templateData) { return [ 'name' => $templateData['name'], 'email' => $templateData['email'], 'subject' => $templateData['subject'] ]; }}
![Page 51: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/51.jpg)
Update di.xml</config> <preference for="MageTitans\ImprovedEmailer\Api\EmailerInterface" type="MageTitans\ImprovedEmailer\Model\Emailers\PHPClient" /></config>
![Page 52: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/52.jpg)
Why would we do this ?→ Each class now does a single thing well
→ Each class is easier to test→ Interfaces enforce a common public Api
→ DI allows dependencies to be mocked and made visible
![Page 53: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/53.jpg)
Where else can we see this ?→ Magento 2 Core
→ Hexagonal Architecture→ DDD ( Domain Driven Design )
![Page 54: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/54.jpg)
DisclaimerNot all Magento 2 core implements service
contracts yet
![Page 55: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/55.jpg)
Customerinterface CustomerInterface { public function getId(); public function setId($id); public function getGroupId(); public function setGroupId($groupId); .....}
![Page 56: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/56.jpg)
Customer di.xml<config> ... <preference for="Magento\Customer\Api\Data\CustomerInterface" type="Magento\Customer\Model\Data\Customer" /> ...</config>
![Page 57: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/57.jpg)
So to use Customerprotected $customer;
public function __construct( \Magento\Customer\Api\Data\CustomerInterface $customer){ $this->customer = $customer;}
public function doSomething(){ echo $customer->getName();}
![Page 58: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/58.jpg)
Recap on Interfaces→ Should never change between major versions
→ They are still WIP in Magento 2→ If there is a interface use it!!
![Page 59: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/59.jpg)
Recap on Dependency Injection→ Inject interfaces where available→ Use DI over ObjectManager
→ Generate DI in production mode
![Page 60: The de constructed - Magento · The Law of Demeter (LoD) Or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its](https://reader033.vdocuments.site/reader033/viewer/2022042300/5ecb1eb3388bb72f511b68eb/html5/thumbnails/60.jpg)
Source Codehttps://github.com/jamescowie/magetitansmini-
example