Cześć,
do tej pory we wszystkich swoich projektach używałem nieświadomie podejścia "encja na twarz i pchasz" : ) - czyli używałem jednej klasy do selectów, dodawania/edycji i do bindowania pod widoki (WPF). Obejrzałem film "Architektura to nie bzdura":
I mam pytanie - czy dobrze to zrozumiałem? Na przykładzie klienta i WPF:
- Tworzę klasę
Customer, której używam tylko w EfCorze - jako np. DbSety - W metodach typu
GetCustomerszwracam klasęCustomerDto, która jest read-only (?) i zawiera wszystkie właściwości, co encja (np. FirstName, LastName, Email), ale bez np. StatusId - Do bindowania pod dialogi tworzę klasę
CustomerBo(Bo = Business Object), która ma wszystkie pola co encja (+ np.IsSelected), ale bez odwróconych relacji (tzn. w przypadku relacji many-to-manyUserBoma właściwośćList<Privilege>, alePrivilegeBonie ma jużList<User>, mimo że encjaPrivilegeje posiada). Obiekty biznesowe przekazuję jako parametr w metodach typuAddCustomer(), UpdateCustomer()?
Niepokoi mnie trochę to, że muszę stworzyć aż trzy klasy do jednego obiektu w aplikacji. I jak powinno wyglądać rzutowanie? Czy CustomerDto i CustomerBo powinien mieć w konstruktorze przekazywaną encję i tworzyć tam konwersję?
I jak z nazewnictwem i przechowywaniem? Czy wszystko idzie do folderu Models?