Czy Delphi dalej żyje?

Wątek zablokowany 2016-08-10 17:52 przez flowCRANE .

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
Złoty Terrorysta napisał(a):

A co tam jest spoko?

A co nie jest spoko?

W Delphi chyba największym obszarem "spoko" jest obsługa baz danych, pod warunkiem że lubi się programować blisko bazy danych.
Jak się nie lubi lub nie umie SQLa, to ma się drobny problem. Bo ORMy są i owszem, ale nie w standardzie i godne uwagi nie są za free.
Marshmallow z Spirng4Delphi jeszcze nie do końca działa.
mORMmot to świetna zabawka, ale raczej do serwera aplikacyjnego.

A Aurelius, EntityDAC są spoko, ale za dodatkowe $$$.

  • Rejestracja: dni
  • Ostatnio: dni
0

A co to znaczy "blisko bazy danych"? Tzn klepanie sql ręcznie? Serio to takie spoko?

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Oczywiście, że tak.
Poza tym Delphi jest prawie na takim samym poziomie jak C++ (jest nieco wyżej), a pozwala bardzo szybko stworzyć pełną aplikację. W zasadzie, przed C#, to chyba było jedyne środowisko z takim form designerem.

I myślę, że temat został wyczerpany. Pytanie było: "Czy Delphi jeszcze żyje".
Odpowiedź: "Tak, cały czas żyje i cały czas są w nim tworzone nowe komercyjne aplikacje.".

Myślę, że na tym możemy zamknąć temat.

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
Złoty Terrorysta napisał(a):

A co to znaczy "blisko bazy danych"? Tzn klepanie sql ręcznie? Serio to takie spoko?

A dowiem się w końcu co nie jest spoko?

Co to znaczy wg Ciebie ręcznie?

Ale tak, możesz pisać ręcznie i tak pewnie więkzośc robi. Ja tak nie robię.
Możesz pisać przy pomocy SQLBuildera (i nie chodzi mi o wizualny QueryBuilder, tylko o obiektowy SQLBuilder).
Możesz wykorzysta ORMa i LiveDataBindigs do łączenia obiektów danych i kontrolek. No problem.

A możesz iść jeszcze w inną stronę i zrobić jak Ci się podoba.

Generalnie spoko.

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
Juhas napisał(a):

Oczywiście, że tak.
Poza tym Delphi jest prawie na takim samym poziomie jak C++ (jest nieco wyżej), a pozwala bardzo szybko stworzyć pełną aplikację. W zasadzie, przed C#, to chyba było jedyne środowisko z takim form designerem.

W zasadzie to nieprawda, chyba że widziałeś tylko Visual Studio :D

Osobiście to mnie ten FormDesigner przeszkadza niż pomaga.
W sumie to mi nie przeszkadza (mam go w nosie, po prostu nie używam), pod warunkiem że wszystko inne będzie działało...

A jak jeszcze dawno temu w manualu wyczytałem, że i owszem można wykorzystać LiveDataBindings z kodu, ale nie zalecają to usiadłem z krzesła. I tu się dokumentacja skończyła...
Znaczy, co? Mam klikać jak małpa strzałki w IDE (które robią się nieczytelne po kwadransie zabawy z bardziej skomplikowanym przypadkiem) bo tak se producent wymyślił?
Ale najbardziej niefajne jest to, że w manualu nie było słowa słowa (teraz to się zmieniło, jest lepiej) o tym jak to działa pod spodem - trzeba źródła oglądać.

I właśnie to mnie w Delphi najbardziej wk#$#$ - producent uważa, że to nie jest IDE do programowani tylko do klikania. A przynajmniej dalej z uporem maniaka forsuje takie podejście. I tak od 20 lat. Tylko jakby nie było, co nieco się pozmieniało i teraz są "ciut" inne tendencje w programowaniu niż dwie dekady temu.
I to podejście jest fajne - do czegoś prostego, naklepać, zrobić, działa i zapomnieć. Ktoś kto ma duży projekt w Delphi z setkami formatek i logiką na zdarzeniach kontrolek, ten wie co to za ból.

To nie znaczy że się nie da inaczej. Da się z powodzeniem, a jakże. Tylko to nie jest mainstremowe podejście i czuję się czasem jak parias ;-)

  • Rejestracja: dni
  • Ostatnio: dni
0
Juhas napisał(a):

cały czas są w nim tworzone nowe komercyjne aplikacje."

Nie, nie są w nim tworzone NOWE komercyjne aplikacje. Jeśli są, to bardzo rzadko. Nie przkłamuj rzeczywistości.

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
Czarny Samiec napisał(a):
Juhas napisał(a):

cały czas są w nim tworzone nowe komercyjne aplikacje."

Nie, nie są w nim tworzone NOWE komercyjne aplikacje. Jeśli są, to bardzo rzadko. Nie przkłamuj rzeczywistości.

Może na twojej wsi, ale na mojej tak są tworzone NOWE aplikacje. I nie tylko u mnie, ale u wielu innych.
Znam ok. 20 NOWYCH (czyli takich, gdzie projekt wystartował max 2,3 lata temu) aplikacji tworzonych w Delphi i w PL. Oczywiście nie znam wszystkich.

A więc jak dla mnie to Ty zaklinasz rzeczywistość; zrozum, że jeśli czegoś nie widzisz lub o tym nie wiesz, nie świadczy że tak się nie dzieje.
Gdybyś napisał, że udział Delphi przy produkcji nowego oprogramowania jest zdecydowanie mniejszy niż np. .NET, to OK.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0
wloochacz napisał(a):
Juhas napisał(a):

Oczywiście, że tak.
Poza tym Delphi jest prawie na takim samym poziomie jak C++ (jest nieco wyżej), a pozwala bardzo szybko stworzyć pełną aplikację. W zasadzie, przed C#, to chyba było jedyne środowisko z takim form designerem.

W zasadzie to nieprawda, chyba że widziałeś tylko Visual Studio :D

W sumie to tak. A co było jeszcze wcześniej? Tzn. przed C#? Tylko chodzi mi o środowiska, gdzie ten designer jest naprawdę dobry, a nie w stylu MFC.

Znaczy, co? Mam klikać jak małpa strzałki w IDE (które robią się nieczytelne po kwadransie zabawy z bardziej skomplikowanym przypadkiem) bo tak se producent wymyślił?

Nie. Możesz:

  1. Klikać jak małpa w strzałki, tworząc wizualnie GUI dla swojej aplikacji
  2. Zacząć od zerowego projektu i klepać wszystko w WinApi
  3. Zacząć od zerowego projektu (lub częściowo utworzonego) i klepać wszystkie formatki ręcznie z kodu
  4. Ręcznie tworzyć dfmy

Widzisz, możliwości jest wiele :)

Ale najbardziej niefajne jest to, że w manualu nie było słowa słowa (teraz to się zmieniło, jest lepiej) o tym jak to działa pod spodem - trzeba źródła oglądać.

Generalnie to, jak coś działa pod spodem, nie powinno Cię, jako programisty wykorzystującego bibliotekę, interesować. Chyba, że masz naprawdę specyficzne wymagania i oczekiwania. Dlatego możesz zajrzeć do kodu.

I właśnie to mnie w Delphi najbardziej wk#$#$ - producent uważa, że to nie jest IDE do programowani tylko do klikania.
A przynajmniej dalej z uporem maniaka forsuje takie podejście. I tak od 20 lat.

A tu się nie zgodzę.

I to podejście jest fajne - do czegoś prostego, naklepać, zrobić, działa i zapomnieć. Ktoś kto ma duży projekt w Delphi z setkami formatek i logiką na zdarzeniach kontrolek, ten wie co to za ból.

