konto usunięte

Temat: model, helper czy klasa?

Chce napisać program zgodnie z regula "fat models and skinny controllers". Zastanawiam się, gdzie umieścić metody do obróbki danych. Modele posiadaja metody zwiazane z zapytanismi do bazy, moze wiec dla przejrzystości lepiej takie metody umieścić w helperach albo osobnych klasach. Jak uważacie?
Marcin B.

Marcin B. Webdirector,
Wspólwłasciciel
Contip.net

Temat: model, helper czy klasa?

IMHO helpery raczej są do widoku. Obróbka danych to dość ogólne pojęcie, jeśli dotyczy tych konkretnych danych modelu to do modelu.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Za komunikację z bazą danych generalnie zwykle odpowiada warstwa DAL (Data Access Layer), model zawiera logikę - czyli to co określiłeś jako obróbkę danych. Oczywiście sposób warstwowania aplikacji zależy od tego jak będzie ona duża i co chcesz osiągnąć.

konto usunięte

Temat: model, helper czy klasa?

Zend w zasadzie utożsamia model z ORM-em, stad moje pytanie. View helpery sa do widoku ale action helpery to już chyba niekoniecznie, he?
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Action helpery to są po prostu kawałki kodu kontrolera, które się często powtarzają. Kontroler nie ma natomiast nic wspólnego z "obróbką danych" jego zadaniem jest tylko analiza requestu i wywołanie odpowiednich metod modelu, które wszystko robią. Jeżeli chcesz stosować zasade Fat Model, to nie utożsamiaj modelu z bazą danych...
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Wojciech Soczyński:
Action helpery to są po prostu kawałki kodu kontrolera, które się często powtarzają. Kontroler nie ma natomiast nic wspólnego z "obróbką danych" jego zadaniem jest tylko analiza requestu i wywołanie odpowiednich metod modelu, które wszystko robią. Jeżeli chcesz stosować zasade Fat Model, to nie utożsamiaj modelu z bazą danych...

w kwestii wzorców to: faktycznie "fat model" to DDD czyli "cały biznes w Modelu", w kwestii danych fizycznych polecam wzorzec "repository"... np. tu opis
http://www.pzielinski.com/?p=281
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

W ogóle te całe helpery są wg mnie bezsensownym tworem i jakąś dziwną protezą nie wiadomo na co ;)
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Wojciech Soczyński:
W ogóle te całe helpery są wg mnie bezsensownym tworem i jakąś dziwną protezą nie wiadomo na co ;)

ja też tego nie kumam :)
Marcin Drwięga

Marcin Drwięga Programista PHP

Temat: model, helper czy klasa?

Temat znaleziony w Google, bo sam chciałem poznać konkretną definicję helpera. To zabawne, używam go a dalej dokładnie nie wiem po co to istnieje:) No ale wypowiem się, a nuż się komuś przyda?

Helper wg mnie to klasa, która służy do stworzenie jednego obiektu pod jedno konkretne zadanie. Ważne, by klasa dotyczyła jednego zagadnienia. Różnica między zwykłym obiektem a helperem jak taka, że helper ma zasięg globalny - obiekt może zostać utworzony gdziekolwiek.

Przykładem może być klasa 'File' w Javie, którą wywołuje się jeden obiekt pod jeden plik. Jeżeli nie ma już potrzeby operowania na pliku, obiekt zostaje zniszczony.

Nie wiem szczerze czy to dobrze rozumuję. Tak czy siak, z helperów korzystam również po to by uniknąć stosowania Singletonów.Marcin Drwięga edytował(a) ten post dnia 17.03.12 o godzinie 17:58
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Marcin Drwięga:
Temat znaleziony w Google, bo sam chciałem poznać konkretną definicję helpera. To zabawne, używam go a dalej dokładnie nie wiem po co to istnieje:) No ale wypowiem się, a nuż się komuś przyda?

Helper wg mnie to klasa, która służy do stworzenie jednego obiektu pod jedno konkretne zadanie. Ważne, by klasa dotyczyła jednego zagadnienia. Różnica między zwykłym obiektem a helperem jak taka, że helper ma zasięg globalny - obiekt może zostać utworzony gdziekolwiek.

Przykładem może być klasa 'File' w Javie, którą wywołuje się jeden obiekt pod jeden plik. Jeżeli nie ma już potrzeby operowania na pliku, obiekt zostaje zniszczony.

Nie wiem szczerze czy to dobrze rozumuję. Tak czy siak, z helperów korzystam również po to by uniknąć stosowania Singletonów.
Widzę, że odkopałeś temat z przed roku :P. Jak bym miał podać definicje "helpera" to bym napisał tak: klasa stworzona po to, żeby wybrnąć ze zbyt dużej ilości kodu wrzuconą do jakiejś klasy przez nieudolnego programistę :)

