2010-06-12 6 views
9

To jest bardziej typu use-case pytania ... ale też na tyle ogólne, aby być szerzej stosowane:Perl OO ramy i program do projektowania - Moose i wewnątrz-out obiektów Conwaya (klasa :: STD)

Krótko mówiąc, pracuję nad modułem, który jest mniej więcej otoką linii poleceń; W naturalny sposób. Bez wchodzenia w zbyt wiele detali (chyba, że ​​ktoś ich chce), nie ma w tym systemie szalonej złożoności, ale naturalne było posiadanie w tych ramach trzech lub czterech obiektów. Na koniec, jest to raczej open source'owy temat, niż moduł z kilkoma programistami w tej samej firmie, która nad nim pracuje.

Najpierw wdrożony OO użyciu Class :: Std, ponieważ Perl Best Practices (Conway, 2005) to dobry argument za dlaczego używać wewnątrz-out obiektów. Pełna kontrola nad dostępnymi atrybutami itd., Właściwa enkapsulacja itp. Również jego projekt jest zaskakująco prosty i sprytny.

lubiłem go, ale potem zauważyłem, że nikt nie używa tego; w rzeczywistości wydaje się, że Conway sam już tego nie poleca?

Więc przeniosłem się do wszystkich ulubionych, Moose. Jest łatwy w użyciu, chociaż sposób na przesadę jest odpowiedni do tego, co chcę robić. Główną wadą jest to, że ma mnóstwo zależności między modułami, które zmuszają użytkowników mojego modułu do pobierania ich wszystkich. Minusem jest to, że ma znacznie więcej funkcji, niż naprawdę potrzebuję.

Co to są zalecenia? Niedogodności dla deweloperów, zmuszając ich do korzystania z potencjalnie przestarzałego modułu lub zmuszają każdego użytkownika modułu do pobrania Łosia i wszystkich jego zależności?

Czy istnieje trzecia opcja dla odpowiednich ram Perl OO to popularne, ale żadna z tych dwóch?

+3

Definiowanie "zabitych"? Łoś ma 4 zależności nie w klasie :: Std, z których największy to Klasy :: MOP, który jest cały punkt Łosia. – perigrin

+0

Zapominasz o zależnościach zależności. :-) – Emmel

+4

A slew -> http://deps.cpantesters.org/?module=Moose;perl=latest Zniżka na wszystkie podstawowe moduły, 16 nie jest taka zła, ale jej nie ma 4. – Schwern

Odpowiedz

4

Cóż, jest Mouse, który jest podobny do Moose, ale bez wszystkich zależności (i niektórych funkcji). Zaczyna się też nieco szybciej. Nie próbowałem tego sam, ale ogólnie jest to well thought of.

+2

Łoś jest cudowny. Użyj myszy zamiast myszy. # wiersz 1 w "Opisie" –

+1

Tak, użyj aplikacji Moose do rozwijania aplikacji, ale używaj myszy podczas jej wdrażania, zwłaszcza, że ​​jest to aplikacja z wiersza poleceń, coś, co skorzystałoby na poprawie wydajności myszy. Zobacz Dowolne :: Łoś. – MkV

+4

Nie, nie rób tego. Nigdy nie używaj Any :: Moose. – jrockway

5

Aby być całkowicie fair, skoro praktycznie wszystko ciekawe w tych dniach w świecie ma Perl Moose gdzieś jako zależność, nie widzę, że był dużo dług dla innych „twórców fellow Perl”.

Szanse są już zainstalowany, jak mówimy!

Edycja: Niektóre statystyka:

Moose jest obecnie oceniany na 65. miejscu na „Najbardziej zależało na” liście modułów Aliases top 100 ponad 1637 pakietów w zależności od niego. To prawie tak dużo jak rzeczy takie jak Time::HiRes, i więcej niż DBI, i nie sądzę, że jesteś tak samo skłonny kwestionować w zależności od tego czy ty?

+0

Napisany moduł nie jest przeznaczony dla programistów hard-core, ale dla sys adminów i tym podobnych. Jest to sortowanie w linii poleceń/system automatyzacji. Jeśli coś Moose jest być może korzystne dla programistów, ale PITA dla ludzi, którzy muszą zainstalować swoje zależności. – Emmel

+1

Mysz, Moose minus rogi, jest * bardzo * światło na zależnościach, i jest opcjonalnie skompilowany z XS. – MkV

+0

Ponadto, lista Alias ​​jest trochę ciężka dla Łosia z powodu dodania zależności (opcjonalnych) klas DBIx na modułach Moose * dodawanych do META.yml dla tego projektu. – MkV

5

Obecnie akceptowana "nowoczesna struktura Perl OO" to Moose. Powiedziałbym, żeby użytkownicy go pobrali, lub możesz połączyć go z modułami w instalacji przy użyciu PAR::Packer.

Cytując „But I can't use CPAN” (... bo moi użytkownicy nie będą chcieli zainstalować rzeczy):

Zakładając, jesteś po prostu obsługi użytkownicy paczkę, następnie Module :: Install zapewnia rozwiązanie - jeśli umieścisz skrypt w skrypcie /, a następnie zrobisz w swoim Makefile plik

install_script(glob 'script/*'); 
auto_install; 
PL, wtedy nie tylko "make install" umieści twój skrypt gdzieś przydatnym, ale 'make installdeps' wywoła cpan (lub jeśli jest obecny, cpanplus), aby zainstalować wszystkie brakujące zależności dla ciebie.

4

Aby dodać do istniejących drobnych odpowiedzi ...

Część tego, co zostało zasugerowane w PBP nie jest zła rada, ale Perl maszeruje dalej. Kiedy został napisany, przedmioty na wylot były nową gorliwością. Teraz Łoś wchłonął wszystkie. Istnieje MooseX::InsideOut, który daje moc Łośowi z całkowitą enkapsulacją klasy :: Std, ale jeśli nie pracujesz z niezdyscyplinowanymi programistami, to naprawdę nie jest to konieczne.

Te cechy łosia, których teraz nie potrzebujesz, w końcu będziesz ich potrzebować. Nawet jeśli nie potrzebujesz ich wszystkich, za pomocą Moose nie będziesz musiał używać i uczyć się kolejnego systemu OO za każdym razem, gdy potrzebujesz interesującej funkcji. I nie daj Boże, że potrzebujesz DWÓCH funkcji w TYM SAMYM CZASIE!

+0

Istnieje kilka aplikacji, w których konieczne jest, że nie mają nic wspólnego z "niezdyscyplinowanymi programistami". –

+0

@Evan Unikanie prywatnych konfliktów klucza z podklasami przychodzi na myśl. O czym myślałeś? – Schwern

+0

... Uchwyty plików lub jakikolwiek inny niejasny obiekt, który może zostać pobłogosławiony, ale prawdopodobnie nie powinien i nie może dołączać do niego danych. –

0

Istnieje również Perl Object Module :: InsideOut aktywnie utrzymywana od 2010.

rodzaj poprzednik Moose, lub być jasne: rozwój rozpoczął się niezależnie w tym samym czasie rozpoczął Łoś,

Wiem, że istnieje, ale go nie używałem.

Powiązane problemy