Przede wszystkim nie pisze się logiki na zdarzeniach kontrolek. Należy oddzielać gui od danych. Na zdarzeniach kontrolek powinno się mieć tylko logikę dotyczącą samego gui. W sensie, że nie operować bezpośrednio na danych i nie tworzyć tam jakiś wywalonych algorytmów, bo w taki sposób, to w każdym języku i w każdym środowisku człowiek się szybko pogubi.

Poza tym pracowałem przy projektach z kilkuset formatkami i nie czułem takiego bólu, jak Ty. Może jednak coś robisz nie tak? To nie żadna złośliwość, tylko podejrzenie. Pracowałem na Delphi 6, 2005, XE2 i XE5. Nie mówię, że to są środowiska bezbłędne, bo potrafią się wywalić w naprawdę dziwnych miejscach. Ale tak samo się sprawdzają w małych, jak i dużych projektach.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0
Juhas napisał(a)

Generalnie to, jak coś działa pod spodem, nie powinno Cię, jako programisty wykorzystującego bibliotekę, interesować. Chyba, że masz naprawdę specyficzne wymagania i oczekiwania. Dlatego możesz zajrzeć do kodu.

Nie zgodzę się z tym - brak znajomości działania danego większego mechanizmu jest kłodą pod nogi; Trudno wykorzystywać coś z głową, skoro nie ma się pojęcia o tym jak to coś jest zbudowane i jak działa; Nadmiar wiedzy nie zaszkodzi, a często pomaga w tworzeniu odpowiednich i efektywnych rozwiązań.

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
Juhas napisał(a):
wloochacz napisał(a):
Juhas napisał(a):

Oczywiście, że tak.
Poza tym Delphi jest prawie na takim samym poziomie jak C++ (jest nieco wyżej), a pozwala bardzo szybko stworzyć pełną aplikację. W zasadzie, przed C#, to chyba było jedyne środowisko z takim form designerem.

W zasadzie to nieprawda, chyba że widziałeś tylko Visual Studio :D

W sumie to tak. A co było jeszcze wcześniej? Tzn. przed C#? Tylko chodzi mi o środowiska, gdzie ten designer jest naprawdę dobry, a nie w stylu MFC.

QT Designer i większość 4GLi, np. Magic, Progress, VisualFoxPro i takie tam.

Znaczy, co? Mam klikać jak małpa strzałki w IDE (które robią się nieczytelne po kwadransie zabawy z bardziej skomplikowanym przypadkiem) bo tak se producent wymyślił?

Nie. Możesz:

  1. Klikać jak małpa w strzałki, tworząc wizualnie GUI dla swojej aplikacji
  2. Zacząć od zerowego projektu i klepać wszystko w WinApi
  3. Zacząć od zerowego projektu (lub częściowo utworzonego) i klepać wszystkie formatki ręcznie z kodu
  4. Ręcznie tworzyć dfmy

Widzisz, możliwości jest wiele :)

Jednakże lepiej by było, abyś przeczytał ze zrozumieniem co napisałem.
A nie pisałem o form designer tylko o LiveBindings i jego edycji.
Poza tym ja nie chcę w ogóle tworzyć formatek. Robota głupiego.
A że nie mogłem tego kupić, to pozostało zrobić. No to zrobiłem...

Ale najbardziej niefajne jest to, że w manualu nie było słowa słowa (teraz to się zmieniło, jest lepiej) o tym jak to działa pod spodem - trzeba źródła oglądać.

Generalnie to, jak coś działa pod spodem, nie powinno Cię, jako programisty wykorzystującego bibliotekę, interesować. Chyba, że masz naprawdę specyficzne wymagania i oczekiwania. Dlatego możesz zajrzeć do kodu.

Raczysz żartować?
Programista ma się nie interesować jak to działa, tylko bezkrytycznie używać?

I właśnie to mnie w Delphi najbardziej wk#$#$ - producent uważa, że to nie jest IDE do programowani tylko do klikania.
A przynajmniej dalej z uporem maniaka forsuje takie podejście. I tak od 20 lat.

A tu się nie zgodzę.

A możesz się nie zgadzać, ale taka prawda.

Co to jest do nie zgadzania się?
Delphi to takie narzędzie, które uczy bardzo, ale to bardzo złych nawyków. A najgorsze jest to, że sam producent to promuje.
Efekt tego jest taki, że gro użytkowników Delphi nie programuje obiektowo. Oni używają obiektów, a to nie jest to samo.
Czym to grozi, chyba nie muszę tłumaczyć?

I to podejście jest fajne - do czegoś prostego, naklepać, zrobić, działa i zapomnieć. Ktoś kto ma duży projekt w Delphi z setkami formatek i logiką na zdarzeniach kontrolek, ten wie co to za ból.

Przede wszystkim nie pisze się logiki na zdarzeniach kontrolek. Należy oddzielać gui od danych. Na zdarzeniach kontrolek powinno się mieć tylko logikę dotyczącą samego gui. W sensie, że nie operować bezpośrednio na danych i nie tworzyć tam jakiś wywalonych algorytmów, bo w taki sposób, to w każdym języku i w każdym środowisku człowiek się szybko pogubi.

To pokaż mi jak to robisz, ciekawym.
Może faktycznie czegoś nie wiem i się dowiem.
Zadam kilka pytań pomocniczych:

  1. Gdzie są tworzone, utrzymywane obiekty DAL (wszystko co do bazy danych potrzebne; connection, query, itd.)?
  2. Jak budujesz formatki?
  3. Gdzie jest logika, np. walidacja danych przed zapisem? Albo jęsli wartość w polu X = Y, to przelicz dane w DataSet
  4. Jak zapisywane są dane dla skompilowanego, niech będzie, formularza? Sokmplikowanego, tj. takiego który posiada Master, Detail (kilka) , Subdetail (kilka)?
  5. Ile jest wspólnego kodu? Np. zapis, usuwanie, walidacja danych?

Poza tym pracowałem przy projektach z kilkuset formatkami i nie czułem takiego bólu, jak Ty. Może jednak coś robisz nie tak? To nie żadna złośliwość, tylko podejrzenie. Pracowałem na Delphi 6, 2005, XE2 i XE5. Nie mówię, że to są środowiska bezbłędne, bo potrafią się wywalić w naprawdę dziwnych miejscach. Ale tak samo się sprawdzają w małych, jak i dużych projektach.

Moje podstawowe bóle to były (a były, bo to czas przeszly):

  1. Edycja formatek
  2. Utrzymywanie formatek
  3. Dziedziczenie formatek
  4. Wyklikane komponenty niewizualne, które część ustawień mają w kodzie a część w DFM.
  5. Zmienność wymagań co do aplikacji w zależności od klienta.

Natomiast ja mam dość specyficzne potrzeby, a podstawowa z nich brzmi: jeden kod do wszystkiego. Aplikacja różni się istotnie od instalacji. Nie chcę robić ifologii do zmiany zachowania, widoku i logiki.
A więc ten sam formularz u klienta A może wyglądać,zachowywać się i prezentować inne informacje niż u klienta B. Ale z punktu widzenia modelu dziedziny, to jest ten sam obiekt biznesowy - tylko chudszy lub grubszy.

Jasne, mogę zrobić tak jak pewna firma (i nie będę pisał co to za oni). Jak jest klient z nietypowymi potrzebami, to kopiują całe repo projektu (sic!) i robią zmiany tam gdzie to konieczne. Utrzymanie tak napisanego kodu dla różnych klientów (a mają ich ponad setkę) to jest dopiero sama radość...
Tak jest im łatwiej, ponieważ rozwijali program w sposób Delphi way, a więc formatki w IDE, DataModule na dane itd.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Jednakże lepiej by było, abyś przeczytał ze zrozumieniem co napisałem.
A nie pisałem o form designer tylko o LiveBindings i jego edycji.

