Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Faza projektowania - Generator Formularzy, Diagramy UML, wzorce projektowe,
kaniagandzowski
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

Ostrzeżenie: (0%)
-----


Witam chcę poprosić was o rady co do budowy aplikacji i sugestie w jaki sposób mają być generowane elementy formularza z godnie z programowaniem obiektowym. W tym konkretnym przypadku.

W skrócie napisze co ma robić aplikacja i z jakich bibliotek będę korzystać.

Chcę stworzyć generator, który by pozwalał na proste tworzenie formularza z wykorzystaniem AJAX.
Zasada działania polegała by na wprowadzeniu wymaganych pól formularza, nadawanie reguł na dane pola, filtry i wybranie akcji.

Reguły nakładane na pola formularza:
- pole wymagane
- wartość typu liczby
- własne reguły
- upload plików itd.
Akcje:
- Zapisanie do bazy danych
- Wygenerowanie PDF
- wysłanie Emaila
- wykonanie dowolnego skryptu itd.
Filtry
- czyszczenie wartości ze spacji na początku i końcu wartości (polecenie trim) itd.

Wygląd formularza był by tworzony przy pomocy dowolnego programu typu Dreamware lub FrontPage
, który powstały szablon by zwierał tylko odwołania do zmiennych ( $labelImie, $imie ). Zmienne zawarte w szablonie zostaną zamienione na kod html dla danego pola np.
  1. <input id="ddd" name="ddd">
.

Do realizacji mojego zadania chcę maksymalnie wykorzystać gotowe rozwiązania aby nie odkrywać na nowo już dawno znanych wzorców projektowych i bibliotek. Tak więc będę wykorzystywać :
- FrameWork Code Igniter
- Xajax (biblioteka AJAX)
- PEAR – HTML_QuickForm

Do tematu podszedłem w ten sposób że każde dowolne rodzaj pola jaki może wystąpić w formularzu jest osobną klasą (np. pola typu input generowane są przez klase input).

Reguły są nakładane w taki sam sposób jak to robione jest w HTML_QuickForm elementy w sumie też podobnie ale tworze klasy ponieważ każdy element czy to reguła wymaga jakiś specyficznych parametrów zanim zostanie wygenerowany element czy nałożona rugała.

Np. tworząc własną regułę pozwalająca na wypełnienie formularza w danym czasie. Do takiej klasy należy przekazać kilka parametrów takich jak data rozpoczęcia i zakończenia publikacji formularza. A chce też w późniejszym czasie dodawać proste klasy dodające nowe funkcje. A że program ma generować formularze, musi wiedzieć o jakie parametry należy poprosić użytkownika.

