Ma sve je to cool, ali kada je brzina razvoja u pitanju, spreman sam da napravim neke kompromise.
Citat:
ravni: Pored INotifyPropertyChanged, tvoj klasa koristi i BindingList, sto takodje pripada klijentu. Ja bih za potrebe komunikacije sa klijentom imao CustomerDto klasu koja izgleda kao sto si predlozio, a na klijentu bih imao, kao deo apstrakcije view-a, klase koje su pogodne za databinding i implementiraju INotifyPropertyChanged i koriste BindingList i sta vec treba.
Po meni je ok koristiti DTO klase samo u slučaju kada pišem isključivo web aplikaciju, i to zbog neke lepote kodiranja, a vremena ima na pretek.
Ukoliko je potrebno napraviti model za desktop aplikaciju (nebitno da li je i za web u isto vreme), tada bih pravio isključivo klasu koju sam naveo u prethodnom postu.
Zašto?
U knjizi
Data Binding with Windows Forms 2.0 - Programming Smart Client Data Applications with .NET, u 9. poglavlju se kaže:
"The BindingList<T> type should actually be your first choice for collections of objects that you intend to use for data binding."
Rocky Lhotka u svom čuvenom CSLA.NET framework-u, takođe koristi
BindingList<T>. A kako i zašto, detaljno opisuje u svojoj knjizi
Expert C# 2008 Business Objects.
Ako mi za desktop aplikaciju treba
BindingList<T>, DTO klase mi apsolutno ne trebaju i donose više "štete" nego koristi jer:
- Kada promenim DTO, moram da promenim i BO.
- Kada promenim DTO, moram da promenim i metode koje mapiraju DTO u BO i obrnuto.
Citat:
ravni:Na taj nacin svaka klasa ima samo jednu odgovornost, sto ih pojednostavljuje i olaksava razvoj.
Kad kažeš da su BO klase zadužene za osvežavanje korisničkog interfjesa, ja to ipak gledam na drugi način. Ali razvoj može samo da iskomplikuje, nikako da olakša.
Razumem da bi primena
INotifyPropertyChanged interfejsa u web aplikacijama bila samo overhead, jer su web aplikacije stateless... ali ako jedan
Stackoverflow može da koristi Linq2Sql (izgenerisani model nasleđuje ovaj interfejs), zašto bi se onda toliko brinuli oko toga?
Citat:
ravni:Serverski Id ne bih menjao nekim novim, jer za to nema potrebe.
Ovo je bio lapsus. Hteo sam da kažem da se klijentski id zameni sa serverskim. A za to je potrebna metoda koja vrši mapiranje DTO u BO i obrnuto.