To mi się zmieszało. Nie używałem LiveBindings nigdy, więc nie wiem jak to działało. Kiedyś byłem na konferencji dotyczącej zdaje się XE3 i tam się tym szczycili, więc pewnie działało. Ale to nie jest tak, że tylko wyklikać albo w ogóle. W kodzie też to można ogarnąć przecież. To są dwie różne drogi to osiągnięcia tego samego celu.

Generalnie to, jak coś działa pod spodem, nie powinno Cię, jako programisty wykorzystującego bibliotekę, interesować. Chyba, że masz naprawdę specyficzne wymagania i oczekiwania. Dlatego możesz zajrzeć do kodu.

Raczysz żartować?
Programista ma się nie interesować jak to działa, tylko bezkrytycznie używać?

Nie mówię, że bezkrytycznie używać. Nie wiem, czy się nie rozumiemy źle. Naturalnie należy znać zależności między obiektami itp. Ale jeśli mam obiekt, który ma metodę:

Kopiuj
explodeTheWorld();

to tak naprawdę ważne jest dla mnie, co ta metoda robi, a nie w jaki sposób. Tak jest ZAZWYCZAJ. Bo załóżmy metoda:

Kopiuj
 
drawSquare();

to już może mieć znaczenie, czy kwadrat jest rysowany bezpośrednio przez GPU, czy też przez jakieś obiekty systemowe. Ale w takich wypadkach wystarczy mi ta wiedza. Bo co mnie interesuje sposób w jaki ten kwadrat jest rysowany?

Delphi to takie narzędzie, które uczy bardzo, ale to bardzo złych nawyków. A najgorsze jest to, że sam producent to promuje.
Efekt tego jest taki, że gro użytkowników Delphi nie programuje obiektowo. Oni używają obiektów, a to nie jest to samo.

OK, z tym się zgodzę. Faktycznie w Delphi jest za dużo funkcji, za mało metod. Ale to są rzeczy ciągnięte, jak sam zauważyłeś, od wielu lat. I teraz byłoby lekkim strzałem w kolano np. usunięcie funkcji format. Chociaż mogliby utworzyć np. klasę String. Ale wtedy posypałyby się stare kody, bo wielkość liter w Delphi nie ma znaczenia. Więc naprawdę trzeba by ostro przeryć całe środowisko, co skończyłoby się brakiem kompatybilności wstecznej. Już były problemy z migracją, gdy string przestał być ansi, a zaczął być unicodowy.

Trzeba sobie zdać sprawę z tego, że Delphi faktycznie niektóre rzeczy robi nie w sposób obiektowy. Ale taka jest po prostu specyfika języka. Jednym to pasuje, innym nie. Ale chyba nie można powiedzieć, że przez to Delphi jest lepsze albo gorsze.

To pokaż mi jak to robisz, ciekawym.
Może faktycznie czegoś nie wiem i się dowiem.
Zadam kilka pytań pomocniczych:

  1. Gdzie są tworzone, utrzymywane obiekty DAL (wszystko co do bazy danych potrzebne; connection, query, itd.)?

Teoretycznie powinny być na DataModule. Natomiast ja robiłem to trochę inaczej. Miałem swoją własną klasę do obsługi zapytań, wszystkie obiekty bazodanowe (w sensie właśnie connection, query, itp) tworzyłem dynamicznie.

  1. Jak budujesz formatki?

Jak. Normalnie :) Kładę kontrolki na formę i tyle. Tutaj nie ma żadnej filozofii. Chyba, że masz coś konkretnego na myśli.

  1. Gdzie jest logika, np. walidacja danych przed zapisem? Albo jęsli wartość w polu X = Y, to przelicz dane w DataSet

OK, walidacja danych to jest kwestia po stronie formatki. Ale to nie jest logika jaką miałem na myśli. Po prostu dostarczenie do obiektu poprawnych danych. Co do przeliczania w DataSet. Jeśli to jest mało skomplikowane (załóżmy dosłownie kilka warunków), to można to zrobić bezpośrednio w zdarzeniu. Natomiast, jeśli jest coś bardziej skomplikowanego, to nikt Ci nie broni napisać sobie odpowiednich klas do tego z całą hierarchią dziedziczenia i w ogóle. Wszystko może sprowadzić się do wywołania w zdarzeniu jednej metody, obiektu który to wszystko ogarnie.

  1. Jak zapisywane są dane dla skompilowanego, niech będzie, formularza? Sokmplikowanego, tj. takiego który posiada Master, Detail (kilka) , Subdetail (kilka)?

Nie rozumiem pytania.

  1. Ile jest wspólnego kodu? Np. zapis, usuwanie, walidacja danych?

Tyle, ile sobie napiszesz.

Moje podstawowe bóle to były (a były, bo to czas przeszly):

  1. Edycja formatek
  2. Utrzymywanie formatek
  3. Dziedziczenie formatek

Hmm, z tym w Delphi nigdy nie miałem żadnych problemów. Wystarczyło odpowiednio poukładać kontrolki na panelach, porobić anchory itd. Natomiast bardzo mnie denerwuje dziedziczenie formatek w C#, które dość często nie działa tak jak powinno. Ale to inna kwestia.

  1. Wyklikane komponenty niewizualne, które część ustawień mają w kodzie a część w DFM.

Ustawienia w kodzie powinny być ustawieniami dynamicznymi. Jeśli już wyklikujesz sobie komponent niewizualny, to powinieneś jak najwięcej się da ustawić właśnie w ObjectInspectorze. Ale to chyba normalne, nie?

Natomiast ja mam dość specyficzne potrzeby, a podstawowa z nich brzmi: jeden kod do wszystkiego. Aplikacja różni się istotnie od instalacji. Nie chcę robić ifologii do zmiany zachowania, widoku i logiki.

No i dobrze bo do tego robi się odpowiednie struktury klas :)

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0

Jednakże lepiej by było, abyś przeczytał ze zrozumieniem co napisałem.
A nie pisałem o form designer tylko o LiveBindings i jego edycji.

To mi się zmieszało. Nie używałem LiveBindings nigdy, więc nie wiem jak to działało. Kiedyś byłem na konferencji dotyczącej zdaje się XE3 i tam się tym szczycili, więc pewnie działało.

Naprawdę? Ile Ty masz lat, że wierzysz we wszystko co na konferencjach mówi producent? A co ma powiedzieć, że nie działa?
Dam przykład (kto był w tym roku w Rawie Mazowieckiej, ten może pamięta); Moskwa opowiadał o FMX, w pewnym momencie wspominał o klasie TLocation (tak to się chyba nazywa, chodzi o obsługę GPSa w urządzeniach) i mówi, że to generalnie nie zawsze działa. Na dodatek potrafi zawiesić urządzenie. Mina przedstawicieli producenta - bezcenna, zwłaszcza jak głosy na sali potwierdzają - "tak ja też spotkałem się z tym problemem"....

Poza tym, szczycili... Taki binding powinien być w Delphi co najmniej od ponad 10 lat!
Już nie chce mi się pisać, że w pierwszej wersji działało to i owszem - na prezentacji. Sama wydajność była poniżej krytyki, tak słaba, że dyskwalifikowała to rozwiązanie przy obsłudze list (czyli binding z listy obiektów do np. ListView; zresztą na SO można znaleźć takie tematy). Żeby oddać sprawiedliwość, to problem nasilał się w przypadku FMX. Dla VCL działało to znośnie.
A teraz to Delphi oni czołówkę, a nie na odwrót...

Ale to nie jest tak, że tylko wyklikać albo w ogóle. W kodzie też to można ogarnąć przecież. To są dwie różne drogi to osiągnięcia tego samego celu.

Czy ja pisałem, że się nie da tego z kodu zrobić?
Nie, ja pisałem, że nie ma do tego dokumentacji - porządnej i wyczerpującej.

