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

Kako poboljsati kodiranje?

[es] :: .NET :: Kako poboljsati kodiranje?

[ Pregleda: 3093 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

virtualVoid

Član broj: 161084
Poruke: 698



+28 Profil

icon Kako poboljsati kodiranje?26.08.2010. u 15:44 - pre 166 meseci
Povod ovom pitanju su natjecaji u kojima veoma cesto stoji da prilikom aplikacije posaljete i svoj kod da bi oni vidjeli:
- stil kodiranja
- n-tier arhitekturu
- OOP i korištenje design patterna

Za ovo im je dovoljan mali programcic, par klasa.

Kako code treba izgledati da bi bio valjan prema ovim kriterijima? Ima li neko vremena da malo ovo pojasni ili da me uputi na neki dobar clanak koji ovo pojasnjava. U googleu sam vec trazio clanke tipa good ili better programming, better coding, i slicno, ali nisu mi bas odgovorili na moje pitanje.

Da jos napomenem da se ovi zahtjevi najcesce javljaju u natjecajima za web programere (asp.net, mvc,...)
...
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?26.08.2010. u 20:23 - pre 166 meseci
Stil kodiranja:
- http://www.dotnetspider.com/tutorials/bestpractices.aspx
- Upotreba nekih alata tipa Resharper
- Neka knjiga za refaktorisanje tipa - Refactoring: Improving the Design of Existing Code

N-tier arhitektura
- Pogledati neko od Apress-ovih izdanja tipa Pro ASP.NET MVC 2 Framework
- Neka knjiga za Domain Driven Design
- Što više knjiga, to bolje...

OOP i korišćenje design pattern-a:
- Za početak Gang Of Four Design Patterns

Prati blogove:
http://haacked.com/
http://weblogs.asp.net/scottgu/
http://codebetter.com/blogs/
...
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako poboljsati kodiranje?26.08.2010. u 20:50 - pre 166 meseci
MVC nije n-tier arhitektura


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?26.08.2010. u 21:08 - pre 166 meseci
@mmix
Možda ti da predložiš neku knjigu za n-tier u kombinaciji sa MVC-om? :)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako poboljsati kodiranje?26.08.2010. u 21:17 - pre 166 meseci
Pa nemoguce je jer su competing arhitekture, mozes da izvuces domain model u tiere ali na kraju ces uvek imati trougao izmedju delova MVC-a a to je u suprotnosti sa linearnoscu n-tier arhitekture.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.dynamic.isp.telekom.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?26.08.2010. u 22:03 - pre 166 meseci
Rizikovaću da ispadnem glup u društvu, ali ipak moram da pitam za pojašnjenje jer ne vidim taj trougao :)
Ako sve razdvojimo po slojevima kako si napisao, kako to onda View direktno komunicira sa tamo nekim data access layer-om ili kako taj DAL direktno komunicira sa View-om?
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 00:04 - pre 166 meseci


Citat:
Though MVC comes in different flavors, control flow is generally as follows:

1. The user interacts with the user interface in some way (for example, presses a mouse button).
2. The controller handles the input event from the user interface, often via a registered handler or callback and converts the event into appropriate user action, understandable for the model.
3. The controller notifies the model of the user action, possibly resulting in a change in the model's state. (For example, the controller updates the user's shopping cart.)[6]
4. A view queries the model in order to generate an appropriate user interface (for example, the view lists the shopping cart's contents). The view gets its own data from the model. In some implementations, the controller may issue a general instruction to the view to render itself. In others, the view is automatically notified by the model of changes in state (Observer) which require a screen update.
5. The user interface waits for further user interactions, which restarts the cycle.



http://en.wikipedia.org/wiki/Model-view-controller
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.198.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 08:25 - pre 166 meseci
Citat:
4. A view queries the model in order to generate an appropriate user interface (for example, the view lists the shopping cart's contents)

Model nam je neki POCO/DTO, jel tako? Kada autor kaže, queries the model verovatno misli na foreach petlju kojom dohvata sve child objekte datog parent-a koji mu je prosleđen preko konstruktora ili nekog property-ja (ViewData). Sam View ne instancira nove objekte tako što ih učitava iz nekog repozitorijuma ili pozivajući neki factory metod, niti čuva njihovo stanje u bazi.

Mene su učili da je n-layer arhitektura kada su neke celine logički odvojene, a n-tier kada su te celine fizički odvojene. Sada ispada da prezentacioni sloj ne sme da zna za POCO/DTO. Pa sa kakvim onda informacijama barata? Kako bi trebala da izgleda ta n-tier arhitektura desktop aplikacije?

Otvori se nova forma, korisnik kupi novi proizvod, zatvori se ta forma i prikaže nova koja predstavlja korpu svih kupljenih proizvoda na kojoj su dinamički učitani svi dugmići, tekstualna polja, itd.
Na osnovu čega se vrši dinamičko kreiranje forme?
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.198.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 08:49 - pre 166 meseci
Evo i jednog zanimljivog članka ali za php:

Citat:

General principle that we must consider if want to build N-tier application:

• Every layer must be independent physically. It doesn't mean every layer have to exist in separated computer. But, every layer can be distributed every where (separated computer or not).
• Each layer must transfer information only to/from previous/next layer.
• You can change technology used in every layer without change entire system. Example, - you want to change database layer- from mySql to PostgreSQL.

Following sample architecture design use 5-tier:

• Presentation GUI, do parse HTML, XHTML, WML.
• Presentation Logic do rendering process HTML, XHTML to send using HTTP to browser. It accepts data from business logic and tie to HTML. This process run at php at web server.
• Business Logic, manipulate and transform data. Simple, task of this layer is fetch data from data access tier and prepare before send to presentation logic. This process run at server that utilize XML.
• Data access tier have task to connect and retrieve data from database.
• Data tier is aplication database such as mySQL, PostGreSQL, and others.


U ASP.NET MVC:

1. Presentation GUI - isti
2. Presentation Logic - View
3. Business Logic - Controller, a dodatno može imati više slojeva
4. Data Access tier - repozitorijum
5. Data tier - MS SQL, mySQL, itd.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 08:55 - pre 166 meseci
To su te dobro naucili oko tiera i layera ali to nema veze sa ovom pricom. Postoji konceptualna razlika, u nlayer/tier modelu nema preskakanja layer/tiera, ono sto ti zoves POCO objektom iz domain modela je BL (logical) objekat u n-tier modelu, data layer barata native data objektima (nrp sqlreader) i presentation layer nikad ni pod kojim uslovima ne komunicira direktno sa data layerom, cak i ako BL samo propusta podatke bez ikakve akcije nema preskakanja, taj proxy ti posle sluzi kao tacka u kojoj mozes dodati neku logiku kasnije. Ono sto se desilo je da su MVC fanovi spakovali i pojednostavili n-layer model u domain modeling i ucinili ga transparentnim za tebe, presentation layer razvukli u tri komponente. Ono sto ti vidis kao domain je u stvari nekadasnji interfejs iz business layera.


3. Business Logic - Controller, a dodatno može imati više slojev

klasicna greska. Controler NIJE zamena za business layer, izgleda primamljivo i ljudi trpaju gluposti tamo ali controller nije mesto gde se smesta ta logika.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.198.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 09:39 - pre 166 meseci
Citat:
mmix:
Postoji konceptualna razlika, u nlayer/tier modelu nema preskakanja layer/tiera

Izvini ali stvarno ne vidim gde je tu preskakanje layer-a.

Citat:
mmix:
ono sto ti zoves POCO objektom iz domain modela je BL (logical) objekat u n-tier modelu

Aj da izbacimo POCO, neka koristimo samo DTO koji nema behavior, već samo state.
Da ga ne mešamo sa business logic layer-om.

Citat:
mmix:
presentation layer nikad ni pod kojim uslovima ne komunicira direktno sa data layerom

Naravno da ne komunicira. Ne vidim nikakvu direktnu komunikaciju u onom primeru.

Citat:
mmix:
3. Business Logic - Controller, a dodatno može imati više slojev

klasicna greska. Controler NIJE zamena za business layer, izgleda primamljivo i ljudi trpaju gluposti tamo ali controller nije mesto gde se smesta ta logika.


Naravno da Controller ne bi trebalo da bude mesto gde ćeš smestiti svu biznis logiku (fat controller), ali takođe smatram da ne trebam da napišem čitavu knjigu da mi ne bi tražio dlaku u jajetu :)
Napravi se service layer (po DDD) iliti application layer (mislim da se tako zove po n-tieru), a onda taj Controller dođe više kao neki proxy.

Ukoliko neko pak odluči da kompletnu logiku stavi u Controller, taj Controller mu nije ništa drugo nego business logic layer i opet nema direktne komunikacije između presentation layer-a i data layer-a.


Ne znam, možda još uvek ne vidim nešto dobro, ali... ispunjena su tri uslova:

1) slojevi su logički odvojeni
2) mogu i fizički da se odvoje
3) komunikacija se vrši samo između susednih slojeva

