🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
22 messages
22 total messages Started by konsul41 Thu, 28 Sep 2017 09:51
Delphi XE2 FM MVC
#346093
Author: konsul41
Date: Thu, 28 Sep 2017 09:51
25 lines
1751 bytes
Interesuje mnie jak w Delphi wykonuje się MVC



Mam model który ma takie właściwości i jest fakturą.

property dok_id: Integer read Getdok_id write Setdok_id;
     property OkresKsiegowy: TOKres read GetOkresKsiegowy write 
SetOkresKsiegowy;
     property NazwaDziennika: string read GetNazwaDziennika write 
SetNazwaDziennika;
     property NumerDziennika: Integer read GetNumerDziennika write 
SetNumerDziennika;
     property NumerDokumentu: string read GetNumerDokumentu write 
SetNumerDokumentu;
     property DataRej: TDate read GetDataRej write SetDataRej;
     property DataDok: TDate read GetDataDok write SetDataDok;
     property DataPodatkowa: TDate read GetDataPodatkowa write 
SetDataPodatkowa;

Jak teraz do niego dorobić pozostałe dwie części
Kontroler i Widok.

Wszystko fajnie jest opisywane w teorii ale mało w praktyce (dla Delphi).
Chodzi mi o to jak powinno się to zrealizować praktycznie w Delphi?
Re: Delphi XE2 FM MVC
#346094
Author: konsul41
Date: Thu, 28 Sep 2017 10:21
3 lines
1263 bytes
Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym 
kiedy zmienia się model.
Ale jak połączyć taki TEdit z modelem?
Re: Delphi XE2 FM MVC
#346095
Author: wloochacz
Date: Thu, 28 Sep 2017 11:46
10 lines
1455 bytes
W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym 
> kiedy zmienia się model.
Możesz, ale po co?

> Ale jak połączyć taki TEdit z modelem?
Dlaczego nie użyjesz LiveBindings?

-- 
wloochacz
Re: Delphi XE2 FM MVC
#346096
Author: konsul41
Date: Thu, 28 Sep 2017 12:38
11 lines
1406 bytes
W dniu 28-09-2017 o 13:46, wloochacz pisze:
> W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
>> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym
>> kiedy zmienia się model.
> Możesz, ale po co?
>
>> Ale jak połączyć taki TEdit z modelem?
> Dlaczego nie użyjesz LiveBindings?
>

A czy TBindSourceAdapter nie jest dostępny dopiero w XE3?
Re: Delphi XE2 FM MVC
#346097
Author: wloochacz
Date: Thu, 28 Sep 2017 12:50
21 lines
1891 bytes
W dniu 2017-09-28 o 14:38, konsul41@wp.pl pisze:
> W dniu 28-09-2017 o 13:46, wloochacz pisze:
>> W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
>>> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym
>>> kiedy zmienia się model.
>> Możesz, ale po co?
>>
>>> Ale jak połączyć taki TEdit z modelem?
>> Dlaczego nie użyjesz LiveBindings?
>>
> 
> A czy TBindSourceAdapter nie jest dostępny dopiero w XE3?
Jest, ale co to ma do rzeczy?
Jak chcesz klikać, to kup nowsze Delphi.
Jak chcesz kodować, to wystarczy XE2.

A nawet XE, ale wtedy trzeba użyć np. tego:
https://bitbucket.org/sglienke/dsharp