Nie wierzysz, to proszę tutorial:
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Programatically_Binding_Created_Objects
I pierwsze zdanie:
"Caution: The programmatic method described here is NOT the standard way to implement binding expressions."
Nosz urwa spadłem z krzesła...

Pewnie, można powiedzieć - przecież to nic i czepiam się. Można. Tylko dla mnie programowanie to nie zabawa, tylko podstawa egzystencji.
A więc jak mi producent pisze, że to da się ale de-facto jest to hack, to ja się zaczynam poważnie zastanawiać, od której wersji się nie da.
Bo tak, przecież ostrzegali...

Generalnie to, jak coś działa pod spodem, nie powinno Cię, jako programisty wykorzystującego bibliotekę, interesować. Chyba, że masz naprawdę specyficzne wymagania i oczekiwania. Dlatego możesz zajrzeć do kodu.

Raczysz żartować?
Programista ma się nie interesować jak to działa, tylko bezkrytycznie używać?

Nie mówię, że bezkrytycznie używać. Nie wiem, czy się nie rozumiemy źle. Naturalnie należy znać zależności między obiektami itp. Ale jeśli mam obiekt, który ma metodę:

Kopiuj
explodeTheWorld();

to tak naprawdę ważne jest dla mnie, co ta metoda robi, a nie w jaki sposób. Tak jest ZAZWYCZAJ. Bo załóżmy metoda:

Kopiuj
 
drawSquare();

to już może mieć znaczenie, czy kwadrat jest rysowany bezpośrednio przez GPU, czy też przez jakieś obiekty systemowe. Ale w takich wypadkach wystarczy mi ta wiedza. Bo co mnie interesuje sposób w jaki ten kwadrat jest rysowany?

Delphi to takie narzędzie, które uczy bardzo, ale to bardzo złych nawyków. A najgorsze jest to, że sam producent to promuje.
Efekt tego jest taki, że gro użytkowników Delphi nie programuje obiektowo. Oni używają obiektów, a to nie jest to samo.

OK, z tym się zgodzę. Faktycznie w Delphi jest za dużo funkcji, za mało metod.

Z kolei z tym ja się nie zgodzę. Bo tak było, ale to się zmienia.
Popatrz sobie na moduł IOUtils na przykład - to samo jest dostępne jako kod proceduralny, ale tam mamy śliczne metody klasowe.
Tego jest coraz więcej - i bardzo dobrze.

Ale to są rzeczy ciągnięte, jak sam zauważyłeś, od wielu lat. I teraz byłoby lekkim strzałem w kolano np. usunięcie funkcji format. Chociaż mogliby utworzyć np. klasę String.

Mówiłeś, że w której wersji piszesz? Ostatnio na XE5, dobrze pamiętam?
Musze Cię zmartwić, nie znasz narzędzia którego używasz, ponieważ jest to od wersji XE3.
I nie, nie jest tak że String jest klasą (to by był dopiero hardcore - tworzyć i zwalniać każdego stringa :D), ale jest tak, że dla typów prostych można utworzyć class helper.

A tu masz opis TStringHelper:
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.SysUtils.TStringHelper_Methods

Ale wtedy posypałyby się stare kody, bo wielkość liter w Delphi nie ma znaczenia. Więc naprawdę trzeba by ostro przeryć całe środowisko, co skończyłoby się brakiem kompatybilności wstecznej. Już były problemy z migracją, gdy string przestał być ansi, a zaczął być unicodowy.

Bez przesady, to nie jest aż tak wielki problem jaki miał właśnie miejsce z ANSI/Unicode oraz kompilatorem 32/64 bit. Chociaż przy poprawnie napisanym kodzie, to tez nie był duży kłopot.
BTW - wiedziałeś, że od wersji XE3 w Delphi jest zero-based-string? Domyślnie OFF :D
Poza tym porządny wsparcie dla porządnego namespace bardzo by pomógł, a nie takie nie wiadomo co to jest, co jest.
Prawda jest taka, że rozwój samego języka i RTLa napędza FMX, ponieważ kod wieloplatformowy to naprawdę poważny problem do rozwiązania.
No i pchają tego FMX na siłę... Zastanawiam się tylko kiedy to zdechnie na amen :D

Trzeba sobie zdać sprawę z tego, że Delphi faktycznie niektóre rzeczy robi nie w sposób obiektowy. Ale taka jest po prostu specyfika języka. Jednym to pasuje, innym nie. Ale chyba nie można powiedzieć, że przez to Delphi jest lepsze albo gorsze.

Chodzi Ci o funkcje podstawowe w RTL? Co się dziwić - Delphi to był zawsze Windows, a czyste WinAPI przeca jest proceduralne...
Mi to nie przeszkadza, ale zaczyna to być coraz ładniej opakowane.
I fajnie.

To pokaż mi jak to robisz, ciekawym.
Może faktycznie czegoś nie wiem i się dowiem.
Zadam kilka pytań pomocniczych:

  1. Gdzie są tworzone, utrzymywane obiekty DAL (wszystko co do bazy danych potrzebne; connection, query, itd.)?

Teoretycznie powinny być na DataModule. Natomiast ja robiłem to trochę inaczej. Miałem swoją własną klasę do obsługi zapytań, wszystkie obiekty bazodanowe (w sensie właśnie connection, query, itp) tworzyłem dynamicznie.

  1. Jak budujesz formatki?

Jak. Normalnie :) Kładę kontrolki na formę i tyle. Tutaj nie ma żadnej filozofii. Chyba, że masz coś konkretnego na myśli.

  1. Gdzie jest logika, np. walidacja danych przed zapisem? Albo jęsli wartość w polu X = Y, to przelicz dane w DataSet

OK, walidacja danych to jest kwestia po stronie formatki.

A co ma prezentacja danych do jej walidacji? ;-)
Wiesz, moje pytania były tendencyjne - praktycznie wszyscy programują w ten sposób.
Można to zrobić koszernie, ale trzeba się napocić...

Ale to nie jest logika jaką miałem na myśli.

Nie jest. Ale jest z nią ściśle powiązana i na pewno nie powinna być na formatce, a w modelu danych.
Tylko to Delphi nie ma modelu danych by-design...

Po prostu dostarczenie do obiektu poprawnych danych. Co do przeliczania w DataSet. Jeśli to jest mało skomplikowane (załóżmy dosłownie kilka warunków), to można to zrobić bezpośrednio w zdarzeniu. Natomiast, jeśli jest coś bardziej skomplikowanego, to nikt Ci nie broni napisać sobie odpowiednich klas do tego z całą hierarchią dziedziczenia i w ogóle. Wszystko może sprowadzić się do wywołania w zdarzeniu jednej metody, obiektu który to wszystko ogarnie.

I to jest właśnie Delphiowe podejście... raz tak, a raz siak. To jest drogi Kolego bardzo zły nawyk.
No chyba, że lubimy debugować czary, bo nie wiadomo co ta aplikacja robi - a potem się okazuje, że ktoś dopisał jakiś kod w zdarzeniu (bo tak, kliknął sobie na formatce w zdarzenie komponentu, wpisał dwie linie kodu i zadowolony) i wszystko idzie w rozsypkę.
Jasne, to nie jest problem Delphi tylko programowania w ogóle - jak coś robić, a jak nie i dlaczego nie.

  1. Jak zapisywane są dane dla skompilowanego, niech będzie, formularza? Sokmplikowanego, tj. takiego który posiada Master, Detail (kilka) , Subdetail (kilka)?

Nie rozumiem pytania.

  1. Ile jest wspólnego kodu? Np. zapis, usuwanie, walidacja danych?

Tyle, ile sobie napiszesz.

Ja sobie napisałem - jedną klasę, która zarządza tym wszystkim niezależnie od skomplikowania modelu danych.
Ale wiem, że to nieczęsta praktyka; częstsza jest taka.

