Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa redizajniranjem aplikacije

[es] :: .NET :: Problem sa redizajniranjem aplikacije

[ Pregleda: 1020 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bope

Član broj: 62233
Poruke: 291
*.adsl.verat.net.

Sajt: www.shortsms.me


+4 Profil

icon Problem sa redizajniranjem aplikacije17.08.2011. u 14:48 - pre 154 meseci
Pre jedno 3 godine ja sam non-stop igrao online igru "Ogame". Bio sam bas navucen i onako, iz zezanja, sam hteo da sam pokusam da napravim nesto slicno. U to vreme nisam imao pojma ni o WCF-u ni o socket-ima, samo sam sa vremena na vreme (kad ugrabim malo vremena) dodavao nove mogucnosti u igru, kuckao po malo. Vremenom ta igra je postala prilicno komplikovana (ovo je dijagram klasa http://img696.imageshack.us/img696/4820/classdiagram1i.jpg).

E sad, imam ogroman problem: kao sto rekoh, kada sam pocinjao sa radom nisam imao pojma dokle ce sve stici, nisam ni planirao podrsku za vise igraca (sto bi se ocekivalo od jedne igre, zar ne? :D), nisam znao ni za WCF niti bilo sta sl. Vremenom sam naucio WCF ali sad imam dilemu - kako da podelim igru na serverski i klijentski deo ai tako da vise razlicitih igraca mogu da dele informacije o, recimo, zauzetim teritorijama i sl? Da li da sve stavim na server, a samo interfejs u klijentski deo, ili da na server stavim samo onaj deo igre koji sluzi za sinhronizaciju vise igraca i pamcenje promena u bazu?

Da stvar bude gora, igru sam pravio koristeci "factory" design pattern sto znaci da kompletna aplikacija radi sa interfejsima. Znaci imam jednu klasu (recimo "kuca") koja je definisana interfejsom. Klasi "kuca" moze da pristupi samo "fabrikaKuca" koja napravi objekat "kuca" i ostatku aplikacije vraca interfejs "IKuca". Ostatak aplikacije ne moze direktno da koristi klasu "kuca", vec samo interfejs "IKuca". Uceci WCF shvatio sam da je problem to sto sa WCF-om ne mogu da komuniciram putem interfejsa (kada WCF metodi kazem da prima interfejs kao argument taj interfejs se tretira kao "object"). Da li neko ima neko resenje za ovaj problem sa interfejsima?

Zaista bi mi trebalo misljenje nekog iskusnog, imam neki utisak da bi me korak u pogresnom pravcu kostao dosta vremena i zivaca :)
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa redizajniranjem aplikacije18.08.2011. u 10:09 - pre 154 meseci
Prva stvar, prilično važna: reč "policijski" se piše i čita sa J. Kao i sve reči koje se završavaju na -ija (osim par država u regionu), milicijski, finansijski, korupcijski, austrijski, belgijski, bolivijski, itd.

U klijent-server arhitekturi obično se server bavi podacima, a klijent prikazom tih podataka. Sigurno ne želiš da omogućiš nekom hakeru da menja podatke sa klijentske strane i tako sebi omogući prednost u igri. Znači, server daje klijentu metode da promeni podatke, klijent poziva te metode, ali server je taj koji menja podatke, u skladu sa pravilima.

Ne razumem najbolje problem sa interfejsima. Pointer na interfejs se posmatra kao pointer na objekat koji zadovoljava dati interfejs. To tako i treba. Zašto je to problem?
 
Odgovor na temu

Bope

Član broj: 62233
Poruke: 291
*.adsl.verat.net.

Sajt: www.shortsms.me


+4 Profil

icon Re: Problem sa redizajniranjem aplikacije18.08.2011. u 14:02 - pre 154 meseci
Pa problem sa interfejsima sam resio, sinoc sam kopao po netu i naleteo na sajt koji opisuje "NetDataContractSerializer". Podaci se prenose koriscenjem "DataContractSerializer"-a koji je pravljen tako da sto vise "olabavi" vezu izmedju klijenta i servera pa na taj nacin olaksava razvijanje razlicitih klijenata na razlicitim platformama itd. Problem sa "DataContractSerializer"-om je taj sto u sebi ne prenosi informacije o tipu podataka koji se prenosi, pa zbog toga server ne zna kako da deserijalizuje interfejsni tip. Na primer:

Code:
Here is the DataContractSerializer version of the Person data

<Customer xmlns="http://www.contoso.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <FirstName>Zighetti</FirstName>
  <ID>101</ID>
  <LastName>Barbara</LastName>
</Customer>
And here is the version from the NetDataContractSerializer

<Customer z:Id="1" z:Type="NetDCS.Person" z:Assembly="NetDCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns="http://www.contoso.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
  <FirstName z:Id="2">Zighetti</FirstName>
  <ID>101</ID>
  <LastName z:Id="3">Barbara</LastName>
</Customer>


Ja sam problem sa argumentima tipa interfejs resio tako sto sam serveru dodao "ServerKnownType(typeof(Kuca))" ispred svake metode koja prima argument tipa "IKuca" i to radi. Sada pisem svoj "NetDataContractSerializer" jer sam na mnogo mesta citao da je to mnogo elegantniji nacin od davanja "ServerKnownType" atributa.
 
Odgovor na temu

[es] :: .NET :: Problem sa redizajniranjem aplikacije

[ Pregleda: 1020 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.