Nauczyłem się zawsze obsługiwać dowolny kod dostępu do danych w całkowicie oddzielnej „warstwie” od mojej logiki biznesowej i kodu interfejsu użytkownika. To zawsze była dla mnie bardzo dobra architektura, a wszelkie „zasady” i najlepsze praktyki, które widzę, wciąż pasują do tego stylu kodowania, szczególnie Zasada Jednej Odpowiedzialności .
Do większości moich domowych projektów używałbym własnej ORM, którą stworzyłem, którą zawsze zamierzałem tworzyć open source. Jednak od tego czasu LINQ stał się dostępny, co było bardzo podobne do mojego ORM (ale ... lepiej).
Nic nie mogłem wcześniej zrobić z moją własną ORM, czego nie mogę teraz zrobić z LINQ (z wyjątkiem bitów integracji REST). Więc moje pytanie brzmi; czy LINQ jest moją nową warstwą dostępu do danych? Czy w ogóle potrzebuję już tej warstwy? Czy moja BLL powinna rozmawiać bezpośrednio z LINQ? A może nadal jest to zła praktyka?
Edytować:
Pierwotne pytanie dotyczyło LINQ to Entities, ale istnieje wiele interesujących odpowiedzi dotyczących LINQ to SQL. Jakie są przemyślenia na ich temat? Rozumiem, że LINQ to SQL nie może tak naprawdę zastąpić DAL, ale czy Entity Framework?
źródło
Linq nie dotyczy dostępu do danych, możesz użyć linq do dowolnego
IEnumerable
.Czy próbowałeś najpierw zaprojektować aplikację, nie myśląc o bazie danych? Oznacza to, że zaimplementuj aplikację i użyj pewnego rodzaju repozytorium. Następnie używasz dowolnej techniki, aby zaimplementować te repozytoria. W ten sposób masz całkowicie oddzielone rozwiązanie, w którym możesz podłączyć dowolną warstwę dostępu do danych, którą chcesz.
W tej warstwie dostępu do danych można użyć własnego ORM lub Linqa do sql, nie ma to znaczenia, o ile warstwa dostępu do danych implementuje zdefiniowane repozytoria.
źródło
O ile „warstwa logiki biznesowej” nie dotyczy transakcji i wydajności zapytań, nadal istnieje potrzeba DAL.
LINQ sprawia, że deklaracja zapytania jest procesem w czasie projektowania (inaczej sprawdzany przez kompilator).
Dostawcy zapytań LINQ (tacy jak LinqToSql i LinqToEntities) nadal dokonują konwersji w czasie wykonywania zadeklarowanych zapytań na tekst sql. Następnie DBMS nadal interpretuje zapytania w czasie wykonywania, generuje plan zapytań w czasie wykonywania itp.
To tylko niewielka część DAL.
źródło