[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SOLID
Страницы: 1, 2, 3, 4
twin
SOLID

Это аббривиатура нескольких основополагающих принципов стратегии:
S (Single responsibility principle) Принцип единственной обязанности
O (Open/closed principle) Принцип открытости/закрытости
L (Liskov substitution principle) Принцип подстановки Барбары Лисков
I (Interface segregation principle) Принцип разделения интерфейса
D (Dependency inversion principle) Принцип инверсии зависимостей


Подробности ниже.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Оглавление
Принцип единственной обязанности. Более подробно
На каждый класс должна быть возложена одна-единственная обязанность.

Простыми словами. Посмотрите на картинку:
user posted image

На первый взгляд этот ножик очень удобен. Все в нем есть. Но вот нож ли это? Может это ножницы, не понятно, что первично.
А теперь попробуйте заставить ими парикмахера кого-нибудь постричь. Он вас пошлет в эротическое путешествие.
Так вот, принцип единственной обязанности гласит, что если это ножницы, то это ножницы. И нечего их приспосабливать к распиловке дров.

Пример кода. Явное нарушение принципа:
class claspКnife
{
public function cutВread()
{
echo 'Я умею резать хлеб<br>';
}

public function sawWood()
{
echo 'Я умею пилить дрова<br>';
}

}


$knife = new claspКnife();
$knife->cutВread();
$knife->sawWood();

И всё по правилам:
class claspКnife
{
public function cutВread()
{
echo 'Я умею резать хлеб<br>';
}

public function openСanned()
{
echo 'Я умею открывать консервы<br>';
}

}


$knife = new claspКnife();
$knife->cutВread();
$knife->openСanned();


Вообще говорят, что нужно придерживаться принципа "дели, пока делится". Но разумный предел тоже нужен. Я не зря класс обозвал claspКnife (складной нож). Если был бы просто Кnife, то открывашка была бы неуместна. Но если нам нужен именно складишок для пикника на троих, самое оно. А плоскогубцы, ножницы и пилка для ногтей, это другие обязанности.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Оглавление
Принцип открытости/закрытости Более подробно
Этот принцип двусторонний. Один касается разработчиков, второй - пользователей. Для разработчиков - закрытые к переопределению методы применяются в крайне редких, исключительных случаях. В моей практике такого не встречалось, но гипотетически это может выглядеть так:
class ABC
{
public function run()
{
echo 'Ай какой классный фреймворк<br>';;
}

final public function getCopyright()
{
echo 'Это ABS-Framework, разработан форумчанами phpforum.su  <br>';
echo 'И нечего пытаться выдать его за свой';
}
}


class WTF extends ABC
{
public function getCopyright()
{
echo 'Это WTFramework. Вася Пупкин ©';
}
}


$wtf = new WTF(); // Fatal error
В остальных случаях все свойства и методы должны быть доступны для переопределения в наследниках.

С другой стороны, со стороны пользователя, изменять суещствующий класс нельзя. Можно только унаследовать его и там творить что угодно.
Вот так нельзя:
class claspКnife
{

public function cutВread()
{
echo 'Я умею резать хлеб<br>';
/*
* Залезли в исходник и добавили:
*/

echo 'И еще делать цикрумизацию';
}
}


А вот так сколько угодно:
class Кnife
{
public function cutВread()
{
echo 'Я умею резать хлеб<br>';
}
}


class largeMachete extends Кnife
{
public function penisNax()
{
echo 'Я умею делать цикрумизацию<br>';
}
}


$sclp = new largeMachete();
$sclp->cutВread();
$sclp->penisNax();


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.