2008-10-08 10 views
6

W naszym produkcie mamy duży plik narzędzi, który wymagamy (zróbmy) na początku wielu naszych plików. Czy istnieje powód, aby nie przekształcić go w moduł? Na przykład, zamiast robić to:Czy powinienem zmienić mój serwis narzędziowy na moduł utilities.pm?

do '../dbi_utilities.pl'; 
our ($db,$user,$pw,$attr); 
my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr"; 

nie może po prostu to zrobić ?:

use AppUtil; 
my $Data = AppUtil->connect(); 

Jakie są plusy i minusy każdego stylu?

Odpowiedz

8

Jedynym powodem, aby tego nie robić, jest czas.

Oznacza to, że wyczyszczenie interfejsu zajmie trochę czasu, a także wszystkim aplikacjom wywołującym korzystanie z nowego interfejsu.

To, co będzie cię kosztować w czasie, teraz będzie więcej niż uzupełnione, gdy zaczniesz używać właściwych testów ("make test" lub "./Build test" lub po prostu "dowiedz się ...") i być w stanie sprawdź, czy twoje zmiany niczego nie zepsują, zanim je sprawdzisz. Więc, za wszelką cenę, przekonwertuj. Tylko pamiętaj, że to nie jest darmowy zysk.

2

Utworzenie modułu z niego znacznie zwiększa wytrzymałość. Obecnie wiele rzeczy nieformalnie zależy od siebie, ale te zależności nie są od razu oczywiste.

Umożliwia także importowanie tylko części narzędzi.

6

Po do(), ładujesz i kompilujesz plik utilities.pl za każdym razem, co może powodować problemy, jeśli zrobisz() to więcej niż raz. Ponadto podczas kompilacji wykonywany jest kod use, który pozwoli szybciej zakończyć program lub nawet przetestować go pod numerem perl -wc.

Wreszcie, zachowanie go w pakiecie pozwala chronić jego przestrzeń nazw, co może być pomocne w miarę rozwoju projektu.

Radziłbym mocno zamienić twój utilites.pl w odpowiedni pakiet Perla, który jest załadowany use.

1

Otrzymujesz wszystkie fajne moduły, enkapsulację, funkcje specyficzne dla modułów i tak dalej.

Należy jednak zauważyć, używając składni use. tworzenie obiektu dla przestrzeni nazw AppUtil i wywoływanie podprogramu connect. dla twoich narzędzi.

Musisz mieć także 1; na końcu twojego pliku.


Klepanie inną metodą oznacza, że ​​nie trzeba zmieniać żadnego kodu, nie trzeba dodawać 1 na końcu.

Wszystkie operacje "do", "użyj" i "wymagaj" importowania, ale kod zakresu, który jest w nich (z wyjątkiem nazwanych podprogramów, ponieważ nie można ich ukryć).

+0

Robienie czegoś w module nie daje magicznie żadnych funkcji.Musisz poprawnie go zakodować. Zauważ również, że nie musisz i * nie * importuj automatycznie. –

+0

@brian: Twoje prawo. To jest tho programista do kodowania w funkcjonalności. –

Powiązane problemy