Kopiuj
 try
   conn.BeginTransaction;
   if dsMaster.State in dsEditStates then
     dsMaster.Post;
   if dsDetail.State in dsEditStates then
     dsDetail.Post;
   conn.Commit;
 except
   conn.Rollback;
   raise;
 end;

I powtarzamy taką wyliczankę na każdym okienku liczonym w setkach.
Wypas :)

Moje podstawowe bóle to były (a były, bo to czas przeszly):

  1. Edycja formatek
  2. Utrzymywanie formatek
  3. Dziedziczenie formatek

Hmm, z tym w Delphi nigdy nie miałem żadnych problemów. Wystarczyło odpowiednio poukładać kontrolki na panelach, porobić anchory itd. Natomiast bardzo mnie denerwuje dziedziczenie formatek w C#, które dość często nie działa tak jak powinno. Ale to inna kwestia.

Nie chodzi mi o to, że edytor formatek źle działa w Delphi. Działa OK.
Chodzi o to, że każdą z nich trzeba zrobić. Rozwijać i utrzymywać.

Wyobraź sobie, że masz główny obiekt w Twoim systemie i zaistniała potrzeba dodawania nowego atrybutu (niech będzie, że to pole w tabeli).
Banał prawda? Prawda.
A teraz ten obiekt jest wykorzystywany na 20 albo i 100 formatkach i na każdej z nich ma być dodane to nowe pole + dodatkowa logika zależna od wartości tego pola, która ingeruje w logikę na innych formatkach.
No to mamy bagno...
Zrobienie tego jest proste, ale cholernie żmudne i na pewno urodzą się nowe błędy.

A nie lepiej by było dodać ten atrybutu do modelu danych + dopisać te kilka linii kodu do logiki i koniec?
Reszta, włącznie z rozbudową wszystkich formatek, robi się sama.

  1. Wyklikane komponenty niewizualne, które część ustawień mają w kodzie a część w DFM.

Ustawienia w kodzie powinny być ustawieniami dynamicznymi. Jeśli już wyklikujesz sobie komponent niewizualny, to powinieneś jak najwięcej się da ustawić właśnie w ObjectInspectorze. Ale to chyba normalne, nie?

Raczej typowe. Natomiast ja jestem absolutnie przeciwny takiemu postępowaniu.
Wolę kod, ponieważ wszystko widzę w jednym miejscu. Zmieniam w jednym miejscu i działa.
Tak jest prościej i bezpieczniej.
Ale nie zawsze tak robiłem, kiedyś tez uważałem to za swego rodzaju fanaberię; do czasu...

Natomiast ja mam dość specyficzne potrzeby, a podstawowa z nich brzmi: jeden kod do wszystkiego. Aplikacja różni się istotnie od instalacji. Nie chcę robić ifologii do zmiany zachowania, widoku i logiki.

No i dobrze bo do tego robi się odpowiednie struktury klas :)

Naprawdę chciałbym je zobaczyć, jakiego miałbyś pomysła na rozwiązanie pewnych kwestii. To byłoby szalenie ciekawe :)

M2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

Pascal i delphi to martwe języki :I

Dzisiaj zastosowanie mają Ruby, Python, Java, C++ i C# reszta nie ma większego sensu.

No chyba, że rozmawiamy o tym jak nauczyć kobietę programować pralkę to C lub zrobić stronę to JavaScript i PHP.

Podajcie przykład jakiejś aplikacji co z tych języków korzysta, bo C++ to masa gier i to od dawien dawna jest w nim tworzonych. Python i Ruby to strony, C# pierwsza lepsza destkopowa aplikacja na Windows. Java oprócz stron to także masa aplikacji biznesowych, androidowych + gry mobilne. Do tego o ile te języki, które wymieniłem różnią się to są w pewien sposób podobne - a taki Pascal ma dla przykładu już zupełnie inną składnie.

  • Rejestracja: dni
  • Ostatnio: dni
0

Najlepiej spojrzeć na oferty pracy - rzut okiem na pracuj.pl nie pozostawia złudzeń - 7 ofert pracy w tym języku z czego połowa dopuszcza znajomość innego języka, tylko jedna oferta pracy z Krakowa; podane w jednej ofercie widełki dla seniora 4-6k brutto to poniżej zarobków juniora w innym języku
W statystykach github widać że delphi ani pascala nie ma nawet w pierwszej 50-tce języków wśród nowych i utrzymywanych repozytoriów

Krótko - delphi żyje (bo jest rozwijany, nadal są w nim utrzymywane projekty i podobno nawet tworzone nowe) ale co to za życie
Jeśli chcesz hobbistycznie tworzyć sobie użytkowe programy na własny użytek, nie chcąc uczyć się nowych technologii to czemu nie
Jeśli chcesz dopiero zacząć się uczyć tego języka to nie ma to większego sensu
Jeśli chcesz kiedyś zacząć zarabiać na znajomości tego języka to raczej odradzam bo szanse na znalezienie posady są małe - nie ma ofert dla juniorów, zarobki dla starych będą raczej tylko spadać (skoro pracownicy nie mają wyboru ofert to można im proponować mniej)

</delphi> #pdk

  • Rejestracja: dni
  • Ostatnio: dni
0

Zgadzam się z dwoma powyższymi postami. Smutne, że ciągle tu są fanboje, którzy twierdzą że Delphi dziś dalej coś znaczy. Nie, Delphi dziś już nic nie znaczy, zupełnie nic. Po prostu nie słuchać ludzi, którzy dawno już zatracili kontakt z rzeczywistością

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1

Fanboje? Gdzie? Kto? Połowa postów w tym wątku zawiera sensowną i merytoryczną krytykę Delphi, napisaną przez tych, którzy tę technologię znają i pracują z nią od lat lub pracowali latami (więc taka krytyka ma dużą wartość); Za dużo zostało już napisane, aby wciąż z uporem maniaka twierdzić, że w tym dziale nie da się napisać krytyki i że wszyscy nie wiedzą co piszą;

Natomiast smutne jest to, że w tym wątku (i każdym podobnym poprzednim) wypowiadają się ludzie, którzy o tej techonolgii nie mają pojęcia; Nie pracowali z nią i nie pracują, liznęli może podstawy (tak jak ten poprzedni geniusz, co składnie porównywał i jęczał, że inna niż inne) i których wiedza zatrzymała się na Delphi7 - ale do krytyki są pierwsi; Smutne jest również to, że podanie zalet Delphi bez wahania nazywane jest fanbojstwem, tak jakby Delphi jako język/IDE miało same wady; Smutne jest to, że obalanie mitów typu "Delphi to trup" nazywane jest utraceniem kontaktu z rzeczywistością;

Smutne, że ciągle są tu niedoinformowani hejterzy, niemający pojęcia o tym co wypisują; Większość nieuargumentowanej krytyki jak zwykle płynie od anonimów, których to wiedzy na temat Delphi nie ma jak potwierdzić i którzy tą wiedzą jak widać nie emanują; Bardzo boli ich to, że Delphi nie jest martwe i że nikt nie da sobie wmówić takich bzdur, dzięki czemu co kilka postów pojawia się post anonima (ale nie tylko) z kolejnymi banialukami :]

  • Rejestracja: dni
  • Ostatnio: dni
0

Co do składni to się zgodzę - jest poroniona. Taki Cobol dzisiejszych czasów

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
2

Delphi jest aktualnie w stanie "nieumarłym".

Co to znaczy:

  • technicznie bardzo fajne narzędzie - było 20 lat temu, obecnie nadal do desktopa na Windows nie ma chyba nic wygodniejszego do tworzenia GUI
  • popularnością bije takie języki jak Objective-C i Visual Basic (co nie jest złym wynikiem, 11 miejsce), ale są to języki z poprzedniej epoki http://www.tiobe.com/tiobe-index/
  • jest jeszcze pewnie masa softu w tym napisana
  • są ciągle oferty pracy, z reguły nie w tym mieście co trzeba