-- 
wloochacz
Re: Delphi XE2 FM MVC
#346098
Author: konsul41
Date: Thu, 28 Sep 2017 13:12
22 lines
2055 bytes
W dniu 28-09-2017 o 14:50, wloochacz pisze:
> W dniu 2017-09-28 o 14:38, konsul41@wp.pl pisze:
>> W dniu 28-09-2017 o 13:46, wloochacz pisze:
>>> W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
>>>> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym
>>>> kiedy zmienia się model.
>>> Możesz, ale po co?
>>>
>>>> Ale jak połączyć taki TEdit z modelem?
>>> Dlaczego nie użyjesz LiveBindings?
>>>
>>
>> A czy TBindSourceAdapter nie jest dostępny dopiero w XE3?
> Jest, ale co to ma do rzeczy?
> Jak chcesz klikać, to kup nowsze Delphi.
> Jak chcesz kodować, to wystarczy XE2.
>
> A nawet XE, ale wtedy trzeba użyć np. tego:
> https://bitbucket.org/sglienke/dsharp
>
wymaga springa
czy chodzi o tego https://bitbucket.org/sglienke/spring4d
Re: Delphi XE2 FM MVC
#346099
Author: Roman Tyczka
Date: Thu, 28 Sep 2017 15:02
13 lines
1300 bytes
On Thu, 28 Sep 2017 15:12:35 +0200, konsul41@wp.pl wrote:

>> A nawet XE, ale wtedy trzeba użyć np. tego:
>> https://bitbucket.org/sglienke/dsharp
>>
> wymaga springa
> czy chodzi o tego https://bitbucket.org/sglienke/spring4d

Tak, nie ma innego Springa dla Delphi.

-- 
pozdrawiam
Roman Tyczka
Re: Delphi XE2 FM MVC
#346106
Author: konsul41
Date: Fri, 29 Sep 2017 06:00
12 lines
1325 bytes
W dniu 28-09-2017 o 13:46, wloochacz pisze:
> W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
>> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym 
>> kiedy zmienia się model.
> Możesz, ale po co?
> 
>> Ale jak połączyć taki TEdit z modelem?
> Dlaczego nie użyjesz LiveBindings?
> 
Testuje.

Jak w sposób alternatywny można to zrobić?
Re: Delphi XE2 FM MVC
#346100
Author: konsul41
Date: Fri, 29 Sep 2017 07:57
14 lines
1510 bytes
>> A czy TBindSourceAdapter nie jest dostępny dopiero w XE3?
> Jest, ale co to ma do rzeczy?
> Jak chcesz klikać, to kup nowsze Delphi.
> Jak chcesz kodować, to wystarczy XE2.
> 
> A nawet XE, ale wtedy trzeba użyć np. tego:
> https://bitbucket.org/sglienke/dsharp
> 

A czy nie jest on tylko dla VCL?
przerabiam sample i problemem jest unit DSharp.Bindings.VCLControls nie 
ma dla FireMonkey.
Na formie Firemonkey jest AccesViolation, a na VCL działa.
Re: Delphi XE2 FM MVC
#346101
Author: konsul41
Date: Fri, 29 Sep 2017 09:17
24 lines
1857 bytes
W dniu 28-09-2017 o 14:50, wloochacz pisze:
> W dniu 2017-09-28 o 14:38, konsul41@wp.pl pisze:
>> W dniu 28-09-2017 o 13:46, wloochacz pisze:
>>> W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
>>>> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym
>>>> kiedy zmienia się model.
>>> Możesz, ale po co?
>>>
>>>> Ale jak połączyć taki TEdit z modelem?
>>> Dlaczego nie użyjesz LiveBindings?
>>>
>>
>> A czy TBindSourceAdapter nie jest dostępny dopiero w XE3?
> Jest, ale co to ma do rzeczy?
> Jak chcesz klikać, to kup nowsze Delphi.
> Jak chcesz kodować, to wystarczy XE2.
> 
> A nawet XE, ale wtedy trzeba użyć np. tego:
> https://bitbucket.org/sglienke/dsharp
> 
A co sądzisz o tym?
http://www.danieleteti.it/net-databinding-in-delphi-for-win32/

mniejsze.
Re: Delphi XE2 FM MVC
#346102
Author: konsul41
Date: Fri, 29 Sep 2017 09:34
6 lines
1217 bytes
> A co sądzisz o tym?
> http://www.danieleteti.it/net-databinding-in-delphi-for-win32/
> 
> mniejsze.
Ślepa uliczka tylko w jedną stronę.
Re: Delphi XE2 FM MVC
#346103
Author: Roman Tyczka
Date: Fri, 29 Sep 2017 10:13
13 lines
1322 bytes
On Fri, 29 Sep 2017 11:34:30 +0200, konsul41@wp.pl wrote:

