Вопрос

В чем разница между написанием вспомогательных функций и помещением всего этого в один файл и написанием пакетов?Когда дело доходит до Perl, объектно-ориентированный метод лучше процедурного?

В основном ищу примеры сценариев, где объектно-ориентированный подход лучше процедурного.

Спасибо!

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

Решение

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

Использование модулей, объектно-ориентированных или процедурных, выгодно, если код будет использоваться повторно или если это просто большая база кода. Если у вас есть CMS с 10 различными сценариями CGI, которые все делают несколько одинаковых вещей, например, возможно, проверяют сеанс пользователя, тогда имеет смысл поместить этот код в отдельный модуль, а не переписывать его в каждом CGI. Если это 20-строчная функция, специфичная для этого скрипта, оставьте ее в том же файле.

Следует ли использовать объектно-ориентированный или процедурный подход, зависит от того, что вы делаете. Большинство людей в наши дни большую часть времени предпочитают ОО. Я согласен с ними, поскольку считаю, что это помогает вам думать о своем коде логически и разумно сгруппировать вещи, которыми будет легко управлять и обновлять позже.

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

Мне нравится помещать как можно больше кода в модули. В модулях хорошо то, что вы можете использовать инструменты тестирования Perl (proof и Test :: More), чтобы легко писать и управлять модульными тестами. Так что, если почти весь ваш код состоит из модулей, почти весь его можно тестировать.

Когда я пишу сценарий, мне нравится иметь тонкую оболочку, которая анализирует параметры конфигурации и командной строки в моем сценарии (возможно, с использованием таких модулей, как Config :: Any или Getopt :: Long). Сценарий также содержит подпрограмму usage. Затем я добавляю подпрограмму main. main очень прост:

родовое слово

Практически все вспомогательные подпрограммы будут находиться в одном или нескольких модулях.

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

родовое слово

легче понять, чем:

родовое слово

Весь лишний мусор упакован в удобные атрибуты объекта $foo и перемещается вместе, не загромождая вспомогательный вызов.

Конечно, можно:

родовое слово

Где $ foo - всего лишь обычный набор вкусовых предпочтений. Во всяком случае, это, по сути, то, что делает Perl OO. Вызывающий объект (имя объекта или класса) передается каждому методу в качестве первого аргумента. Вы теряете удобное пространство имен, наследование и вызовы динамических методов. Из трех затрат больше всего будет не хватать удобных пространств имен. ИМО, наследование переоценено и должно использоваться очень редко. Вызов динамических методов может быть удобен по тем же причинам, что и таблицы диспетчеризации.

Нет ничего, что нельзя было бы сделать в OO Perl, чего нельзя было бы сделать в процедурном Perl. Но OO делает некоторые вещи очень удобными.

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

sub main { мой $ cfg= shift;

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