ugrás a tartalomhoz

MVC pattern – desktopra és webre (a'la dr. House :-) )

eddig bírtam szó nélkül · 2012. Júl. 25. (Sze), 18.10
Jött egy (szokás szerint) "zseniális" ötletem: szeretném ugyanazt az applikációt párhuzamosan webre és desktopra is elkészíteni.

Valahol elveszthettem a fonalat az MVC tanulmányozásában, mert eredetileg úgy gondoltam, a modell és a kontroller nagyjából azonos lehetne, csak a view az, amit cserélni kell mögötte.
De minél tovább gondolkodom rajta, annál inkább oda lyukadok ki, hogy egyedül a modell, ami közös lehet, ezt akár 1:1-ben fel tudom használni, a view egy része is megírható úgy, hogy csak a megjelenítő eszközt cserélgetem (mondjuk elkészít egy XML-t, amiből aztán ha web, akkor a böngésző állítja elő a HTML-t XSLT segítségével, ha meg desktop pl. gtk-ra vagy qt-re alapozott megjelenítéssel, akkor megírom a szükséges kódot, ami az XML-ben kapott adatokat az adott rendszeren megjeleníti).
De a kontroller?
Jól érzem, hogy itt még annyira sem lehet újrahasznosítani a webre írt kódot desktopon/desktopra írt kontrollert weben, amennyire a view esetében?
Weben mondjuk az URL... khm... előre elnézést, ha marhaságot írok, szóval az URL routing lenne a fő feladata. Desktopon ilyesmi nem jellemző, ott leginkább a GUI-t kezelő rendszer üzeneteinek a feldolgozása lenne a feladata, ami viszont teljes mértékben eltér a webes technológiáktól. (nincs URL, nincs session kezelés stb.)

---------------
dr. House csak úgy jön ide, hogy végeredményben "hangosan" gondolkodom, hátha valaki hozzászólásától beindul az agyam maradéka. :-)
 
1

Pokki

Práger Ádám · 2012. Júl. 25. (Sze), 19.56
Az ötlet már szerintem sokunknak eszébe jutott, a problémád viszont nem feltétlenül az MVC patternel van.

Jelenleg azt mondanám hogy várd meg mi lesz az MS win8 as HTML5 appjaiból, ha meg most azonnal kell, akkor pokki: https://developers.pokki.com/
2

Köszi

eddig bírtam szó nélkül · 2012. Júl. 25. (Sze), 20.24
Köszi szépen, de...
Egyrészt azt hittem, egyértelmű: eszembe sem jutott, hogy egyedi ötlet, csak eddig nem foglalkoztam a témával.

Másrészt inkább az elméleti rész érdekel a téma, nem a gyakorlati kivitelezés lehetősége.
(de ha már gyakorlat: pl. django vs python+gtk vagy színtiszta java stb.)

Ez a pokki is érdekes, de nekem úgy tűnik, nem egészen arra való, amin gondolkodtam...
3

API

Poetro · 2012. Júl. 25. (Sze), 21.53
Amit meg lehet valósítani, hogy írsz egy API-t, amihez Unix socket-eken (vagy valami hasonló technológiával) hozzá lehet férni. Ezzel el tudod érni a tartalmat, és lényegtelen lényegében, hogy micsoda használja. Ekkor a web interface ezt az API-t hívogatod, miközben csinálsz még egy kontroller réteget, de ez már csak a HTTP kéréseket továbbítja az API felé, és onnan adja vissza a választ.
5

Ott szerintem elvész az

eddig bírtam szó nélkül · 2012. Júl. 26. (Cs), 07.10
Ott szerintem elvész az MVC.
Nem?
Szóval csak a szokásos: nem a megoldás a problémás (legalábbis elméletben), hanem egy adott elv/környezet/stb. felhasználásával előállítani mindezt.
Arról nem beszélve, hogy ehhez a változathoz akkor is kellene a web(? feltéve, hogy maradok a http mellett, mert ilyen alapon inkább valami MQ jellegű dologra gondolnék) szolgáltatás, ha egyszerű desktop applikációként használnám.
4

A model egy az egyben

inf · 2012. Júl. 25. (Sze), 23.49
A model egy az egyben újrahasznosítható, a controller és a view csak részben. Nyilván az, hogy mik a bejövő adatok a controllernél függ attól is, hogy a view micsoda. Ha mondjuk egy html űrlapot jelenítesz meg, akkor a controller postData-t fogad... A routing szerintem független a controller-től, ő dönti el, hogy melyik controller kezeli le a kérést attól függően, hogy mit talál a kérésben, de ez lehet url, lehet egy controller neve, egy command object, vagy bármi más... A lényeg, hogy ez is ugyanúgy kicserélhető...

Ha mondjuk ilyesmit csinálnék, akkor silverlight-ban tenném, mert ott elég egyszer megírni. Vagy minimum egy kész keretrendszert használnék fel, ami képes ilyesmire... Ha belegondolsz, a model-en kívül az egész csak transzformáció. Először megtudod a kérésből, hogy melyik controller fogja lekezelni, szóval pl az url-t transzformálod controllerré, utána megadod a controller-nek a kéréssel kapcsolatos adatokat, az meg transzformálja őket a model-nek megfelelő formára, pl egy objektum hálóra. Utána a model már tudja kezelni őket. A view megkapja a model-től a kimenő adatokat, és ő szintén transzformálja őket pl html-re.
6

Asszem, jogos: routingot csak