>> A co sądzisz o tym?
>> http://www.danieleteti.it/net-databinding-in-delphi-for-win32/
>> 
>> mniejsze.
> Ślepa uliczka tylko w jedną stronę.

Teraz odkryj Columbusa tegoż samego autora :-)

-- 
pozdrawiam
Roman Tyczka
Re: Delphi XE2 FM MVC
#346107
Author: konsul41
Date: Fri, 29 Sep 2017 10:13
15 lines
1739 bytes
W dniu 29-09-2017 o 08:00, konsul41@wp.pl pisze:
> W dniu 28-09-2017 o 13:46, wloochacz pisze:
>> W dniu 2017-09-28 o 12:21, konsul41@wp.pl pisze:
>>> Teoretycznie w modelu mógłbym zarejestrować obserwatora i wiedziałbym
>>> kiedy zmienia się model.
>> Możesz, ale po co?
>>
>>> Ale jak połączyć taki TEdit z modelem?
>> Dlaczego nie użyjesz LiveBindings?
>>
> Testuje.
>
> Jak w sposób alternatywny można to zrobić?
Myślałem że w moim obiekcie zrobić obserwatora, a np TEdit podpiąć się 
pod OnChange .
Re: Delphi XE2 FM MVC
#346104
Author: konsul41
Date: Fri, 29 Sep 2017 10:57
15 lines
1956 bytes
W dniu 29-09-2017 o 12:13, Roman Tyczka pisze:
> On Fri, 29 Sep 2017 11:34:30 +0200, konsul41@wp.pl wrote:
>
>>> A co sądzisz o tym?
>>> http://www.danieleteti.it/net-databinding-in-delphi-for-win32/
>>>
>>> mniejsze.
>> Ślepa uliczka tylko w jedną stronę.
>
> Teraz odkryj Columbusa tegoż samego autora :-)
>
Moja wypowiedź oznacza ślepą uliczkę dla mnie.
Ponieważ dane są pobierane z mojego obiektu i pokazywane.
Brak połączenia w drugą stronę.
Moja wypowiedź w żaden sposób nie dotyczyła autora kodu ani samego kodu.
Re: Delphi XE2 FM MVC
#346105
Author: Roman Tyczka
Date: Fri, 29 Sep 2017 11:44
23 lines
1828 bytes
On Fri, 29 Sep 2017 12:57:32 +0200, konsul41@wp.pl wrote:

>>>> A co sądzisz o tym?
>>>> http://www.danieleteti.it/net-databinding-in-delphi-for-win32/
>>>>
>>>> mniejsze.
>>> Ślepa uliczka tylko w jedną stronę.
>>
>> Teraz odkryj Columbusa tegoż samego autora :-)
>>
> Moja wypowiedź oznacza ślepą uliczkę dla mnie.
> Ponieważ dane są pobierane z mojego obiektu i pokazywane.
> Brak połączenia w drugą stronę.
> Moja wypowiedź w żaden sposób nie dotyczyła autora kodu ani samego kodu.

No i co z tego, że Twoja nie dotyczyła? 
Moja dotyczyła, chyba jasno napisałem.
Szukasz rozwiązania i pewnie trafisz także na Columbusa, więc wyprzedziłem
fakty. 

-- 
pozdrawiam
Roman Tyczka
Re: Delphi XE2 FM MVC
#346108
Author: J-23
Date: Sun, 01 Oct 2017 14:24
62 lines
3780 bytes
W dniu 28.09.2017 o 11:51, konsul41@wp.pl pisze:
> Interesuje mnie jak w Delphi wykonuje się MVC
> 

Wszystko zależy co potrzebujesz. Gotowego Fremworka bazującego na MVC ci 
nie podsune w Delphi ale powiem swoje spostrzeżenia nt MVC

