Autor Téma: Vývoj pomocí objektů  (Přečteno 1054 krát)

Offline leonell

  • Plnoletý
  • ***
  • Příspěvků: 104
  • Karma: 3
Vývoj pomocí objektů
« kdy: 25-04-2013, 11:36:52 »
Ahoj,
chci se ze zvědavosti zeptat a nevím pořádně jak to nazvat, aby to sedlo. Tak to radši popíšu.

Mám na mysli, zda vyvíjíte někdo tak, že si (případně) vytvoříte UML s objektovým návrhem řešeného problému a  vaše aplikace poté pracuje s objektem TFaktura (místo datasetů QueryFaHlavicka, QueryFaRadek), tento objekt pak nějakým (TMS Aurelius? Jiný?) ORM způsobem persistujete (ukládáte/načítáte) do databáze.
Ve vlastním UI pak nějak (LiveBinding? Ručně?) mapujete vlastnosti objektu do položek formuláře a místo datasources pracujete s generickými kolekcemi objektů.

Ptám se ze zvědavosti, protože v časech minulých jsem se s tím (mimo Delphi) hodně setkával a v Delphi prakticky vůbec.
Ono to má svoje výhody a nevýhody - mně jde spíš o to, zda vůbec je to nějak v praxi využíváno, zda nejsou nějaké limity atd.

Díky za názory.
Leoš

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1531
  • Karma: 37
    • Pepak.net
Re:Vývoj pomocí objektů
« Odpověď #1 kdy: 25-04-2013, 11:49:31 »
Ptám se ze zvědavosti, protože v časech minulých jsem se s tím (mimo Delphi) hodně setkával a v Delphi prakticky vůbec.
Chápu motivaci, která k tomu vede, ale v praxi jsem zatím nenarazil na jediný případ, kdy bych využitím této metody opravdu získal výhody, které teoreticky přináší. Vždycky jsem nakonec došel k tomu, že píšu/udržuji absurdně složitý kód (kvůli potřebě oddělit uložení dat, vizualizaci dat a tu objektovou mezivrstvu), obětuji všechny výhody specializovaných řešení (já nevím, třeba použití uložených procedur tam, kde to má smysl, pohledů jinde, šikovného joinu ještě jinde atd.) a stejně narážím na to, že existuje víceméně přímý (byť třeba trochu kamuflovaný) vztah mezi vizualizací a databází, takže možnost vyměnit jednu vrstvu je jen pustou teorií, protože bych toho stejně musel strašně moc přepsat. A to celé s výhledem, že YAGNI (You Ain't Gonna Need It), protože nikdy nikdo nebude chtít, abych přešel na jinou databázi nebo abych změnil vizualizaci (respektive, když už se bude měnit vizualizace, tak proto, že je potřeba úplně nová funkčnost, kterou původní datový návrh stejně neumí).

Možná se pohybuji ve špatných projektech.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1531
  • Karma: 37
    • Pepak.net
Re:Vývoj pomocí objektů
« Odpověď #2 kdy: 25-04-2013, 11:50:24 »
Jo, a jestli si o tom chceš neco přečíst, tak hledej MVC (Model View Controller), MVP (Model View Presenter) a ještě pár MV-něco.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3096
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Vývoj pomocí objektů
« Odpověď #3 kdy: 25-04-2013, 12:37:13 »
Mám na mysli, zda vyvíjíte někdo tak, že si (případně) vytvoříte UML s objektovým návrhem řešeného problému a  vaše aplikace poté pracuje s objektem TFaktura (místo datasetů QueryFaHlavicka, QueryFaRadek), tento objekt pak nějakým (TMS Aurelius? Jiný?) ORM způsobem persistujete (ukládáte/načítáte) do databáze.
Ve vlastním UI pak nějak (LiveBinding? Ručně?) mapujete vlastnosti objektu do položek formuláře a místo datasources pracujete s generickými kolekcemi objektů.
Ja nekdy od roku 2000 v Delphi pro desktopove aplikace a sluzby pouzivam vlastni ORM nad ruznyma DB (PostgreSQL, SQLite, MySql, MSSQL) a s vlastnim bindingem pro VTV. U ostatnich prvku se prirazuje rucne. A navrhoval jsem to v Case Studiu, ze ktereho jsem Pythonem z SQL scriptu generoval stuby do Delphi.

Weby vcetne fakturace apod. jsme psali vyhradne objektove, zejmena proto, ze vetsina modernich frameworku pro psani webu v jine nez objektove podobe neexistuje.  S Pythonem jsme pouzivali Django, v JEE Hibernate - Spring - Wicket. Hodi se to asi vsude, kde je zakladem aplikce CRUD a kde nekdo udelal binding na widgety.

Jen je treba mit na pameti, ze ty ORM nebyvaji universalni a cas od casu se narazi na nejaka omezeni, leckdy docela neocekavana. Uz si to moc nepamatuju, ale treba u Hibernate me zaskocilo, ze jsem mohl mit jen jeden typ nejake kolekce pro nejakou vazbu mezi entitami, protoze to tahali naraz left joinem z DB apod. U webu jsme se taky trochu trapili s roztazenim transakce pres nekolik http requestu,

Tady jsem namatkou vygooglil neco pro Delphi http://stackoverflow.com/questions/926017/what-patterns-to-use-to-build-layers-for-delphi-win-32-application. U delphi se to IMHO nepouzivalo proto, ze veskery binding widgetu byl jen na data source. Se zavedenim opice je tam nejaky novy binding, ktery by snad mohl byt obecny jako ma treba u WPF v .NETu. Ale nic o tom novem bindingu v Delphi nevim.


Offline leonell

  • Plnoletý
  • ***
  • Příspěvků: 104
  • Karma: 3
Re:Vývoj pomocí objektů
« Odpověď #4 kdy: 25-04-2013, 14:26:39 »
pf1957 - on právě ten TMS Aurelius má nějaký svůj Datasource, který dělá interface pro generické kolekce objektů, takže by mohly (?) odpadnout problémy s bindingem na běžné data-aware komponenty. I když je otázka, zda není přeci jen ten "post-opičí" LiveBinding lepší řešení z hlediska obecnosti.
Jestli budu mít čas tak zkusím na to kouknout a případně přesvědčit Pepáka, že ten postup není až tak špatný jak to možná vypadá :)

Jinak koukám, že jsi taky prolezl půl IT světa - u mně Java+Jboss/Glassfish (web, swt i swing vš jws), pak DotNet+WPF/SL. 
Python zatím jen rekreačně, když si chci zlepšit náladu :)

Díky,
Leoš