Когда абстракция и модуляризация - плохая практика в программировании?

StackOverflow https://stackoverflow.com/questions/2338656

Вопрос

Только что увидел этот комментарий в опросе «Что вы используете JS Lib»

«@Xanti - Да, да, модуляризация и абстракция в программировании - это ужасная практика. Функции, которые называют другие функции? Расточительные».

И это оставило меня любопытным, потому что я использую рамки Кохана для библиотеки PHP и JQUERY для JavaScript.

Почему некоторые люди считают абстракцией и модульной практикой плохими практиками? Разве фреймворки и библиотеки не созданы для облегчения и ускорения разработки?

Вот ссылка на сайт к опросу

Это было полезно?

Решение

Я обнаружил, что слишком большая абстракция может быть опасной для вашей продуктивности:

  • Плохо выбранная абстракция может быть хуже, чем вообще никакой абстракции.

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

  • Если абстракция не соответствует относительно знакомой идее, новым членам команды может быть трудно учиться.

Абстракция - это не «бессмысленное благо»; Он существует, чтобы служить конкретным целям. Среди наиболее распространенных целей

  • К Защитите инварианты структуры данных

  • К инкапсулировать проектные решения, которые могут измениться

Мой самый большой опыт работы с абстракцией мешал на пути к нашему исследовательскому компилятору для С--. Анкет Было гораздо больше абстракции, чем студенты привыкли видеть в классе компилятора:

  • Целевая машина была абстрактной
  • Язык Ассамблеи был абстрактным
  • Призывные конвенции были абстрактными
  • В макете стека-каркаса использовалась необычная абстракция «блок»

Каждая из этих абстракций послужила важной целью для нашего исследования, но общий эффект заключался в том, что это было очень Трудно для новых студентов изучать компилятор. Итак, даже если первоначальный комментарий был в шутку, там там находятся Места, где абстракция может вызвать проблемы.

Другие советы

Microsoft управляет программой номерной лицензии на квалифицированные благотворительные организации.Если вы не занимались партнером Microsoft или Microsoft в отношении этого, это будет моя первая остановка.

Вы также можете проверить http://www.techsoup.org , программное обеспечение пожертвовано и может быть применено длятам.

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

Мы, вероятно, можем предположить, что комментатор не был серьезным.

Я не могу представить, чтобы кто -то, кто утверждает, что модуляризация и абстракция - плохая практика, и на самом деле это означает это.

Абстракция и модуляризация в целом хороши и необходимы. Там могут быть плохие абстракции, например: рамки, которые больше не поддерживаются или не дороги или просто не используются, или большие, или устаревшие, или 2 -й выбор, и так далее. Библиотека «рынок» в целом огромна. Какие библиотеки вы используете, зависит от обстоятельств и личных предпочтений.

Почему некоторые люди считают абстракцией и модульной практикой плохими практиками? Разве фреймворки и библиотеки не созданы для облегчения и ускорения разработки?

Изменения и обучение иногда тяжело - поэтому люди с этим борются. Если вы любите изучать этот вид, вы можете начать исследование по адресу: http://thedailywtf.com/ :-) Я бы просто игнорировал их и использовал библиотеки и рамки, когда они служат вам и делают вашего программиста лучше.

Разработчик будет утверждать, что абстракция или модуляризация - плохая практика, когда они способны или необходимы для взаимодействия с указанной абстракцией или модуляризацией и не могут понять ее цель или дизайн.

Когда каждая функция (и вспомогательные функции) находится в своем собственном модуле?

Я думаю, что это должно быть возможно, особенно если вы можете определить или контролировать ширину изображений. На примере макета они все та же ширина, которая должна облегчить жизнь.

Как насчет этого: для узкого вида экрана просто оставьте изображения, как они есть, и для более широкого вида экрана, поплавкуйте изображения влево, но дайте абзацы достаточно широкими, чтобы переместить их из области изображения , например:

img {
  float: left;
}
p {
  margin-left: 400px; /* Or however wide your images are */
}
.

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

Вот сработанный пример. С котятами. Играй с шириной вывода, и вы должны найти тот эффект, который я думаю, что вы ищете. Когда колонна уже более 400 пикселей, макет разрушается в один столбец. Работает нормально для меня в сафари и Firefox; Вам может понадобиться, позволяющий Media-Query, позволяющий сделать более старые версии IE работать, но макеты все еще должны работать в ней.

Хорошие абстракции часто используются

Хорошие абстракции ссылаются в 2 или более местах в вашем программном обеспечении.

Примеры:

  • Функции с 2+ сайтами вызовов.
  • Аннотация класса с 2+ конкретными классами.
  • Интерфейсы с 2+ реализациями.
  • Дженерики с 2+ экземплярами
  • Библиотеки с 2+ пользователями.
  • и т.п.

Абстракция, на которую ссылаются в 2 или более местах, помогает уменьшить размер кода, учитывая общие вещи, и это хорошо.

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

Некоторые примеры, когда появляются ненужные абстракции:

  • Написание объекта счастливого кода (интерфейсы и абстрактные классы везде, имеющие только 1 реализацию или конкрецию). Эти интерфейсы и абстрактные классы не являются необходимыми (в этот момент развития). Ягни принцип.
  • Кто -то строит «блестящий новый» интерфейс на старом, где новые функции после некоторого преобразования только называют старый интерфейс. Вы можете себе представить, какой большой беспорядок является результатом, если вы повторяете это несколько раз. В этом случае старые функции будут иметь один сайт вызовов, поэтому они не нужны. Вам необходимо перенести код из старых функций в новый или не писать новый и изменить старый.

Некоторые примеры действительно хороших абстракций:

  • Уровень аппаратной абстракции: предоставляет один интерфейс для приложений, поэтому им не нужно разрабатывать код для каждого типа аппаратного обеспечения.
  • Файловая система: Неважно, что вы используете FAT, NTFS, EXT3. Это позволяет использовать файлы и каталоги, драйвер файловой системы делает все остальное.
  • C Язык: Вам не нужно переносить свою программу для каждой архитектуры процессора. Просто составьте это.

Итак, чтобы ответить на ваш вопрос прагматически: Абстракции плохие, когда их ссылаются из менее 2 мест.

Что касается модуляризации, это субъективно: вы можете организовать свой код, что бы вы ни хотите. Если исходный код вашей библиотеки находится в одном исходном файле, он не делает его хуже, чем если бы вы нанесли взрыв, взорвете его несколько сотен файлов.

При оценке ваших абстракций как хорошие или плохие, всегда рассматривайте общую картину: весь проект, вся линия продуктов и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top