Po niżej przedstawiam diagram klass.
Diagram przedstawia tylko klasy odpowiedzialne za tworzenie formularza, która sama się nie złoży i należy jeszcze dodać klasy odpowiedzialne za składanie obiektów w całość (klasy odpowiedzialne za wyświetlanie strony w której graficznie dodawało się pola do formularza - dla mnie to będzie najgorsze, ponieważ zawsze mam problemy z złożeniem w całość. Często kod staje się mniej czytelny i sam się w nim gubię (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ).

Proszę też uwagi co do samego diagramu. Na pewno strzałki pokazujące relacje pomiędzy klasami nie są poprawne ponieważ nie do końca poznałem, sens praktycznego stosowania danych relacji jak złożenia, skojarzenia, generalizacja itd.

Co do diagramu. Mam problemy z dodawaniem polskich znaków tak więc, w diagramie, gdzie nie gdzie są polskie znaki. Wynika to iż program ma przypisane skróty klawiszowe, np ą maże całą zawartość pola.

(IMG:http://www.okun.nazwa.pl/classdiagram2.jpg)
Narzędzia jakie stosuje to:
- Zend Studio
- StarUML
- DBDesigner

Ten post edytował kaniagandzowski 21.08.2007, 19:46:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kaniagandzowski
post
Post #2





Grupa: Zarejestrowani
Postów: 72
Pomógł: 1
Dołączył: 2.06.2006

Ostrzeżenie: (0%)
-----


Ja nie zamierzam pisać w php4. Wiem, że Code Igniter jest w php4 i HTML_QuickForm. Ale korzystam z nich ponieważ najłatwiej zacząć od tego (dla osób początkujących. Jeszcze nigdy nie programowałem tak poważnie - w sensie spróbowania napisania coś porządnie niż pisania kodu proceduralnie. Zawsze było to krótko trwałe zainteresowanie, nie próbując poznać tematu dogłębniej).

Tak pozatym nie muszę pisać swoje klasy w frameworku w php4. Mogę spokojnie pisać w PHP5 i te klasy będą działać z tymi bibliotekami napisanymi w php4 (mam namyśli Framework oraz PEAR QuickForm). Pod warunkiem że idea pracy programu zostanie szczegółowo zaplanowana. Bo jeśli tego nie zrobię to podczas pisania stanie się kod skomplikowany, w którym będę stosować tymczasowe rozwiązania dla danego problemu.

Sprawdziłem też czy AJAX będzie mógł spokojnie działać z HTML_QuickForm. Nie było żadnych problemów tylko zastosowałem małą sztuczkę polegającą na przekazaniu wartości wywołania funkcji
  1. xajax.getFormValues(nazwaFormularza)
po wysłaniu formularza przez AJAX do do jakieś metody z wartościami formularza, które to wartości są przekazane do $_POST.

Wiem że już powstaje QuickForm w wersji PHP5 ale jest to wersja, która dopiero powstaje. Próbowałem zainstalować lecz nie powiodło. Wolałem pozostać przy starej wersji do której jest dużo dokumentacji.

Oczywiście to co napisałem mogę się mylić, nie mieć świadomości na jakie problemy na potkam podczas pisania lub jakieś bzdury pisać. I dlatego proszę o skomentowanie czy mój pomysł jest najprostszy w sensie utrzymania kodu i możliwości rozbudowania oraz czy poprawnie narysowałem Diagram z godnie UML 2.0

Wiem że są wzorce projektowe poznałem kilka ale to wszystko teorię poznałem. Martwię się czy nie są klasy za mocno powiązane pomiędzy sobą.
Do przekazywania jakie pola mają powstać oraz jakie reguły dana ma mieć element (pole formularza), służyć będzie do tego klasa AtributesForm.

Obiekt z klasy AtributesForm będzie zawierać dane do stworzenia formularza takie jak:
- nazwa pola, typ pola i inne parametry potrzebne do wygenerowania danego elementu
- reguły walidacji dla danego pola
- nazwa formularza, komentarz dla formularza (aby ułatwić opisywanie formularzy)

Taki obiekt AtributesForm będzie przekazywany do metody createElement obiektu pochodzenia klasy Formularz (nie wiem jak fachowo to nazwać
  1. <?php
  2. $jakiśObiekt = new Formularz;
  3. ?>
).

Ta metoda będzie zawierać jakieś funkcje ładujące określone klasy na podstawie danych przekazanych tej metodzie. I wywoływać będzie po kolei każdą klasę Element dla danego typu np. input, data czy upload i do niej przekazywał potrzebne parametry a ta zwracać będzie obiekt typu HTML_QuickForm. Który obiekt będzie przechowywany w obiekcie Formularz w zmiennej arrElement (zmienna będzie zawierać wszystkie elementy).
W sumie nie chcę dużo zmieniać działania samego QuickForm.

Reguły i w sumie elementy zawierać się będą w zmiennej $objForm w klasie Formularz tak jak się robi formularze przy pomocy QuickForm. Poniżej prosty przykład tworzenia formularza w HTML_QuickForm
  1. <?php
  2. require_once "HTML/QuickForm.php";
  3.  
  4. $form = new HTML_QuickForm('frmTest', 'get');
  5. $form->addElement('header', 'MyHeader', 'Wypelnij dane:');
  6. $form->addElement('text', 'MyTextBox', 'Twoje imie:');
  7. $form->addElement('reset', 'btnClear', 'Wyczysc');
  8. $form->addElement('submit', 'btnSubmit', 'OK');
  9.  
  10. $form->addRule('MyTextBox', 'Twoje imie jest wymagane!', 'required');
  11.  
  12. if ($form->validate()) {
  13. # Jezeli poprawnie wypelniono formularz -> FREEZE
  14. $form->freeze();
  15. }
  16. $form->display();
  17. ?>


Widać, że obiekt $form zawiera wszystkie elementy i reguły tylko do niego są rzucane to co nam jest potrzebne.
Działanie programu chce podobnie zrobić. Zapamiętanie tych wszystkich elementów i reguł będą zawarte w obiekcie Formularz, który zostanie serializowany do bazy danych.
Starałem się napisać w miarę prosto jak tylko potrafię.

Na pewno to co piszę może się zdarzyć jakiś błąd, odnośnie wiedzy jaką posiadam o danych bibliotekach i Frameworku tzn. w jaki są zbudowane itd. ogólnie Informacje techniczne.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.09.2025 - 14:19