Ale:

  • obecnie większość softu to webówka, desktop w każdej technologii odchodzi w cień
  • na rynku desktopu jest jeszcze C#, Qt i Lazarus
  • na rynku web czy mobile Delphi nie ma żadnego znaczenia
  • gdyby klient chciał sam rozwijać aplikację C/S, to koszt licencji (21k PLN) jest spory dla osób prywatnych i małych firm, zostają tylko średni i duzi klienci lub aplikacje B2C
  • czy duzi i średni klienci wejdą w coś co nie jest OSS, pochodzi od jednej firmy i tym samym może za chwilę zniknąć?
  • aplikacje dla użytkowników końcowych (B2C) aktualnie głównie się sprzedają na rynku mobilnym
  • dla Delphi zostaje utrzymaniówka, POSy i aplikacje niskobudżetowe lub darmowe (dla klienta)

Naprawdę w tym wszystkim nie ma znaczenia, że w Delphi XEn są stringi zero-based czy wprowadzono LiveBindings. W dużych aplikacjach takie rzeczy opłaca się robić samemu.

Również nie ma już znaczenia przewaga Delphi w postaci integracji z bazami danych. To było przewagą w Delphi 2, obecnie używa się ORM-a i bazy danych można nawet nie zauważyć w kodzie, przykład: https://spring.io/guides/gs/accessing-data-jpa/

(owszem, moja wiedza zatrzymała się na D7, znam D1 - D7, 6 lat doświadczenia zawodowego w tym języku, poza pracą - praca dyplomowa i ładnych parę lat temu dwie aplikacje klasy shareware, obecnie niedostępne na rynku).

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0
vpiotr napisał(a)

Obecnie nadal do desktopa na Windows nie ma chyba nic wygodniejszego do tworzenia GUI

Chyba trochę się zapędziłeś z tym stwierdzeniem. VS i WinForms plus WPF zjadają technologię Delphi z lat 90'tych bez popity :) No chyba, że chodziło Ci o C++/CLR/CLI ale to technologia dawno będąca reliktem przeszłości w apkach na desktop Windowsa.

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
0
grzesiek51114 napisał(a):
vpiotr napisał(a)

Obecnie nadal do desktopa na Windows nie ma chyba nic wygodniejszego do tworzenia GUI

Chyba trochę się zapędziłeś z tym stwierdzeniem. VS i WinForms plus WPF zjadają technologię Delphi z lat 90'tych bez popity :) No chyba, że chodziło Ci o C++/CLR/CLI ale to technologia dawno będąca reliktem przeszłości w apkach na desktop Windowsa.

Na desktopie .NET to dla mnie niepotrzebny narzut (instalacyjny). No i przyznam, że znam bardzo mało aplikacji desktop zrobionych w C#.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

Na desktopie .NET to dla mnie niepotrzebny narzut (instalacyjny) - więc pewnie to samo myślisz o Jawie :) Poza tym, tak jak powiedział @Aventus aplikacji pisanych w .NET'cie na desktop (głównie biznesowych) jest multum i to co mówisz jest zwyczajnie nieprawdą. Pisanie takich apek w C++ z wszystkimi jego niespodziankami czy całą masą UB to proszenie się o kłopoty (no bo po Delphi co innego dzisiaj tak naprawdę zostaje do apek biznesowych oprócz .NET'a i Jawy?). Szybkość powstawania apek i wygoda ich pisania w większości rekompensują ceplusplusowe niespodzianki. To samo zresztą dotyczy Jawy.

  • Rejestracja: dni
  • Ostatnio: dni
0

Narzut instalacji frameworka. Ale się uśmiałem. . NET framework jest już dzisiaj integralną częścią każdego Windowsa, jest dostępny od razu i niczego nie trzeba instalować.

  • Rejestracja: dni
  • Ostatnio: dni
0

Przypominam jednakowoż, że XP to system sprzed kilkunastu lat. Co do .net to mogę się mylić, ale wydaje mi się że trzeci service pack przyniósł już wbudowane .net 2.0.

Nie rozumiem jednak co to jest "narzut instalacji frameworka". Skoro i tak instalator aplikacji automatycznie instaluje frameworka w razie potrzeby (a tak powinno być), to ten wasz "narzut" i tak każdy ma dojpie.

Na koniec - dziś aplikacja natywna to więcej kłopotów niż korzyści w świecie wspieranych przez twórców aplikacji biznesowych. Wystarczy wspomnieć chociażby o łatwości debugowania, stack trace z frameworka zwykle mówi o wiele więcej, łącznie nawet z linią kodu gdzie poleciał wyjątek. A nawet jak jest wyjątek nie obsłużony, to i tak zwykle wiadomo o co chodzi albo może chodzić. Nie można tego samego powiedzieć o aplikacjach natywnych.

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
Zibiiiii napisał(a):

Przypominam jednakowoż, że XP to system sprzed kilkunastu lat. Co do .net to mogę się mylić, ale wydaje mi się że trzeci service pack przyniósł już wbudowane .net 2.0.

I kto pisze na tym starociu, które praktycznie do niczego się nie nadaje? Zapewne Ty nie piszesz, zgadłem?
A aplikacja napisana w Deplhi 5 sprzed piętnastu lat, bez zająknięcia odpali się na najnowszym Windows 10.
A jeśli zająknięcie jest, to wynika tylko i wyłącznie z tego jak napisane jest program (np. popularne kiedyś zapis ustawień do katalogu aplikacji), a nie z ograniczeń samego narzędzia.
I tu jest przewaga aplikacji natywnej.
Tylko tak naprawdę taka przewaga dziś, to żadna przewaga.

Nie rozumiem jednak co to jest "narzut instalacji frameworka". Skoro i tak instalator aplikacji automatycznie instaluje frameworka w razie potrzeby (a tak powinno być), to ten wasz "narzut" i tak każdy ma dojpie.

Na koniec - dziś aplikacja natywna to więcej kłopotów niż korzyści w świecie wspieranych przez twórców aplikacji biznesowych. Wystarczy wspomnieć chociażby o łatwości debugowania, stack trace z frameworka zwykle mówi o wiele więcej, łącznie nawet z linią kodu gdzie poleciał wyjątek. A nawet jak jest wyjątek nie obsłużony, to i tak zwykle wiadomo o co chodzi albo może chodzić. Nie można tego samego powiedzieć o aplikacjach natywnych.

Nie masz pojęcia o czym piszesz. Najmniejszego.
To samo (i znacznie więcej, zależy czego się używa) jest na pokładzie, albo przez JCLDebug, albo przy pomocy takich narzędzi jak EurekaLog czy madExcept.
Dwa ostatnie rozwiązania zjadają ten StackTrace z .NET bez śniadania i popitki.

A jeśli ktoś daje będzie twierdził, że aplikacje natywne giną to niech mi wytłumaczy po co jest taki .NET Native, którym fanboje .NETa jarają się od niedawna?

WL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1084
0
vpiotr napisał(a):

Delphi jest aktualnie w stanie "nieumarłym".

Co to znaczy:

  • technicznie bardzo fajne narzędzie - było 20 lat temu, obecnie nadal do desktopa na Windows nie ma chyba nic wygodniejszego do tworzenia GUI
  • popularnością bije takie języki jak Objective-C i Visual Basic (co nie jest złym wynikiem, 11 miejsce), ale są to języki z poprzedniej epoki http://www.tiobe.com/tiobe-index/
  • jest jeszcze pewnie masa softu w tym napisana
  • są ciągle oferty pracy, z reguły nie w tym mieście co trzeba