Po meni, MVC može super da se uklopi u tu n-tier priču.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 09:58 - pre 166 meseci
E jbg, ne znam kako da ti dalje pojednostavim, imas sendvic sa sunkom i kad stavis sunku izmedju dva parceta hleba hlebovi se ne dodiruju, jedan cak ni ne zna da drugi postoji. Model, View i Controller svi znaju jedan za drugi, da je View takav da nikad ne poziva model direktno vec da koristi model KROZ controller onda bi bio layered/tiered (ali onda bi ceo MVC bio bezvredan i observer patern bio bio prakticno nemoguc). To je sve sto je vazno za ovu pricu, ne znam sta te toliko zbunjuje? Kao sto sam rekao ti mozes model da razvuces u tiere/layere ali sam MVC NIJE layered/tiered arhitektura.

Valjda povlacis neke paralele koja ne stoje?

Citat:
3) komunikacija se vrši samo između susednih slojeva


Bice da te mozda ovo zbunjuje. To je potreban ali ne i dovoljan uslov, pored ovoga potrebno je da dva layera koja komuniciraju kroz treci (ili lanac trecih) NEMAJU direktnu komunikaciju. Potpuna i kompletna separacija.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
82.117.198.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 10:29 - pre 166 meseci
Citat:
mmix:
E jbg, ne znam kako da ti dalje pojednostavim, imas sendvic sa sunkom i kad stavis sunku izmedju dva parceta hleba hlebovi se ne dodiruju, jedan cak ni ne zna da drugi postoji. Model, View i Controller svi znaju jedan za drugi, da je View takav da nikad ne poziva model direktno vec da koristi model KROZ controller onda bi bio layered/tiered

Pa u onoj knjizi, model ne zna ni za šunku, a kamoli za drugo parče hleba :)
I da, sva komunikacija ide KROZ Controller i to je layered / tiered što tvrdim svo vreme.

Citat:
mmix:
(ali onda bi ceo MVC bio bezvredan i observer patern bio bio prakticno nemoguc).

Kakav observer pattern? HTML je stateless. Čim se renderuje View, model više nije u memoriji.

Citat:
mmix:
MVC NIJE layered/tiered arhitektura.

MVC je samo jedan od bezbroj pattern-a, a ti aplikaciju možeš da raslojiš/projektuješ kako hoćeš.

Citat:
mmix:
Bice da te mozda ovo zbunjuje. To je potreban ali ne i dovoljan uslov, pored ovoga potrebno je da dva layera koja komuniciraju kroz treci (ili lanac trecih) NEMAJU direktnu komunikaciju. Potpuna i kompletna separacija.

Pa to i jeste problem. Ako je meni model poseban assembly, koji nema nikakvu predstavu o View-u (referencu, interfejs, bilo šta...), kako on može direktno da komunicira sa View-om? Nikako. Samo preko kontrolera. Šta više, model kao takav mogu da koristim bilo u desktop, bilo u web aplikacijama.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 10:38 - pre 166 meseci
E, ok, u pravu si. Previse sam zauzet za prazne price, veruj sta zelis, ja sam rekao sta sam imao da kazem.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 12:34 - pre 166 meseci
Citat:

Pa to i jeste problem. Ako je meni model poseban assembly, koji nema nikakvu predstavu o View-u (referencu, interfejs, bilo šta...), kako on može direktno da komunicira sa View-om? Nikako. Samo preko kontrolera. Šta više, model kao takav mogu da koristim bilo u desktop, bilo u web aplikacijama.

N-tier - aplikacija je razdeljena u slojeve, komunikacija medju slojevima ide top-down-bottom-up.
1) View zove BL
2) BL zove DAL
3) DAL vraca nesto BL-u
4) BL vraca nesto VIEW-u

MVC pristup je drugaciji
1) VIEW zavisi od MODEL-a ili od CONTROLLER-a
2) Ako se neki podatak promeni u modelu to ce da se odrazi na VIEW
3) Vise VIEW-a moze da bude vezano za jedan MODEL
...

Dakle ova dva nacina se dosta razlikuju.
Radio sam na projekatu gde je bila n-tier aplikacija apli je je GUI odradjen kao MVC. Sto je krivicno delo silovanja programera koji to mroa da cita :)
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.3.*



+6 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 13:08 - pre 166 meseci
Bez namjere da direktno nekoga razuvjeravam na ovoj temi, samo ću reći da ljudi konstantno shvataju MVC kao nešto drugo osim presenter pattern-a. To što je u pitanju neka jednostavna aplikacija, pa izgleda logično da je model u isto vrijeme i domain projekta i DAL (preko najčešće Active Record pattern-a).

Citat:
Valerij Zajcev:
Radio sam na projekatu gde je bila n-tier aplikacija apli je je GUI odradjen kao MVC. Sto je krivicno delo silovanja programera koji to mroa da cita :)


Ako je time postignut anti-pattern, tako što u aplikaciji nije bilo potrebe za tim - onda je to pogreška arhitekte; ali u mome mišljenju bilo šta srednje i više komplikovano ima ogromne benificije ako se uradi kao neka MVC varijacija (zavisno od tehnologije u upotrebi). Čak i za najjednostavnije stvari meni je logično da pravim Mediator i Strategy objekte, te generičke forme sa form generatorima.
Što se MVC-a tiče, ne vidim zašto bi to bilo teško za čitanje - osim nekome ko ne shvata ni svrhu pattern-a?
My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

Valerij Zajcev

Član broj: 40886
Poruke: 1374
*.dynamic.sbb.rs.



+2 Profil

icon Re: Kako poboljsati kodiranje?27.08.2010. u 16:19 - pre 166 meseci
Citat:

Citat:
Valerij Zajcev:
Radio sam na projekatu gde je bila n-tier aplikacija apli je je GUI odradjen kao MVC. Sto je krivicno delo silovanja programera koji to mroa da cita :)


Ako je time postignut anti-pattern, tako što u aplikaciji nije bilo potrebe za tim - onda je to pogreška arhitekte; ali u mome mišljenju bilo šta srednje i više komplikovano ima ogromne benificije ako se uradi kao neka MVC varijacija (zavisno od tehnologije u upotrebi). Čak i za najjednostavnije stvari meni je logično da pravim Mediator i Strategy objekte, te generičke forme sa form generatorima.
Što se MVC-a tiče, ne vidim zašto bi to bilo teško za čitanje - osim nekome ko ne shvata ni svrhu pattern-a?

Situacija je bila takva da je to samo dodatno zakomplikovalo projekat. Nije bilo potrebe da se GUI deo radi na takav nacin. Plus se nije znalo ko gde cuva stanje aplikacije... ukratko cela postavka je bila lose organizovana s obzirom koliko je mala bila.
 
Odgovor na temu

[es] :: .NET :: Kako poboljsati kodiranje?

[ Pregleda: 3093 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

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