Teoria mówi by wszystkie trzy elementy były ze sobą luzno powiązane - 
znaczy to tyle że w teorii każdy z tych elementów powinien być wymienny

To napewno znasz - ale teraz musisz zdać sobie sprawę co ci tak naprawdę 
jest potrzebne - gdzie zaczyna się tak naprawdę Model - Widok - Kontroler

> 
> 
> Mam model który ma takie właściwości i jest fakturą.
> 
> property dok_id: Integer read Getdok_id write Setdok_id;
>      property OkresKsiegowy: TOKres read GetOkresKsiegowy write 
> SetOkresKsiegowy;
>      property NazwaDziennika: string read GetNazwaDziennika write 
> SetNazwaDziennika;
>      property NumerDziennika: Integer read GetNumerDziennika write 
> SetNumerDziennika;
>      property NumerDokumentu: string read GetNumerDokumentu write 
> SetNumerDokumentu;
>      property DataRej: TDate read GetDataRej write SetDataRej;
>      property DataDok: TDate read GetDataDok write SetDataDok;
>      property DataPodatkowa: TDate read GetDataPodatkowa write 
> SetDataPodatkowa;
> 
> Jak teraz do niego dorobić pozostałe dwie części
> Kontroler i Widok.
> 

Bazując na podanej klasie sprawa jest prosta w kontroler wsadzasz 
wszystkie operacje jakie możesz wykonać na tej fakturze i tyle

Ja jak pisałem jeszcze w Delphi stworzyłem sobie komponent do Faktur 
gdzie opierał on się o MVC tylko ja to miałem podzielone troszkę wyżej 
nuż ty tutaj próbujesz zrobić u mnie modelem było wszystko to co było 
związane z bazą danych - kontroler był też dość rozbudowany bo posiadał 
i zarządzanie bazą (wszystkie operacje wykonywane na bazie itp nawet 
formatki niektóre tak by łatwo wymieniać pewną funkcjonalności) a jako 
widok obrałem sobie poszczególne wzory faktur.

Z tego co napisałem wyżej były jeszcze wydzielone pakiety odpowiedzialne 
m,in za działanie na poszczególnych silnikach bazodanowych

Podsumowując nie traktuj MVC jako 1:1 czyli jedna klasa to pojedynczy 
element problemu. Głownym zadaniem MVC jest podzielenie tego na 
odpowiednie elementy

możesz oczywiście podchodzić tak ze jedna klasa jedna czynność z MVC ale 
wtedy się łatwo po gubić

We wspomnianym komponencie do fakturowania miałem w ten sposób łatwą 
możliwość wymiany wzorów dokumentów oraz silników baz danych wszystko 
sprowadzało się do tego że kładłem wybrane elementy na formę.
Bez skrobania jakiegokolwiek kodu

Pozdrawiam
Re: Delphi XE2 FM MVC
#346109
Author: konsul41
Date: Mon, 02 Oct 2017 06:05
13 lines
1700 bytes
> Bazując na podanej klasie sprawa jest prosta w kontroler wsadzasz 
> wszystkie operacje jakie możesz wykonać na tej fakturze i tyle
> 
> Ja jak pisałem jeszcze w Delphi stworzyłem sobie komponent do Faktur 
> gdzie opierał on się o MVC tylko ja to miałem podzielone troszkę wyżej 
> nuż ty tutaj próbujesz zrobić u mnie modelem było wszystko to co było 
> związane z bazą danych - kontroler był też dość rozbudowany bo posiadał 
> i zarządzanie bazą (wszystkie operacje wykonywane na bazie itp nawet 
> formatki niektóre tak by łatwo wymieniać pewną funkcjonalności) a jako 
> widok obrałem sobie poszczególne wzory faktur.
Tylko u mnie model nie wie nic o sposobie utrwalania (baza danych) od 
tego jest repozytorium. W modelu nie ma ani jednej linijki SQL.
Re: Delphi XE2 FM MVC
#346110
Author: J-23
Date: Mon, 02 Oct 2017 14:54
29 lines
2717 bytes
W dniu 02.10.2017 o 08:05, konsul41@wp.pl pisze:
> 
>> Bazując na podanej klasie sprawa jest prosta w kontroler wsadzasz 
>> wszystkie operacje jakie możesz wykonać na tej fakturze i tyle
>>
>> Ja jak pisałem jeszcze w Delphi stworzyłem sobie komponent do Faktur 
>> gdzie opierał on się o MVC tylko ja to miałem podzielone troszkę wyżej 
>> nuż ty tutaj próbujesz zrobić u mnie modelem było wszystko to co było 
>> związane z bazą danych - kontroler był też dość rozbudowany bo 
>> posiadał i zarządzanie bazą (wszystkie operacje wykonywane na bazie 
>> itp nawet formatki niektóre tak by łatwo wymieniać pewną 
>> funkcjonalności) a jako widok obrałem sobie poszczególne wzory faktur.
> Tylko u mnie model nie wie nic o sposobie utrwalania (baza danych) od 
> tego jest repozytorium. W modelu nie ma ani jednej linijki SQL.