konto usunięte

Temat: model, helper czy klasa?

Chce napisać program zgodnie z regula "fat models and skinny controllers".

To bardzo głupia reguła więc ją odradzam.
Model powinien być totalnie niezależny od controller'a (warstwy) więc 'przytycie' jednego nie powinno mieć żadnego wpływu na 'masę' drugiego.

Trzeba też dodać, że ew. "fat models and skinny controllers" co najwyżej mogłoby być (bo nie jest) konsekwencją dobrej architektury a nie jej 'przyczyną'... A tobie chodzi przecież o dobrą architekturę, prawda ?
Zastanawiam się, gdzie umieścić metody do obróbki danych.

Na czym polega ta obróbka ? Jeśli na odpowiednim formatowaniu / konwersji danych to w View (czyli klasy View wyspecjalizowane w wyświetlaniu konkretnych danych).

Dla przykładu: Jeśli masz wyświetlić imię i nazwisko pracownika to imho powinieneś stworzyć klasę / kontrolkę "NameSurnameTextBox" która dziedziczy po 'TextBox' np. a konstruktorze przyjmuje obiekt modelu klasy "Worker".
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Jakub Wojt:
Chce napisać program zgodnie z regula "fat models and skinny controllers".

To bardzo głupia reguła więc ją odradzam.
Model powinien być totalnie niezależny od controller'a (warstwy) więc 'przytycie' jednego nie powinno mieć żadnego wpływu na 'masę' drugiego.

Trzeba też dodać, że ew. "fat models and skinny controllers" co najwyżej mogłoby być (bo nie jest) konsekwencją dobrej architektury a nie jej 'przyczyną'... A tobie chodzi przecież o dobrą architekturę, prawda ?
Zastanawiam się, gdzie umieścić metody do obróbki danych.

Na czym polega ta obróbka ? Jeśli na odpowiednim formatowaniu / konwersji danych to w View (czyli klasy View wyspecjalizowane w wyświetlaniu konkretnych danych).

Dla przykładu: Jeśli masz wyświetlić imię i nazwisko pracownika to imho powinieneś stworzyć klasę / kontrolkę "NameSurnameTextBox" która dziedziczy po 'TextBox' np. a konstruktorze przyjmuje obiekt modelu klasy "Worker".

Moim zdaniem warstwa widoku powinna być niezależna zupełnie od warstwy modelu - w twoim przykładzie nakładasz zależność klasy NameSurnameTextBox (widok) od klasy Worker (model). Moim zdaniem to zła praktyka, widok powinien być w 100% głupi - dostawać czyste DTO, czy to w postaci dedykowanych klas DTO, czy też Map, dzięki temu unikamy pokusy manipulacji modelem z widoku.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Widok powinien wyświetlać i nie myśleć. Na poziomie Vidok tekst jest już tylko tekstem, tu Imię Nazisko jest tym samym co Marka Samochodu - oba są tekstem. W kwestii ewentualnego "preformatowania" przydaje się korzystanie z MVVC, innymi słowy jeżeli miejsce wyświetlania ma ograniczone możliwości do tylko obiekt dziedziny wie "co można uprościć" ...

W kwestii helpera nie wiem co to jest, po prostu możliwe są usługi (w DDD Serviceces), kto powiedział, ze klasa dziedziny musi być encją? Osobiście odradzam "teorię" mówiącą, że "zbyt dużo kodu należy podzielić", istotne są operacje publiczne i ich spójność (konkretna odpowiedzialność klasy) a nie to ile linii kodu to ma, nikt nie dzieli na kawałki metody renderingu obiektów 3D tylko dlatego, ze 'dużo tego"...

konto usunięte

Temat: model, helper czy klasa?

Moim zdaniem warstwa widoku powinna być niezależna zupełnie od warstwy modelu - w twoim przykładzie nakładasz zależność klasy NameSurnameTextBox (widok) od klasy Worker (model). Moim zdaniem to zła praktyka,

W sumie racja. Kontrolka powinna przyjmować obiekt klasy WorkerState przy czym np:

class Worker extends WorkerState implements WorkerDomain
widok powinien być w 100% głupi -
dostawać czyste DTO,

nie lubię DTO ;)
Oskar Marciniak

Oskar Marciniak Koder php
hobbystycznie :-)

Temat: model, helper czy klasa?

Helper zazwyczaj powinien byc klasa ze statycznymi metodami ktore ulatwiaja czesto wykonywane operacje w kontrolerze czy tez widoku.

U mnie np mam kilka takich Helperow a te ktore najczesciej uzywam to Box i Form ten pierwszy tworzy komunikaty i alert() z button'ami tak/nie przydatne w czasie usuwania danych np.
A Form sluzy do budowy formularzy, gdy mam potrzebe by wykorzystac jakis helper w widoku to go poprostu do niego laduje.

