Путь разработчика    

Является ли Monkey patching хорошей практикой программирования?

eda2480d

Содержание

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

Простой пример выглядит следующим образом:

Python

В примере выше, если SomeClass? еще не имеет метода talk(), теперь он 🙂 Если раньше у него был метод talk(), новый код заменил старое определение метода.

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

Следующая обезьяна-пример Python исправляет значение Pi из стандартной математической библиотеки.

Python

Выход

Python

ПОСЛЕ РЕСТАРТА

Python

Выход

Python

Плюсы и минусы

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

Это считается плохим, потому что это означает, что определение объекта не полностью или точно не описывает, как оно себя ведет. Кроме того, это создает несоответствие между исходным кодом на диске и наблюдаемым поведением. Это может быть очень запутанным при устранении неполадок, особенно для кого-либо, кроме автора monkeypatch. Таким образом, исправление обезьян - это своего рода антиобщественное поведение.



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Как ClassLoader работает на Java?

Java Classloader является частью JRE (Java Runtime Environment), которая динамически загружает классы Java в JVM (виртуальная машина Java). В частности, Ja...

01 12 2020 23:43:49

Плюсы игрового движка Unity и его особенности

Вступление перед серией обучающих уроков по Unity 5...

30 11 2020 3:44:47

C# 4.0 Полное руководство (Герберт Шилдт)

В книге "C# 4.0 Полное руководство" Г. Шилдта по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все осно...

29 11 2020 6:29:40

Как отобразить содержимое XML файла в Unity 5

В сегодняшнем уроке мы разберем как отобразить содержимое XML файла в Unity 5 и заполнить им класс персонажа. Для этого мы воспользуемся System.Xml...

28 11 2020 20:57:45

Язык программирования C# (Хейлсберг А. 2012)

Перед вами — четвертое издание главной книги по языку C#, написанной легендой программирования — Андерсом Хейлсбергом, архитектором C#, Delphi и Turbo Pasc...

27 11 2020 3:19:51

Что такое JVM и является ли она независимой от платформы?

Java Virtual Machine (JVM) - это спецификация, предоставляющая среду выполнения, в которой может быть запущен Java-байт-код (файлы .class). JVM - платформа...

26 11 2020 5:48:18

Классификация языков программирования: кратко

Классификация языков программирования. Сейчас существует огромное количество самых разных языков программирования. По некоторым подсчетам, всего их более чем 120....

25 11 2020 23:33:22

Различные режимы обработки файлов, поддерживаемые Python

Файл представляет собой некоторую информацию или данные, которые сохраняются (сохраняются) на запоминающих устройствах компьютера. Python предоставляет осн...

24 11 2020 4:52:15

Использование полос прокрутки для выбора цветов RGB и HLS в C#

Пример Преобразование между цветами RGB и HLS модели в C# объясняют, как преобразовать цветные модели RGB и HLS. В этом примере используется аналогичный ко...

23 11 2020 6:13:37

Изучаем HTML, XHTML и CSS (Эрик Фримен, Элизабет Робсон)

Устали от чтения книг по HTML, которые понятны только специалистам в этой области? Тогда самое время взять в руки новое издание " Изучаем HTML, XHTML и CSS....

22 11 2020 19:16:41

Чтение / преобразование InputStream в строку в Java

Строка - это последовательность символов, используемых для хранения данных типа «Halo World!». Поток - это класс ввода / вывода, который используется для ч...

21 11 2020 9:47:33

Что такое Externalizable в Java?

Externalizable - это интерфейс, который позволяет вам определять пользовательские правила и собственный механизм для сериализации. Прежде чем понимать инте...

20 11 2020 12:25:32

Нарисуйте кривую Безье в C#

В этом примере показано, как использовать метод DrawBezier класса Graphics для рисования кривой Безье. Кривая Безье соединяет две конечные точки с гладкой...

19 11 2020 9:49:24