Ale:

  • obecnie większość softu to webówka, desktop w każdej technologii odchodzi w cień
  • na rynku desktopu jest jeszcze C#, Qt i Lazarus
  • na rynku web czy mobile Delphi nie ma żadnego znaczenia
  • gdyby klient chciał sam rozwijać aplikację C/S, to koszt licencji (21k PLN) jest spory dla osób prywatnych i małych firm, zostają tylko średni i duzi klienci lub aplikacje B2C

Skąd taka cena? Delphi tanie nie jest, prawda, ale zawyżyłeś cenę na oko 2,5 raza. Wersja Enterprise nie jest konieczna do tego, wystarczy Pro.

  • czy duzi i średni klienci wejdą w coś co nie jest OSS, pochodzi od jednej firmy i tym samym może za chwilę zniknąć?

Dla mnie duży klient, to ponad 250-300 osób zatrudnienia. I nie nie mają z tym problemów.

  • aplikacje dla użytkowników końcowych (B2C) aktualnie głównie się sprzedają na rynku mobilnym

Doskonale wiesz, że te uogólniony stereotyp. Prawda jest bardziej niejednorodna...

  • dla Delphi zostaje utrzymaniówka, POSy i aplikacje niskobudżetowe lub darmowe (dla klienta)

To twoja opinia. Z mojego punktu widzenia to nieprawda.
Poza tym, co to znaczy niski budżet?

Naprawdę w tym wszystkim nie ma znaczenia, że w Delphi XEn są stringi zero-based czy wprowadzono LiveBindings. W dużych aplikacjach takie rzeczy opłaca się robić samemu.

Nie zgadzam się. Właśnie w dużych aplikacjach takie rzeczy powinni być dostarczone przez narzędzie, a nie dziergane drutem.
To dzierganie zawsze się potem czkawką odbija i bywają poważne problemy przy migracji do innej technologi lub nowszej wersji.

Również nie ma już znaczenia przewaga Delphi w postaci integracji z bazami danych. To było przewagą w Delphi 2, obecnie używa się ORM-a i bazy danych można nawet nie zauważyć w kodzie, przykład: https://spring.io/guides/gs/accessing-data-jpa/

Też się nie zgadzam.
BTW - a ten link to co ma niby przedstawiać? Że tak np. (bo to nie jedyny sopsób/framework) się to robi? Wiem o tym doskonale.
A wiesz o tym, że w Delphi można zrobić to samo w dokładnie ten sam sposób?
A tam gdzie masz ochotę lub zależy Ci na bezkompromisowej wydajności nie jesteś uwiązany do ORM, możesz zrobić to ręcznie przez SQL.
Ergo - żaden argument na nie.

(owszem, moja wiedza zatrzymała się na D7, znam D1 - D7, 6 lat doświadczenia zawodowego w tym języku, poza pracą - praca dyplomowa i ładnych parę lat temu dwie aplikacje klasy shareware, obecnie niedostępne na rynku).

D7 - właśnie.
Tylko dla Delphi rozwój od wersji 2007 do obecnej, to jest naprawdę masa nowości i usprawnień. To dalej nie jest jeszcze klasa .NET, ale nie można tego porównywać do D7. Ogólna idea jest podobna, OK - ale same możliwości języka i IDE wzrosły od tego czasu zylion razy.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0
wloochacz napisał(a):

Naprawdę? Ile Ty masz lat, że wierzysz we wszystko co na konferencjach mówi producent? A co ma powiedzieć, że nie działa?
Dam przykład (kto był w tym roku w Rawie Mazowieckiej, ten może pamięta); Moskwa opowiadał o FMX, w pewnym momencie wspominał o klasie TLocation (tak to się chyba nazywa, chodzi o obsługę GPSa w urządzeniach) i mówi, że to generalnie nie zawsze działa. Na dodatek potrafi zawiesić urządzenie. Mina przedstawicieli producenta - bezcenna, zwłaszcza jak głosy na sali potwierdzają - "tak ja też spotkałem się z tym problemem"....

OK, pokazywali na FMX i działało normalnie. Tyle, że to były dość proste rzeczy.

Nie wierzysz, to proszę tutorial:
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Programatically_Binding_Created_Objects
I pierwsze zdanie:
"Caution: The programmatic method described here is NOT the standard way to implement binding expressions."

No nie jest to miłe, ale nie jest też wyjątkiem. Przykładu nie trzeba szukać daleko. MFC i ręczna edycja plików RC. Da się? Jasne. Ale jak potem zrobisz coś w designerze (chociażby przesunięcie kontrolki o 1 piksel), to Ci rozwali wszystkie Twoje zmiany i tak naprawdę nie wiadomo, co zostanie.

Pewnie, można powiedzieć - przecież to nic i czepiam się. Można. Tylko dla mnie programowanie to nie zabawa, tylko podstawa egzystencji.

Myślę, że jak dla większości ludzi tutaj :)

A więc jak mi producent pisze, że to da się ale de-facto jest to hack, to ja się zaczynam poważnie zastanawiać, od której wersji się nie da.
Bo tak, przecież ostrzegali...

Tak, jak mówię. To nie jest kwestia jedynie Delphi. Takie rzeczy ("da się, ale nie jest to zalecane w taki sposób") są w wielu językach. Pisałem wyżej o C++ i MFC, są też podobne cuda w C#.

Ale to są rzeczy ciągnięte, jak sam zauważyłeś, od wielu lat. I teraz byłoby lekkim strzałem w kolano np. usunięcie funkcji format. Chociaż mogliby utworzyć np. klasę String.

Mówiłeś, że w której wersji piszesz? Ostatnio na XE5, dobrze pamiętam?
Musze Cię zmartwić, nie znasz narzędzia którego używasz, ponieważ jest to od wersji XE3.

Co jest od wersji XE3? Format w postaci metody? Możliwe, że nie znam XE5, bo ostatnio pisałem w Delphi jakieś 2, 3 lata temu i to dość krótko w XE5 :)

I nie, nie jest tak że String jest klasą (to by był dopiero hardcore - tworzyć i zwalniać każdego stringa :D), ale jest tak, że dla typów prostych można utworzyć class helper.

No zgoda, ale nigdzie nie pisałem, że string jest klasą. Niemniej jednak do takiego miana pretenduje przynajmniej od wersji XE2, gdzie stringi zaczęły być (możliwe, że wcześniej) bardziej skomplikowaną strukturą w pamięci niż do tej pory. Doszło kodowanie, reference counting i kilka innych rzeczy.

BTW - wiedziałeś, że od wersji XE3 w Delphi jest zero-based-string? Domyślnie OFF :D

Nie wiedziałem, ale gdyby to było włączone domyślnie, to dopiero apki by się zaczęły sypać :)

Poza tym porządny wsparcie dla porządnego namespace bardzo by pomógł, a nie takie nie wiadomo co to jest, co jest.
Prawda jest taka, że rozwój samego języka i RTLa napędza FMX, ponieważ kod wieloplatformowy to naprawdę poważny problem do rozwiązania.
No i pchają tego FMX na siłę... Zastanawiam się tylko kiedy to zdechnie na amen :D

Tu mamy podobne podejście :)

Po prostu dostarczenie do obiektu poprawnych danych. Co do przeliczania w DataSet. Jeśli to jest mało skomplikowane (załóżmy dosłownie kilka warunków), to można to zrobić bezpośrednio w zdarzeniu. Natomiast, jeśli jest coś bardziej skomplikowanego, to nikt Ci nie broni napisać sobie odpowiednich klas do tego z całą hierarchią dziedziczenia i w ogóle. Wszystko może sprowadzić się do wywołania w zdarzeniu jednej metody, obiektu który to wszystko ogarnie.

I to jest właśnie Delphiowe podejście... raz tak, a raz siak. To jest drogi Kolego bardzo zły nawyk.