No ok, tylko to co ja ci opisałem miało na celu przedstawić że MVC może 
przybierać różne postaci w zależności od warstwy w jakiej chcesz użyć MVC.

Tak jak pisałem wcześniej odnosząc się do klasy którą podałeś jeśli tą 
klase potraktujesz jako model to kontrolerem powinny być operacje na tej 
klasie (możliwe do wykonania) a widokiem wynik tych operacji.

Jednak jak widzisz taki podział może być nie wystarczający lub 
wymagający dodatkowych warstw by coś sensownego z tego powstało lepiej 
myśl o tym w ten sposób by każdy element wzorca zamykał w sobie jakąś 
konkretną funkcjonalność wtedy ci będzie łatwiej to zrozumieć.

Pozdrawiam
J-23
Re: Delphi XE2 FM MVC
#346111
Author: Karol
Date: Mon, 02 Oct 2017 18:22
29 lines
2873 bytes
W dniu 2017-10-02 o 16:54, J-23 pisze:
> W dniu 02.10.2017 o 08:05, konsul41@wp.pl pisze:
>>
>>> Bazując na podanej klasie sprawa jest prosta w kontroler wsadzasz
>>> wszystkie operacje jakie możesz wykonać na tej fakturze i tyle
>>>
>>> Ja jak pisałem jeszcze w Delphi stworzyłem sobie komponent do Faktur
>>> gdzie opierał on się o MVC tylko ja to miałem podzielone troszkę
>>> wyżej nuż ty tutaj próbujesz zrobić u mnie modelem było wszystko to
>>> co było związane z bazą danych - kontroler był też dość rozbudowany
>>> bo posiadał i zarządzanie bazą (wszystkie operacje wykonywane na
>>> bazie itp nawet formatki niektóre tak by łatwo wymieniać pewną
>>> funkcjonalności) a jako widok obrałem sobie poszczególne wzory faktur.
>> Tylko u mnie model nie wie nic o sposobie utrwalania (baza danych) od
>> tego jest repozytorium. W modelu nie ma ani jednej linijki SQL.
>
> No ok, tylko to co ja ci opisałem miało na celu przedstawić że MVC może
> przybierać różne postaci w zależności od warstwy w jakiej chcesz użyć MVC.
>
> Tak jak pisałem wcześniej odnosząc się do klasy którą podałeś jeśli tą
> klase potraktujesz jako model to kontrolerem powinny być operacje na tej
> klasie (możliwe do wykonania) a widokiem wynik tych operacji.
>
> Jednak jak widzisz taki podział może być nie wystarczający lub
> wymagający dodatkowych warstw by coś sensownego z tego powstało lepiej
> myśl o tym w ten sposób by każdy element wzorca zamykał w sobie jakąś
> konkretną funkcjonalność wtedy ci będzie łatwiej to zrozumieć.
>
Ale to co Piszesz jest niezgodne z DDD i trudne do testowania.
Re: Delphi XE2 FM MVC
#346112
Author: J-23
Date: Mon, 02 Oct 2017 18:56
41 lines
3389 bytes
W dniu 02.10.2017 o 20:22, Karol pisze:
> W dniu 2017-10-02 o 16:54, J-23 pisze:
>> W dniu 02.10.2017 o 08:05, konsul41@wp.pl pisze:
>>>
>>>> Bazując na podanej klasie sprawa jest prosta w kontroler wsadzasz
>>>> wszystkie operacje jakie możesz wykonać na tej fakturze i tyle
>>>>
>>>> Ja jak pisałem jeszcze w Delphi stworzyłem sobie komponent do Faktur
>>>> gdzie opierał on się o MVC tylko ja to miałem podzielone troszkę
>>>> wyżej nuż ty tutaj próbujesz zrobić u mnie modelem było wszystko to
>>>> co było związane z bazą danych - kontroler był też dość rozbudowany
>>>> bo posiadał i zarządzanie bazą (wszystkie operacje wykonywane na
>>>> bazie itp nawet formatki niektóre tak by łatwo wymieniać pewną
>>>> funkcjonalności) a jako widok obrałem sobie poszczególne wzory faktur.
>>> Tylko u mnie model nie wie nic o sposobie utrwalania (baza danych) od
>>> tego jest repozytorium. W modelu nie ma ani jednej linijki SQL.
>>
>> No ok, tylko to co ja ci opisałem miało na celu przedstawić że MVC może
>> przybierać różne postaci w zależności od warstwy w jakiej chcesz użyć 
>> MVC.
>>
>> Tak jak pisałem wcześniej odnosząc się do klasy którą podałeś jeśli tą
>> klase potraktujesz jako model to kontrolerem powinny być operacje na tej
>> klasie (możliwe do wykonania) a widokiem wynik tych operacji.
>>
>> Jednak jak widzisz taki podział może być nie wystarczający lub
>> wymagający dodatkowych warstw by coś sensownego z tego powstało lepiej
>> myśl o tym w ten sposób by każdy element wzorca zamykał w sobie jakąś
>> konkretną funkcjonalność wtedy ci będzie łatwiej to zrozumieć.
>>
> Ale to co Piszesz jest niezgodne z DDD i trudne do testowania.
> 
W którym punkcie niezgodne? Niezgodne jeżeli w jednym z tych elementów 
nie będzie kolejnych warstw. A ja nie napisałem że każdy z tych 
elementów ma być w tej samej warstwie

