[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: уровни абстракции чистый код
rapik
Приветствую.
Чистый код создание, анализ и рефакторинг [2019] Роберт Мартин

64 страница

Так как же? Сколько операций выполняет функция — одну или три? Обратите
внимание: три этапа работы функции находятся на одном уровне абстракции
под объявленным именем функции

Если функция выполняет только те действия, которые находятся на одном уров-
не
под объявленным именем функции, то эта функция выполняет одну операцию

В конце концов, функции пишутся прежде всего для разложения более крупной
концепции (иначе говоря, имени функции) на последовательность действий на
следующем уровне абстракции


Вопрос:

как понимать уровень абстракции, что это вообще такое?



Valick
Понимай это как матрёшку. Ты матрёшку можешь поставить или положить и тебя не волнует то, что внутри неё. Ты абстрагируешся от этого. Вместе в с этим матрёшки находящиеся внутри тоже станут или лягут как и внешняя матрёшька. А теперь достань всё матрёшки и поставь их рядом (на один уровень абстракции). Что бы их поставить или положить тебе надо сделать это с каждой из них.

А вообще не надо начинать изучение РНР с "чистого кода". Там тонны словоблудия, надо умень извлекать полезное.

_____________
Стимулятор ~yoomoney - 41001303250491
rapik
А вообще не надо начинать изучение РНР с "чистого кода". Там тонны словоблудия, надо умень извлекать полезное.

я не начинаю, это доп материал.

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

_____________
Стимулятор ~yoomoney - 41001303250491
rapik
т.е. уровни абстракции это сущности реализации?
rapik
или же эти сущности находятся на одном уровне абстракции?
Valick
Цитата (rapik @ 13.06.2022 - 13:44)
т.е. уровни абстракции это сущности реализации?

Так и есть.
Цитата (rapik @ 13.06.2022 - 13:45)
или же эти сущности находятся на одном уровне абстракции?

Да эти сущности на одном уровне
Сам парсер можно разложить на получение информации (граббер) и обработку информации.
Обработчику не важно как информация получена, грабберу не важно как эту информацю будут обрабатывать дальше.
Граббер и обработчик будут находиться на одном уровне абстракции, но они оба будут являться подуровнем парсера.

Но можно пойти и другим путём.
Выстроить граббер, обработчик и сохранение на один уровень абстракции. Тут уж сам разработчик решает как поступить.

_____________
Стимулятор ~yoomoney - 41001303250491
rapik
угу, т.е. если автор чистого кода разделял функцию, он получается делил ее логически по типу задачи. Идейная реализация была на уроне абстракций техническая на уровне функций?

Как уровни абстракций соотносятся с принципом ООП абстракция?
Valick
Цитата (rapik @ 13.06.2022 - 14:27)
Как уровни абстракций соотносятся с принципом ООП абстракция?

Уровни абстракции кода - это инкапсуляция в ООП. Про абскракцию ООП я правлильно понимаю, что речь об абстрактных классах? Если да, то никак. Это разные сущности, просто в обоих случаях используется слово абстракция.

_____________
Стимулятор ~yoomoney - 41001303250491
rapik
Уровни абстракции кода - это инкапсуляция в ООП.

мммм не похоже, я так понимаю абстракция в ООП это выделение конкретной сущности без ее итоговой реализации, а уровни абстракции это фактически встроенный в эту идею механизм проектирования программы на уровне идей, м?
brevis
// Пример 1. Один уровень абстракции, вызываются высокоуровненвые методы
function getAllLinksOnPage($url) {
$pageContent = getUrlContent($url);
$links = extractLinksFromHtml($pageContent);
return $links;
}

// Пример 2. Тоже один уровень абстракции, вызываются низкоуровненвые методы
function getAllLinksOnPage($url) {
$ctx = stream_context_create([
'http' => [
'timeout' => 5,
]
]);

$pageContent = file_get_contents($url, false, $ctx);

if (preg_match("...", $pageContent)) {
// ...
return $links;
}

return [];
}

// Пример 3. Разные уровни абстракции
function getAllLinksOnPage($url) {
$pageContent = getUrlContent($url);

if (preg_match("...", $pageContent)) {
// ...
return $links;
}

return [];
}


_____________
Чатик в телеге
Быстрый ответ:

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