Ladnym przykladem jest Kohana.

Widok powinien wyświetlać i nie myśleć

Ja nie do konca sie z tym zgadzam, zalezy jak zostal zaprojektowany nasz system.


Moim zdaniem warstwa widoku powinna być niezależna zupełnie od warstwy modelu

Tu nie chodzi o zdanie a o dobra implementacje wzorcow architektonicznych.
W MVC np model i widok sa powiazane ze soba to widok np wie czy ma zostac dolaczona paginacja do danego zasobu bazujac sie na interfejsach implementujacych przez model.

W MVP na ktorym jako tako bazuja sie wszysykie frameworki jak Zend,Symfony,Kohana czy Cake ta zaleznosc wyglada juz inaczej czyli to co widzimy na codzien nie widok pobiera dane z modelu lecz to kontroler mu je ustawia.Oskar Marciniak edytował(a) ten post dnia 18.03.12 o godzinie 20:45

konto usunięte

Temat: model, helper czy klasa?

Widok powinien wyświetlać i nie myśleć.

Chodzi właśnie o to, że taka kontrolka 'nie myśli' więcej niż musi.
Nawet w TextBox jest jakaś logika - enumeracja kolejnych znaków stringa i rysowanie ich.

W 'naszej' dedykowanej dla konkretnych zadań (czyli nie ogólnych) kontrolce będzie łączenie Properties Name i Surname z obiektu z interface HasNameAndSurname tzn.

class Worker implements HasNameAndSurname.

Dodatkowo taką kontrolkę będzie można wykorzystać przy wyświetlaniu 'imion i nazwisk' wszystkich obiektów (Worker, Client etc ...) które taki interface implementują.

Jedną kontrolką można 'załatwić' załatwić wyświetlanie wszystkich 'imion i nazwisk' w systemie.

Może tak: W systemach ERP nie ma czegoś takiego jak String'i, Int'y, Floaty, List'y, są za to nazwy, imiona, nazwiska, ceny, ilości, spisy etc. Ja proponuję po prostu, wykorzystanie TextBoxów, ValueBoxów, ListControl w celu modelowania zachowanie NameSurnameBox, PriceBox, WorkersList'ów.
Na poziomie Vidok tekst jest już tylko tekstem, tu Imię Nazisko jest tym samym co Marka Samochodu - oba są tekstem.
W kwestii ewentualnego "preformatowania" przydaje się korzystanie z MVVC, innymi słowy jeżeli miejsce wyświetlania ma ograniczone możliwości do tylko obiekt dziedziny wie "co można uprościć" ...

Jaką przewagę daje przeniesienie kodu z kontrolki do ModelView ?
W kwestii helpera nie wiem co to jest,

To jest kod proceduralny w klasie :) podobnie jest z klasami ModelView z resztą.
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: model, helper czy klasa?

Jaką przewagę daje przeniesienie kodu z kontrolki do ModelView ?

masz np. klasę dziedzinową Samochód, zapytana o "Dane samochodu" przez "wypasiony" interfejs poda komplet danych ze zdjęciem, zapytana przez "ubogi" dobierze minimum podstawowych danych. Tak wiec model faktyczny można przykryć takim adapterem. Pożytek jest taki, że po napisaniu interfejsu na Androida interfejs jest nadal prosty i lekki, a odwołania z Androida przechwytuje adapter Vidoku, chodzi o to, że "Model jest święty", modeluje w 100% logikę i nie naginam go z żadnego powodu, tylko dzięki temu model jest "wymiennny i przenoszalny".

W kwestii helpera nie wiem co to jest,

To jest kod proceduralny w klasie :) podobnie jest z klasami ModelView z resztą.

ale jaką ma odpowiedzialność, jaką wartość dodaną wnosi?

konto usunięte

Temat: model, helper czy klasa?

Jakub vs Jarek. Dotnet vs Java :D Obaj macie rację biorąc pod uwagę nawyki z Waszych środowisk ;) Tak słyszałem ;)
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: model, helper czy klasa?

Łukasz K.:
Jakub vs Jarek. Dotnet vs Java :D Obaj macie rację biorąc pod uwagę nawyki z Waszych środowisk ;) Tak słyszałem ;)
Miałbyś 100% racji, gdyby Jarek był programistą :>

konto usunięte

Temat: model, helper czy klasa?

Wojciech Soczyński:
Łukasz K.:
Jakub vs Jarek. Dotnet vs Java :D Obaj macie rację biorąc pod uwagę nawyki z Waszych środowisk ;) Tak słyszałem ;)
Miałbyś 100% racji, gdyby Jarek był programistą :>

Ufam, że nie projektuje w próżni ;)



Wyślij zaproszenie do