eddig bírtam szó nélkül · 2012. Júl. 26. (Cs), 07.14
Asszem, jogos: routingot csak úgy kevertem ide, hogy a django-ból indultam ki és mindig elfelejtem, hogy a django (a fejlesztők saját bevallása szerint) nem követi teljesen az MVC-hez szükséges felépítést.

Silverlight? Nem mostanában lőtte le a MS?
7

De

Hidvégi Gábor · 2012. Júl. 26. (Cs), 08.08
Ezentúl nem fogják támogatni a Silverlightot, szerintem nem érdemes foglalkozni vele.

Desktop alkalmazást miért készítesz egyébként, ha meglesz a böngészőben is?
8

Nem készítek, csak jár az

eddig bírtam szó nélkül · 2012. Júl. 26. (Cs), 08.23
Nem készítek, csak jár az agyam, unalmas óráimban.
Mivel érdemi munkára nem tudok koncentrálni, marad, hogy ilyen hülyeségeken gondolkodom. :-)
9

Újra végiggondolva...

eddig bírtam szó nélkül · 2012. Júl. 26. (Cs), 22.16
... nem működőképes az ötlet, csak elméletben.
Ugyanis a gyakorlatban, ha webre akarok fejleszteni, akkor szinte biztos, hogy valamilyen webes keretrendszert fogok használni (kivétel PHP).
Ha ezt teszem, akkor már a modellt sem tudom 1:1-ben átvenni a desktopra - feltéve, hogy használom a keretrendszer ilyen jellegű szolgáltatásait (Djangoból kiindulva)
Szóval ez egy hamvába hótt ötlet volt.
(hogy miért pont a Tiszta kód, egységtesztelésről szóló részének olvasása közben jutott ez eszembe... :-) )
10

Ugyanis a gyakorlatban, ha

inf · 2012. Júl. 26. (Cs), 23.51
Ugyanis a gyakorlatban, ha webre akarok fejleszteni, akkor szinte biztos, hogy valamilyen webes keretrendszert fogok használni (kivétel PHP).

Most két külön dologról beszélsz. Egy dolog eleve úgy elindulni a projekttel, hogy webre és asztalra is kell, egy másik meg elindulni vele webre, aztán megpróbálni tákolni valamit asztalra. Egyébként mindkettő megoldható, csak a második kicsit nehezebb, ha már kénytelen vagy egy erre a célra nem feltétlenül alkalmas keretrendszert használni...
11

Igen, ezzel tisztában vagyok.

eddig bírtam szó nélkül · 2012. Júl. 26. (Cs), 23.58
Igen, ezzel tisztában vagyok. De te el tudsz képzelni komoly szoftvert, aminek a webes változatához nem használsz keretrendszert? (PHP most kiesik, mert azzal desktopra... hát izé... :-) )

Jó, itt megint közrejátszik az én szűklátókörűségem: pythonban nagyon nem szeretnék keretrendszer nélkül, egyszerűen CGI-t használva dolgozni egy webes programon.
Ahogy a javaban írt alkalmazást sem tudok elképzelni mondjuk egy tomcat v. hasonló környezettől mentesen.
Egyebet meg nem ismerek.
12

Biztos, hogy megvan a

inf · 2012. Júl. 27. (P), 00.26
Biztos, hogy megvan a megfelelő keretrendszer ilyen célra is. Egyelőre még nem volt ilyen típusú projektem. Php-ben tákoltam egy keretrendszert, amivel viszonylag könnyen megoldható, amit akarsz, de webes megjelenítésen kívül nem nagyon lehet mást a php-val, szóval az meg ott úszik el...
13

Az Adobe AIR -ről hallottál már?

dropout · 2012. Júl. 27. (P), 08.50
Abban bátran használhatod a javascript mvc csökevényeket.
14

NuSphere PhpDock

bonga · 2012. Júl. 27. (P), 11.19
Ha megírtad a webalkalmazásodat és offline módon, desktop környezetben is akarod futtatni, próbáld ki ezt az alkalmazást: NuSphere PhpDock
Az egész program annyit tud, hogy egyben tartalmaz egy webszervert és egy böngészőablakot mindenféle böngészős sallangok nélkül és lokális módban frankón futtatja a webalkalmazásodat. SqLite adatbázissal a háttérben még mysql-t sem kell telepíteni hozzá.
15

Kutya vacsorája

Pepita · 2012. Júl. 28. (Szo), 04.07
Mivel az (egymagában) asztali gép a webes kliens-szerver kapcsolattól, http kérdezz felelektől olyan messzi van, mint ide Jeruzsálem, ezen szoftverek "rokonítása" is - szerintem - min. az egyik esetben kierőszakolt (nem optimális) megoldást szül.

Egy eset a kivétel (amit én tudok): a talán ma már elavultnak számító, számomra Delphi-ben megismert kliens-szerver programozás. Egy szerveroldali és egy kliensoldali progit írsz, ezek pl. TCP/IP-n látják egymást, a kliens kezeli a felhasználói üzeneteket (eseményeket), a szerver tárolja / szolgáltatja az adatokat. A klienst Júzernek telepítenie (és beállítania) kell, nem kell hozzá böngésző, stb. Előnye, hogy kevés adatforgalommal "megy", kb. ugyanúgy műxik (felhasználói szemmel), mint egy sima desktopapp., hátránya, hogy minden kliensnek kell lennie internetkapcsijának. Az feladattól függ, hogy előny v. hátrány, de egy adatbázisod van egy helyen mindenki számára. (Azért kizárva nincsenek a helyi táblák sem.) Hátrány még, hogy ebből nem tudom hogy lehet (lehet-e) épkézláb html in/outputot csinálni (,de szerintem ebben az esetben nem is kell).