bardzo podoba mi się tier sposób robienia rzeczy 3 + 1. Jedna warstwa dla interfejsu użytkownika, jedna dla logiki biznesowej i dla danych trwałych. Ostatni, który mówisz? Obiekty domen i interfejsy. Umożliwia to załadowanie jednego lub dwóch głównych poziomów wraz z "warstwą" domeny, a kod powinien działać.
To opiera się głównie na zasadach dependency injection i Inversion of Control. Warstwa danych/trwałości ma tylko dwie rzeczy. Tworzy, odczytuje, aktualizuje i usuwa dane oraz odwzorowuje je na format obiektu domeny.
Warstwa interfejsu użytkownika działa dokładnie odwrotnie. Wyświetla i odbiera dane w sposób, do którego użytkownik może się odnosić i mapuje dane wyjściowe/wejściowe do formatu obiektu domeny.
Poziom logiki biznesowej wystarczy znać jedną rzecz. Logika biznesowa. Nie dba o to, skąd pochodzą dane i nie dba o to, gdzie umieszcza go warstwa danych. Wie, że powinien oznaczać konto, które zostało po prostu przekroczone, jak fizycznie zrobić, to nie jest częścią jego pracy.
Obiekty domeny same w sobie nie mają żadnej logiki, są tylko kontenerami do przekazywania danych między poziomami. Oznacza to, że możesz ładować obiekty domeny i interfejsy bez konieczności myślenia o zależnościach.
Pod koniec dnia czuję, że mam dość wyraźną podstawę kodu z wyraźnie oddzielonymi poziomami. A z pewnymi ścisłymi interfejsami i dobrymi klasami bazowymi większość kodowania mówi programowi, co ma zrobić, gdy X się wydarzy. Jak to powinno wyglądać.
</rant>
Edytuj: O, tak. Dotyczy to zarówno LINQ, SubSonic i innych ORM.
Co jeśli chcesz odczytywać 10000 wierszy z bazy danych i przechowywać gdzieś sumę? Po co przeciągać to wszystko przez sieć, kiedy można: wstawić do sum .. wybrać z danych szczegółowych? –
W przypadku ORM nie trzeba czytać 10000 wierszy, aby uzyskać łączną liczbę. Na przykład w LinqToSql możliwe jest użycie metody Sum w celu utworzenia sumy właściwości, która jest następnie konwertowana na odpowiedni SQL, który pozwala serwerowi sql obliczyć sumę bez zwracania wszystkich wierszy. –
@Ole: LinqToSql (który obsługuje tylko SQL Server i może już być martwy na rzecz Entity Framework) nadal jest czarnym pudełkiem, czemu sam nie napisze kodu SQL? A jeśli umieścisz logikę podsumowania w procedurze przechowywanej, nie musisz podawać aplikacji surowego dostępu do twoich tabel. – ObiWanKenobi