The Clean Architecture in php


interface HelloInterface { public function



Download 2,26 Mb.
Pdf ko'rish
bet69/179
Sana24.06.2021
Hajmi2,26 Mb.
#100337
1   ...   65   66   67   68   69   70   71   72   ...   179
Bog'liq
The-Clean-Architecture-in-PHP-Kristopher-Wilson

interface
HelloInterface {
public function
getHello
();
}
class
EnglishHello
implements
HelloInterface {
public function
getHello
() {
return
"Hello"
;
}
}
class
SpanishHello
implements
HelloInterface {
public function
getHello
() {
return
"Hola"
;
}
}
class
FrenchHello
implements
HelloInterface {
public function
getHello
() {
return
"Bonjour"
;
}
}
These concrete
Hello
classes should be interchangeable. If we had a client class using them, the
behavior shouldn’t be affected by swapping them for one another:
class
Greeter
{
public function
sayHello
(HelloInterface
$hello
) {
echo
$hello
->
getHello
()
.
"!
\n
"
;
}
}
$greeter
=
new
Greeter();
$greeter
->
sayHello
(
new
EnglishHello());
$greeter
->
sayHello
(
new
SpanishHello());
$greeter
->
sayHello
(
new
FrenchHello());
While the output may be different, which is desired in this example, the behavior is not. The
code still says “hello” no matter which concrete instance of the interface we give it.
LSP in PHPUnit
We already discussed an example of the Liskov Substitution Principle when we discussed the
Open/Closed Principle
. The
ArrayDataSet
class we defined as an instance of PHPUnit’s
IDataSet
is returned from the
getDataSet()
method of DbUnit’s
DatabaseTestCase
abstract class.


SOLID Design Principles
37
class
MyTest
extends
DatabaseTestCase {
public function
getDataSet
() {
return new
ArrayDataSet([]);
}
}
The PHPUnit
DatabaseTestCase
class expects that the
getDataSet()
method will return an
instance of
IDataSet
, but doesn’t necessarily care what implementation you give it, so long as
it conforms to the interface. This is also referred to as design by contract, which we’ll talk about
in much more detail in
Dependency Injection
.
The key point of the Liskov Substitution Principle is that the behavior of the client code
shall remain unchanged. Regardless of what implementation of
IDataSet
we return from
getDataSet()
, it will result in the data set being loaded into the database for unit tests to be
run against. It doesn’t matter if that data came from CSV, JSON, XML, or from our new PHP
array class: the behavior of the unit tests remain the same.
Why does LSP matter?
In order for code to be easily refactorable, the Liskov Substitution Principle is key. It allows us to
modify the behavior of the program, by providing a different instance of an interface, without
actually modifying the code of the program. Any client code dependent upon an interface will
continue to function regardless of what implementation is given.
In fact, as we’ve already seen, the Liskov Substitution Principle goes hand-in-hand with the
Open/Closed Principle.

Download 2,26 Mb.

Do'stlaringiz bilan baham:
1   ...   65   66   67   68   69   70   71   72   ...   179




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish