Presentation in Bulgarian about SOLID design principles.
Presented at PlovDev Conference 2014, ProxiAD office in Bulgaria (multiple times) and at an event for Woman Who Code in Sofia in 2017
2. kgolev.com@kotseto
Програмирам > 10 години
Професионалните ми интереси
включват Аgile, DevOps и Test
automation. Горд баща на две деца.
Обичам да пиша, блога ми се намира на
kgolev.com
4. kgolev.com@kotseto
S ingle Responsibility Principle
O pen-Closed Principle
L iskov Substitution Principle
I nterface Segregation Principle
D ependency Inversion Principle
6. kgolev.com@kotseto
Инструменти или идеи
Помагат да взимаме по-добри решения
Приложими са в много и различни ситуации
Помагат да комуникираме по-добре
Ако има нещо, което ни харесва или не ни харесва в
нашия дизайн, много често можем да намерим
принцип, с който да го обясним
11. kgolev.com@kotseto
class TaxiService {
void orderTaxi(String phone, String address) {
if (phone.length() < 7) {
throw new BadPhoneNumberException
(“Phone not valid!");
}
taxiPool.sendTaxi(address);
smsClient.sendMessage(phone,
"Your taxi is on the way!");
}
12. kgolev.com@kotseto
class TaxiService_V2 {
void orderTaxi(String phone, String address) {
if (phone.length() < 7
&& phone.length() > 12) { // <-- mistake
throw new BadPhoneNumberException
(“Phone not valid!");
}
taxiPool.sendTaxi(address);
smsClient.sendMessage(phone,
“Your taxi is on the way!");
}
14. kgolev.com@kotseto
public class … {
public boolean phoneIsNotValid(String phone) {
return phone.length() < 7
|| phone.length() > 12;
}
}
15. kgolev.com@kotseto
class TaxiService_V3 {
void orderTaxi(String phone, String address) {
if (smsService.phoneIsNotValid(phone)) {
throw new BadPhoneNumberException
("Phone not valid!");
}
taxiPool.sendTaxi(address);
smsService.sendMessage(phone,
“Your taxi is on the way!");
}
16. kgolev.com@kotseto
• Кода ви е дълъг и прави много неща
• Трудно ви е да обясните какво прави едно
парче код
• Името на метода/класа който пишете няма
общо с кода, който разработвате
55. kgolev.com@kotseto
Opel dieselCar = new Opel(new OpelDieselEngine());
dieselCar.start();
Opel gasolineCar = new Opel(new OpelGasolineEngine());
dieselCar.start();
57. kgolev.com@kotseto
• Промяната или добавяне на модул води до
промени на модулите, които седят над него
(смяна на колата заради нов акумулатор)
• Модули на по-високо ниво (кола), зависят от
точно определени модули на ниско ниво
(двигател/акумулатор)