![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Już parę razy nad tym myślałem, w końcu zrobiłem tak jak kilka osób polecało ale dalej mam niesmak....
Mam w swoim systemie dajmy na to 5 dużych klas bazowych bez których żadna inna pomniejsza klasa nie może działać (np. dbase, log, settings,...). No i teraz dajmy na to, że tworzę nową, małą klasę - formularz. Obiektów tej klasy będzie dużo bo dużo zazwyczaj jest formularzy na stronce. No i co za tym teraz idzie - przy każdym utworzeniu obiektu formularz musze podawać w konstruktorze 5 klas głównych:
O wiele lepsze byłoby podanie w konstruktorze klasy formularz globalsów:
W tym momencie kod raczej zyskuje niewiele tracąc. Globalsy nie mogą być aż takie złe. -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) ![]() ![]() |
Dosc dziwaczny sposob tworzenia formularzy a na dodatek mozna obejsc i to i global poprzez zwykle & czyli referencje, nie wspomne o innych rozwiazaniach jak np. tablica obiektow a nie 5 obiektow czy instancji w parametrach funkcji itp.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Stwórz kontener na te klasy które muszą istnieć i tyle. Taka klasa w wielu systemach nazywa się Kontekstem i to ja przekazujesz jako parametr.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
no ale na jedno wychodzi prawda? macie na myśli rejestr ? No i oczywiście klasa formularz to tylko przykład.
Ten post edytował Black-Berry 8.07.2008, 22:55:12 -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie, nie... nie rejestr - rejestr z definicji jest klasą globalną, ja mam na myśli to co napisałem Kontekst - czyli obiekt agregujący inne obiekty (tablice etc) w umiejętny sposób udostępniony w systemie, ale bron Boże globalny.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
To już lepiej pobierać przez singletona zestaw tych klas wewnątrz klasy Formularz niż robić globala. Generalnie kiedy szukam kodu zewnętrznego, to widząc słówko global (gdziekolwiek)... przechodzę do następnej biblioteki - nie ufam po prostu programiście, który pisze kod z globalami. Może i singleton nie jest dużo lepszy, ale przynajmniej jest jakimś punktem zaczepienia, zdradza istnienie jakiegoś układu klas, który da się przewidziec i kontrolować w normalnym, obiektowym kodzie.
Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@cysiaczku, nie mogę się z Tobą zgodzić... singleton to pójście na łatwiznę IMO, lepiej jest dobrze zaprojektować system i udostępniać to co chcemy, tam gdzie chcemy.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 206 Pomógł: 18 Dołączył: 6.03.2006 Skąd: Szczecin Ostrzeżenie: (0%) ![]() ![]() |
kazdy zrobi jak mu wygodniej, ale globalsy sa z definicji zle. wystarczy ze gdzies sie zapomnisz i nadpiszesz zmienna globalna i po zawodach. mozesz tez zrobic FormularzFactory, te klase zainicjowac z podanymi obiektami/kontekstem/jak-wolisz i z niej pobierac formularze.
aczkolwiek sadze, ze to zalezy od konkretnego przykladu, i jesli na przyklad chcesz tworzyc formularze, to nie rozumiem, czemu chcesz wszystko do niej wpychac. moim zdaniem formularza samego nie towrzysz, musisz tam wkladac jakies pola, wiec jesli po to ci sa obiekty $dbase, $settings, $session to samo przypisywanie wartosci tez odbedzie sie poza klasa formularz. $log - logujesz raczej w obsludze nadchodzacego wypelnionego formularza, a nie w samym formularzu, bo obsluga samego formularza to kwestia przegladarki, a nie PHP. tak wiec, podaj konkretny przyklad jak chcesz cos rozwiazac, moze po prostu da sie cala logike danej klasy jakos lepiej rozpatrzyc, a nie tylko na sile wpychac w nia wszystkie obiekty ![]() -------------------- Wrzasq.pl
Tworzenie stron i aplikacji internetowych. Chillout Development - tworzenie stron i aplikacji internetowych. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) ![]() ![]() |
Singleton nie pozwoli ci miec kilu kopii kiedy zajdzie potrzeba i moze powodowac konflikty w testowaniu.
Rozwiazaniem jest jak wspomnialem odwolanie przez referencje do tablicy obiektow czyli moze byc tzw. Rejestr. Sam Rejestr mozesz -dopiero wtedy- w tzw. Singletonie zamknac bo tu S sie przyda. I to wszystko. A zaleznosc klasy formularza od tych co wymieniles jest kompletnie nie na miejscu. Ten post edytował cbagov 9.07.2008, 00:40:36 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Mi właśnie chodziło (w domyśle) o rejestr, którego instancja dostępna byłaby przez singleton. To to samo, co przekazanie obiektu kontekstu przez np. konstruktor. Bardzo często, gdy przewiduję, że w którymś momencie nie dam rady przekazać obiektu, lub nie po prostu byłoby to bardzo niewygodne, to na wszelki wypadek robię z klasy Singleton (no i musi być wiadome, że to jest obiekt jednorazowej inicjacji), ale tam, gdzie mogę przekazuje go jako parametr. Ewentualnie, umieszczam w rejestrze ;]
W Symfony, bez sfContext::getInstance() ciężko byłoby przeżyć z hermetycznymi partialami ;] Pozdrawiam. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Popieram rozwiązanie z kontekstem, oczywiście na wzór symfony. W wersji 1.1 nie jest to już singleton, ponieważ można mieć kilka kontekstów. Przy dobrym zaprojektowaniu singleton nie bedzie potrzebny, tylko należy go dobrze przekazywać przez obiekty.
Cytat W Symfony, bez sfContext::getInstance() ciężko byłoby przeżyć z hermetycznymi partialami ;] Hę? A $sf_context nie działa? ![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jak działa 'kontext'? Mógłby ktoś pokazać jak to się pisze na szybko ? Czy może to to samo co rejestr ?
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zakładam, że połknąłeś bakcyla MVC.
Wyobraź sobie, że masz kod
Sęk w tym, że system powolujac do zycia akcje, model i widok powinien w jakis sposb im przekazywac obiekt kontekstu (np. w konstruktorze) i tym sposobem masz udostepnione klasy do logowania, pobierania polaczenia do bazy, pobierania modelu czy generatora linkow tylko tam gdzie to potrzebne, a nie globalnie. Mam nadzieje, ze kod wydaje sie zrozumialy - wszystko jest po polsku, bo roznie to bywa z angielskim (bez obrazy). Ten post edytował LBO 9.07.2008, 10:58:23 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
gorzej się czyta po polsku niz po angielsku jak dla mnie ale dzięki za pomoc
![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 20:19 |