Ja przedstawiłem MVC w warstwie "funkcyjnej" a to nie oznacza że każda z 
tych elementów MVC  nie ma kolejnych aż po sam obiekt

Pozdrawiam
J-23
Re: Delphi XE2 FM MVC
#346113
Author: konsul41
Date: Tue, 03 Oct 2017 06:07
4 lines
1238 bytes
> W którym punkcie niezgodne?
" u mnie modelem było wszystko to co było związane z bazą danych"
Model nie powinien nic wiedzieć o sposobie jego utrwalania.
Re: Delphi XE2 FM MVC
#346114
Author: J-23
Date: Tue, 03 Oct 2017 14:57
21 lines
2080 bytes
W dniu 03.10.2017 o 08:07, konsul41@wp.pl pisze:
> 
>> W którym punkcie niezgodne?
> " u mnie modelem było wszystko to co było związane z bazą danych"
> Model nie powinien nic wiedzieć o sposobie jego utrwalania.
> 

Nie koniecznie to wszystko zależy w której warstwie użyjesz MVC

napisałem to zdanie bo chciałem Ci pokazać że można MVC używać w różnych 
warstwach

Model u mnie też składał się z kilku warstw i też na każdej był użyty MVC

Podsumowując oprócz samego podziału na Model - Widok - Kontroler ważny 
podział na warstwy. Wtedy osiągamy pełną zgodność z dogmatem DDD i nie 
ma ani problemu z testowaniem tego jak zaznaczył Karol ani problemu z 
podmianą któregoś elementu

Pozdrawiam
J-23
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads