Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Biblioteka do wysyłania powiadomień z aplikacji opartej o Zend Framework
Forum PHP.pl > Inne > Oceny
batman
Oddaję pod waszą ocenę prostą oraz w pełni rozszerzalną bibliotekę do wysyłania wiadomości w aplikacji opartej o Zend Framework. Celem biblioteki jest dostarczenie jednolitego mechanizmu pozwalającego na wysyłanie powiadomień do użytkowników. Do powiadomień można zaliczyć informacje o rejestracji w serwisie, newsletter, informacje o odpowiedzi w obserwowanym temacie, link aktywacyjny, itd. W chwili obecnej biblioteka wspiera jedynie wysyłanie wiadomości e-mail.

Przykład użycia:
  1. $notification = new Batman_Notification_Sender_Mail($options['register']);
  2. // lub
  3. // $notification = Batman_Notification::factory('mail', $options['register']);
  4.  
  5. $notification->setTo('reciver_emial@some-domain.pl');
  6. $notification->userName = 'John Doe';
  7. $notification->serviceName = 'Uber service';
  8. $notification->send();


Przykładowa konfiguracja
  1. notification.register.template.templateName = "confirm_registration.phtml"
  2. notification.register.template.templatePath = APPLICATION_PATH "/layouts/notifications"
  3. notification.register.mail.from = "no-reply@some-domain.pl"
  4. notification.register.mail.subject = "Thank You for..."


Download, dokumentacja oraz issue tracker znajdziecie w serwisie github.
wookieb
Brak testów jednostkowych

Dla mnie brakuje bardziej jasnego oznaczenia, łatwego znalezienia typu powiadomienia jakie wysyłasz.
Aktualnie zdefiniowałeś po prostu ustawienia z Zend_Config i jedynym miejscem w którym wiem o powiadomieniu to klucz z tych ustawień. To za mało.

A co jeżeli np dałbyś Batman_Notification_Data ?
Oczywiście odpowiednio rozszerzone np
Batman_Notification_Data_Config -> czyta dane z configa
Batman_Notification_Data_RDBMS -> czyta dane z bazy relacyjnej
Batman_Notification_Data_Xml -> z xmla
itd, itd wedle uznania

Po co to? Żeby łatwiej z tego korzystać i na przyszłość nie pamiętać jakie to dane musimy ustawić w konfiguracji, xmlu itd.
Dodatkowo niezwykle przydatne gdybyś np chciał rejestrować listę powiadomień z informacją o statusie wysłania.

Batman_Notification_Sender_Abstract::addTemplateData - to nie jest na to miejsce, od tego user pobiera sobie View (getView) i sam te dane wstawia.
Podobnie z __set i __get, to nie jest na to miejsce bo ja jako programista spodziewałbym się że ustawiam jakieś dane konfiguracyjne notyfikatora a nie szablonowe.

Batman_Notification_Sender_Mail
Bardziej uniwersalne byłoby gdyby do klasy można było podać obiekt Zend_Mail ze względu na możliwość dodania dodatkowych opcji do e-maila. Aktualna implementacja jest ograniczająca.

Nie napisałeś za dużo o założeniach programistycznych biblioteki dlatego tak gdybam.

Reszta ok. Ocena 7/10 za względu na brak jasnej informacji o typie powiadomienia.
batman
Cytat
Brak testów jednostkowych
Wiedziałem, że to będzie pierwsza rzecz, do której będą uwagi wink.gif Testy się pojawią.

Cytat
Dla mnie brakuje bardziej jasnego oznaczenia, łatwego znalezienia typu powiadomienia jakie wysyłasz.
Aktualnie zdefiniowałeś po prostu ustawienia z Zend_Config i jedynym miejscem w którym wiem o powiadomieniu to klucz z tych ustawień. To za mało.

Tutaj wydaje mi się, że źle to opisałem.

Cytat
A co jeżeli np dałbyś Batman_Notification_Data ?
Oczywiście odpowiednio rozszerzone np
Batman_Notification_Data_Config -> czyta dane z configa
Batman_Notification_Data_RDBMS -> czyta dane z bazy relacyjnej
Batman_Notification_Data_Xml -> z xmla
itd, itd wedle uznania

Po co to? Żeby łatwiej z tego korzystać i na przyszłość nie pamiętać jakie to dane musimy ustawić w konfiguracji, xmlu itd.
Dodatkowo niezwykle przydatne gdybyś np chciał rejestrować listę powiadomień z informacją o statusie wysłania.

Zastanawiałem się nad czymś podobnym, ale byłoby to nic innego jak powielenie Zend_Config. W chwili obecnej można przekazać obiekt Zend_Config, tablicę lub skorzystać z setterów.

Cytat
Batman_Notification_Sender_Abstract::addTemplateData - to nie jest na to miejsce, od tego user pobiera sobie View (getView) i sam te dane wstawia.
Podobnie z __set i __get, to nie jest na to miejsce bo ja jako programista spodziewałbym się że ustawiam jakieś dane konfiguracyjne notyfikatora a nie szablonowe.

Nad tym też się długo zastanawiałem i doszedłem do wniosku, że lepiej żeby to klasa powiadomień była proxy dla szablonu. Nic jednak nie stoi na przeszkodzie, aby stworzyć własny obiekt widoku i przekazać do klasy powiadomień.

Cytat
Batman_Notification_Sender_Mail
Bardziej uniwersalne byłoby gdyby do klasy można było podać obiekt Zend_Mail ze względu na możliwość dodania dodatkowych opcji do e-maila. Aktualna implementacja jest ograniczająca.

Tutaj miałem ogromny dylemat jak to rozwiązać i wybrałem najprostszy ze sposobów. Niemniej masz rację. Powinna być możliwość przekazania gotowego już obiektu Zend_Mail (lub dowolnego innego implementującego metodę send).

Cytat
Nie napisałeś za dużo o założeniach programistycznych biblioteki dlatego tak gdybam.

Reszta ok. Ocena 7/10 za względu na brak jasnej informacji o typie powiadomienia.

Racja. Za chwilę dodam opis.
wookieb
Cytat(batman @ 14.03.2011, 20:03:19 ) *
Zastanawiałem się nad czymś podobnym, ale byłoby to nic innego jak powielenie Zend_Config. W chwili obecnej można przekazać obiekt Zend_Config, tablicę lub skorzystać z setterów.

Nie jest to powielenie. Jest to idealny sposób aby np osoby NIE korzystające z Zend_Config mogły podać własne źródło notyfikatorów (właście chociażby z bazy). Aktualnie programista musi robić obiekty atrapy tworzące Zend_Config.

Idealnie by było gdyby istniał tak obiekt danych notyfikatora zawierający w sobie tworzenie Sendera. Przykład
  1. class Notyfikator_Rejestracja extends Batman_Notification_Data_Xml {
  2. public function __construct() {
  3. parent::__construct('sciezka/do/pliku/xml/z/danymi/notyfikatora.xml');
  4. }
  5. }
  6.  
  7. $note = new Notyfikator_Rejestracja();
  8. $note->setTo('ziom@wp.pl');
  9. $node->send();

Obiekt notyfikacji sam zadbałby sobie o utworzenie odpowiedniego Sendera, tytułu itd itd itd
Oczywiście wszystko wedle... założeń, upodobań

Cytat(batman @ 14.03.2011, 20:03:19 ) *
Nad tym też się długo zastanawiałem i doszedłem do wniosku, że lepiej żeby to klasa powiadomień była proxy dla szablonu. Nic jednak nie stoi na przeszkodzie, aby stworzyć własny obiekt widoku i przekazać do klasy powiadomień.

Tak, ale dotykasz innego poziomu abstrakcji. Rodzi to następujące problemy
1) Przy zmianie implementacji Zend_View musisz zmienić taką implementacją wszędzie indziej = rodzisz dodatkowe niepotrzebne zależności
2) Programista używający Zend_View raz może skorzystać z metod notyfikatora, ale przy innych musi i tak operować bezpośrednio na Zend_View co jest pewną niejasnością i niekonsekwencją.
Siedząc w AS zauważyłem, że po prostu nie warto robić takich prostych ułatwień bo tylko zaciemniają kod i w niczym nie pomagają.

Jedna spora wada.. Brak Method Chaining :/
batman
Cytat
Idealnie by było gdyby istniał tak obiekt danych notyfikatora zawierający w sobie tworzenie Sendera.

Masz rację. W ten sposób będzie to o wiele bardziej elastyczne.

Cytat
Tak, ale dotykasz innego poziomu abstrakcji. Rodzi to następujące problemy
1) Przy zmianie implementacji Zend_View musisz zmienić taką implementacją wszędzie indziej = rodzisz dodatkowe niepotrzebne zależności
2) Programista używający Zend_View raz może skorzystać z metod notyfikatora, ale przy innych musi i tak operować bezpośrednio na Zend_View co jest pewną niejasnością i niekonsekwencją.
Siedząc w AS zauważyłem, że po prostu nie warto robić takich prostych ułatwień bo tylko zaciemniają kod i w niczym nie pomagają.

Tutaj niestety nie ma złotego środka. Tak, czy siak uzależniam się od systemu szablonów, którego zadaniem jest zebranie danych i przekucie ich na jednolitą treść wysyłaną do użytkownika. Wydaje mi się, że najlepiej będzie jak usunę możliwość dodawania/pobierania obiektu widoku, a dostęp do niego ograniczę do metod notyfikatora.

Cytat
Jedna spora wada.. Brak Method Chaining :/

Fakt. O tym w zupełności zapomniałem.
Zyx
Fajny pomysł na bibliotekę - czekam na dalsze nowości. Z przyczepień to oczywiście brak testów oraz na sztywno zakodowana zależność od Zend_View, która praktycznie uniemożliwia podpięcie jakiegoś innego systemu szablonów.
batman
Testy się pojawią jak tylko biblioteka nabierze bardziej solidnego kształtu. Odnośnie systemu szablonów to codziennie mam inny pomysł na rozwiązanie tego problemu i jak na razie nie zdecydowałem się na jedno rozwiązanie.


edit

Rozważyłem wszystkie uwagi i przepisałem bibliotekę na bardziej modułową. W chwili obecnej do obiektu "powiadamiacza" należy przekazać obiekt "wysyłacza" oraz obiekt szablonu danych.W celach demonstracyjnych przygotowałem po jednej klasie każdego typu. Mimo iż są to przykładowe klasy, nic stoi na przeszkodzie, aby z nich korzystać.

Skorzystanie z powiadamiacza mocno się zmieniło i wygląda następująco
  1. $sender = new Batman_Notification_Sender_ZendMail();
  2. $sender->addTo('our_client@some-domain.pl')
  3. ->setSubject('Super-duper newsletter');
  4.  
  5. $dataTemplate = new Batman_Notification_DataTemplate_ZendView();
  6. $dataTemplate->setTemplatePath(APPLICATION_PATH . '/layouts/mail_templates')
  7. ->setTemplateName('mail_template.phtml');
  8. $dataTemplate->userName = 'John Doe';
  9.  
  10. $notification = new Batman_Notification($sender, $dataTemplate);
  11. $notification->send();
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.