NumericUpDown и использование десятичных значений в C#

Большинство разработчиков знают, что элемент NumericUpDown позволяет пользователю выбирать число, но мало кто знает, что он может обрабатывать десятичные з...

18 11 2020 19:43:36

JavaScript. Подробное руководство (Дэвид Флэнаган)

Пятое издание бестселлера "Javascript. Подробное руководство" полностью обновлено. Рассматриваются взаимодействие с протоколом HTTP и применение технологии...

17 11 2020 12:44:26

LINQ. Карманный справочник (Джозеф Албахари, Бен Албахари)

Справочник посвящен технологии LINQ (Language Integrated Query) — новой функциональной возможности языка C# и платформы .NET Framework, которая позволяет п...

16 11 2020 15:51:57

HashMap в Java

В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса...

15 11 2020 14:41:13

Сравните изображения, чтобы найти различия в C#

В этом примере вы можете сравнивать изображения, чтобы убедиться, что они одинаковые. Когда вы выбираете два изображения для сравнения и нажмите кнопку Go,...

14 11 2020 2:48:40

В чем разница между поточной и многопроцессорной обработкой?

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

13 11 2020 12:43:52

Основы программирования в Delphi 7 (Н. Б.Культин)

Книга является руководством по программированию в среде Delphi 7. Описывается весь процесс разработки программы: от конструирования диалогового окна до орг...

12 11 2020 2:14:21

Операции Java ArrayList

Программирование Java для начинающих... ArrayList - одна из самых гибких структур данных из коллекций Java. Arraylist - это класс, который реализует интерф...

11 11 2020 7:22:14

Что такое singleton класс в Java?

В объектно-ориентированном программировании шаблон Singleton ограничивает создание экземпляра класса и гарантирует, что в JVM (виртуальная машина Java) сущ...

10 11 2020 8:41:22

Что такое ассоциативный массив? Как мы его используем? JavaScript

Ассоциативный массив - это просто набор пар значений ключа. Когда мы определяем объект, JavaScript автоматически создает массив для этого объекта. Это позв...

09 11 2020 4:55:21

Как установить pip в Windows?

pip - система управления пакетами, используемая для установки и управления пакетами программного обеспечения, написанными на Python. Это замена easy_instal...

08 11 2020 1:33:37

Самоучитель C++ (Г. Шилдт)

Необходимость в переработке и дополнении предыдущего издания книги вызвана в первую очередь выходом в свет долгожданного для программистов всего мира едино...

07 11 2020 17:53:12

Обработка событий изменения значения NumericUpDown в C#

Сообщение Сделать NumericUpDown использовать десятичные значения в C# показывает, как вы можете сделать десятичные значения для элемента управления Numeric...

06 11 2020 7:10:39

Как создать строку Java из содержимого файла?

И Л И Использование класса сканера Следующий код Java прочитает весь файл в String. Пример Примечание: useDelimiter ("\ Z") задает разделитель в конце файла...

05 11 2020 14:21:12

Итерации над элементами массивов и списков в C#

Вы можете использовать цикл foreach для перебора элементов массивов, списков, коллекций и других объектов с методом GetEnumerator. Этот цикл часто больше п...

04 11 2020 17:33:42

Стандартные исключения в C#

Пример Используйте try блоки блокировки для защиты от непредвиденных ошибок в C# объясняют, как поймать исключение, и вкратце упоминает, что вы можете испо...

03 11 2020 12:16:17

Используйте объект ImageAttributes для применения общих цветовых тонов к изображению в C#

В этом примере используются методы, аналогичные тем, которые описаны в post Используйте объект ImageAttributes для преобразования изображения в оттенки кра...

02 11 2020 11:25:43

Как реализовать наследование в Python?

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

01 11 2020 0:31:40


Parse error: syntax error, unexpected ',' in /home/users/9/9165884745/domains/flash-mx.ru/lessons/926.php on line 69