I tak, i nie. To zależy głównie od sytuacji. Jeśli masz do zwalidowania jedną zmienną, to nie będziesz tworzył do tego jakiegoś jebitnego mechanizmu, bo nie ma to sensu. Więcej czasu stracisz na tym, niż co warte. Ale, gdy takich rzeczy zaczyna dochodzić, wtedy trzeba przemyśleć lekkie przeprojektowanie. Ale to nie jest kwestia języka, tylko indywidualnego podejścia do projektu, jego wymagań, założeń itd. Przecież w C# też możesz takie rzeczy robić w zdarzeniu na formie. Nikt Ci tego nie broni.

Jasne, to nie jest problem Delphi tylko programowania w ogóle - jak coś robić, a jak nie i dlaczego nie.

No też właśnie :)

Kopiuj
 try
   conn.BeginTransaction;
   if dsMaster.State in dsEditStates then
     dsMaster.Post;
   if dsDetail.State in dsEditStates then
     dsDetail.Post;
   conn.Commit;
 except
   conn.Rollback;
   raise;
 end;

I powtarzamy taką wyliczankę na każdym okienku liczonym w setkach.
Wypas :)

No tu jest już kwestia programisty i architektury systemu. To nie jest kwestia języka.

Wyobraź sobie, że masz główny obiekt w Twoim systemie i zaistniała potrzeba dodawania nowego atrybutu (niech będzie, że to pole w tabeli).
Banał prawda? Prawda.
A teraz ten obiekt jest wykorzystywany na 20 albo i 100 formatkach i na każdej z nich ma być dodane to nowe pole + dodatkowa logika zależna od wartości tego pola, która ingeruje w logikę na innych formatkach.
No to mamy bagno...
Zrobienie tego jest proste, ale cholernie żmudne i na pewno urodzą się nowe błędy.

Tak, dlatego możesz dziedziczyć formularze przecież. Poza tym nie musisz tego robić na każdej formie. Możesz mieć frame, możesz mieć dodatkową formę, którą kładziesz na panelu na innej formie. I tak naprawdę robisz to TYLKO w jednym miejscu.

A nie lepiej by było dodać ten atrybutu do modelu danych + dopisać te kilka linii kodu do logiki i koniec?
Reszta, włącznie z rozbudową wszystkich formatek, robi się sama.

No i właśnie tak można zrobić, robiąc jak napisałem powyżej.

Raczej typowe. Natomiast ja jestem absolutnie przeciwny takiemu postępowaniu.
Wolę kod, ponieważ wszystko widzę w jednym miejscu. Zmieniam w jednym miejscu i działa.
Tak jest prościej i bezpieczniej.
Ale nie zawsze tak robiłem, kiedyś tez uważałem to za swego rodzaju fanaberię; do czasu...

Ale nikt Ci tego nie broni. Możesz poustawiać w kodzie WSZYSTKIE właściwości. Tylko po co? Nie ma to sensu.

Naprawdę chciałbym je zobaczyć, jakiego miałbyś pomysła na rozwiązanie pewnych kwestii. To byłoby szalenie ciekawe :)

Z dodaniem nowego pola już Ci napisałem wyżej. Podejrzewam, że z każdym Twoim problemem (a przynajmniej z większością) można się uporać. Natomiast widzę, że problemy o których piszesz nie dotyczą w ogóle problemów środowiska (poza rzeczami w stylu: "ręcznie lepiej tego nie robić", bo z tym nie ma co dyskutować), tylko problemów z architekturą systemu, który tworzysz.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Narzut instalacji frameworka. Ale się uśmiałem. . NET framework jest już dzisiaj integralną częścią każdego Windowsa, jest dostępny od razu i niczego nie trzeba instalować.

Narzut instalacji frameworka jest bliski zerowemu, bo faktem jest że na ogromnej większości komputerów z Windowsem .NET Framework jest.

Ale:

  1. nie ma takiej gwarancji
  2. trend może się w przyszłości zmienić
  3. nie ma gwarancji że będzie to wersja która nas interesuje

W tej chwili jeśli chcemy zminimalizować potrzebę doinstalowywania frameworka, największy sens ma używanie wersji 4.0.

Zależnie od potrzeb, można zintegrować instalację .NETa z instalatorem naszej aplikacji, albo po prostu napisać w wymaganiach ".NET Framework wersja jakaś tam."

drorat1
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krasnystaw
  • Postów: 1185
1
Zibiiiii napisał(a):

Przypominam jednakowoż, że XP to system sprzed kilkunastu lat. Co do .net to mogę się mylić, ale wydaje mi się że trzeci service pack przyniósł już wbudowane .net 2.0.

Nie. Mam XP SP3 (Lenovo Thinkpad T60), .NET 2.0 musiałem instalować ręcznie, kiedy tylko próbowałem uruchomić coś co tego wymagało. Tak samo i .NET 3.5, żeby można było korzystać z SharpDevelop 3.2. Również .NET 4.0 też pójdzie na tym systemie.

Nie rozumiem jednak co to jest "narzut instalacji frameworka". Skoro i tak instalator aplikacji automatycznie instaluje frameworka w razie potrzeby (a tak powinno być), to ten wasz "narzut" i tak każdy ma dojpie.

Ale są takie aplikacje, które po zainstalowaniu nie pójdą jak na tym XP nie zainstalujesz tego .NET 2.0 albo 3.5 lub 4.0 i wyżej i trzeba to najpierw pobrać, choć na pewno są takie instalatory które to instalują automatycznie.

Na koniec - dziś aplikacja natywna to więcej kłopotów niż korzyści w świecie wspieranych przez twórców aplikacji biznesowych.

Czyżby? Pisałem swego czasu w D5, później była przesiadka na Lazarusa. Przede wszystkim jedna ważna sprawa. Wynikowy format Win32 PE i bez konieczności instalacji .NET Framework, co ma bardzo istotną zaletę tego typu, że można tworzyć w tym DELPHI albo Lazarusie i aplikacje typu portable (jest np. taki nie wiem czy wszystkim tutaj znany projekt PortableApps), więc możesz sobie uruchamiać i bezpośrednio z pendrive. Można by też doszukać się wielu innych problemów, gdzie użycie DELPHI i wynikowego Win32PE i bez tego .NET framework będzie lepszym wyborem.

Pisałem też desktopy w C# (SharpDevelop) pod .NET 2.0 i .NET 3.5 i wiem jak to wszystko wygląda pod tym względem debugowania i ile jest pracy. Fajnie że pod .NET jest wiele bibliotek, co w takim Lazarusie może być dość dużym problemem, jako że jest mało popularny.

  • Rejestracja: dni
  • Ostatnio: dni
0

Po pierwsze, w biznesie nikomu nie są potrzebne żadne aplikacje uruchamiane z pendrive. Klientowi dostarczasz instalator i tyle. Po drugie, instalator twojej aplikacji automatycznie sprawdza czy jest potrzebny framework, jeśli tak to sam go pobiera i instaluje. W czym tu widzicie problem?

Hobbystycznie można się sobie bawić w różne portable apps, ale gdy piszesz soft dla biura albo dla księgowości to takie fanaberie nikomu nie są potrzebne.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie. Mam XP SP3 (Lenovo Thinkpad T60), .NET 2.0 musiałem instalować ręcznie, kiedy tylko próbowałem uruchomić coś co tego wymagało. Tak samo i .NET 3.5, żeby można było korzystać z SharpDevelop 3.2. Również .NET 4.0 też pójdzie na tym systemie.

2.0 i 3.0 są częścią 3.5, więc wystarczy zainstalować 3.5.

Zaktualizowany XP powinien mieć zainstalowany .NET 3.5 + 4.0, bo wchodziły one domyślnie przez Windows Update.
Więc jeśli użytkownik nie ma, to właściwie „jego wina”, niech sobie doinstaluje.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.