Подтвердить что ты не робот

Moose OOP или стандартный Perl?

Я собираюсь написать несколько сканеров для веб-сайта, идея заключается в том, что на сайте будут использоваться некоторые внешние скрипты Perl для извлечения данных с других сайтов, мой дизайн (очень абстрактным образом) будет написать пакет, скажем:

package MyApp::Crawler::SiteName

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

В любом случае, делая длинный короткий, мой вопрос: почему (или почему нет...) я должен предпочесть Moose над стандартным OO Perl?

Спасибо,

4b9b3361

Ответ 1

Пока я не согласен с введением Flimzy ( "Я не использовал Moose, но я использовал эту вещь, которая использует Moose" ), я согласен с его посылкой.

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

Однако ваш вопрос является открытым (как указывали другие). Нет ответа, который будет общепринятым как истинный, иначе коэффициент усыновления Муз будет намного выше, и я бы не ответил на это. Я могу только объяснить, почему я предпочитаю использовать Муса каждый раз, когда я начинаю новый проект.

Как цитирует Сид из документации Moose. Основная цель Moose - быть более чистым, стандартизованным способом делать то, что программисты, ориентированные на объект Perl 5.0, были выпущены. Он обеспечивает ярлыки, чтобы сделать правильное дело проще, чем делать неправильную вещь. Что-то, что, на мой взгляд, отсутствует в стандартном Perl. Он предоставляет новые инструменты, облегчающие абстрагирование проблемы с более легкими решениями, и обеспечивает надежный API интроспекции и метапрограммирования, который пытается нормализовать beastiary, который взламывает внутренние элементы Perl из пространства Perl (то есть, что я использовал для обозначения как "Символьная таблица колдовства" ).

Я обнаружил, что мое естественное ощущение того, сколько кода "слишком много", было уменьшено на 66% с тех пор, как я начал использовать Moose [^ 1]. Я обнаружил, что я более легко следую хорошим принципам дизайна, таким как инкапсуляция и скрытие информации, поскольку Moose предоставляет инструменты, чтобы упростить их работу. Поскольку Moose автоматически генерирует большую часть котельной плиты, которую я обычно должен был бы выписать (например, методы доступа, методы делегата и другие подобные вещи), я нахожу, что легче быстро ускорить то, что я делал шесть месяцев тому назад. Я также нахожу, что пишу гораздо менее хитрый код, чтобы сэкономить несколько нажатий клавиш, чем у меня несколько лет назад.

Можно написать чистый, прочный, элегантный объектно-ориентированный Perl, который не использует Moose [^ 2]. По моему опыту это требует больше усилий и самоконтроля. Я обнаружил, что в тех случаях, когда проект требует, я не могу использовать Moose, мой обычный объектно-ориентированный код выиграл от привычек, которые я выбрал из Moose. Я думаю об этом так же, как я бы подумал о написании его с Moose, а затем напечатал в три раза больше кода, чем я записываю то, что, как я ожидаю, будет генерировать Moose для меня [^ 3].

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

[^ 1]: Раньше я начинал думать о моем дизайне, когда я достиг ~ 300 строк кода в модуле. Теперь я начинаю беспокоиться о ~ 100 линиях.

[^ 2]: Код Миягавы в Твигги - отличный пример, который я читал только сегодня.

[^ 3]: Это не универсально. Существует несколько историй о людях, которые пишут менее ремонтируемый, ужасный код, перейдя за борт с инструментами, которые предоставляет Moose. Плохие программисты могут писать плохой код в любом месте.

Ответ 2

Вы найдете ответ, почему использовать Лось в Документации.

Основная цель Moose - сделать Perl 5 объектно-ориентированным программированием проще, более последовательным и менее утомительным. С Мусом вы можете больше думать о том, что хотите, и о механизме ООП.

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

Ответ 3

Используйте Moose. Это из того, что я написал прошлой ночью (используя Mouse в этом случае). Должно быть довольно очевидно, что он делает, что он проверяет и что он устанавливает. Теперь представьте, что вы пишете эквивалентное сырое OO. Это не очень сложно, но начать читать гораздо сложнее, а не только код, а намерение, которое может быть самой важной частью при чтении кода, который вы не видели раньше или через некоторое время.

has "io" =>
    is => "ro",
    isa => "FileHandle",
    required => 1,
    handles => [qw( sysread )],
    trigger => sub { binmode +shift->{io}, ":bytes" },
    ;

В прошлом году я написал большой тестовый класс, который также использовал функциональность handles для повторной отправки тонны методов в основной объект Selenium/WWWMech. Исчезновение такого типа шаблонов может действительно помочь в удобочитаемости и техническом обслуживании.

Ответ 4

Я никогда не использовал Moose, но я использовал Catalyst и имею большой опыт работы с OO Perl и не-OO Perl. И мой опыт говорит мне, что лучший способ использования - это метод, который вам наиболее удобно использовать.

Для меня этот метод стал "чем угодно, кроме Catalyst":) (Это не значит, что люди, которые любят и клянутся Катализатором, ошибаются - это просто мой вкус).

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

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

Ответ 5

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

С Moose я вижу, что в Perl возможен неосложненный ООП. Это похоже на возврат OOP Perl к управляемому уровню.

(да, я признаю, мне не нравится дизайн объекта perl.)