Wir befinden uns derzeit in einer Situation, in der wir die Wahl zwischen der Verwendung eines gebrauchsfertigen objektrelationalen Mapper und dem Rolling unseres eigenen haben
Wir haben eine Legacy-Anwendung (ASP.NET + SQL Server), in der die Daten- und Business-Schicht leider zusammengeführt werden. Das System ist im Hinblick auf den Datenzugriff nicht besonders kompliziert. Es liest Daten aus einer großen Gruppe (35-40) zusammengehöriger Tabellen, bearbeitet sie im Speicher und speichert sie in einer Zusammenfassung in einigen anderen Tabellen. Wir haben jetzt die Möglichkeit, einige Umgestaltungen vorzunehmen, und suchen nach geeigneten Technologien, um unseren Datenzugriff zu trennen und ordnungsgemäß zu strukturieren.
Für welche Technologie wir uns auch entscheiden, wir möchten:
- haben POCO-Objekte in unserem Domain-Modell, die Persistence Ignorant sind
- Haben Sie eine Abstraktionsschicht, die es uns ermöglicht, unsere Domänenmodellobjekte mit einer nachgebildeten zugrunde liegenden Datenquelle zu testen
Offensichtlich gibt es schon eine Menge Sachen in Bezug auf Patterns & Frameworks usw.
Persönlich dränge ich auf die Verwendung von EF in Verbindung mit dem ADO.NET Unit Testable Repository Generator / POCO Entity Generator . Es erfüllt alle unsere Anforderungen, kann problemlos in einem Repo / UnitOfWork-Muster gebündelt werden, und unsere DB-Struktur ist ausgereift (nachdem wir bereits einen Refaktor durchlaufen haben), sodass wir nicht täglich Änderungen am Modell vornehmen werden.
Andere Mitglieder der Gruppe schlagen jedoch vor, unsere eigene DAL komplett neu zu erstellen. (Benutzerdefinierte DataMappers, DataContexts, Repository, Schnittstellen überall, Übermaß an Abhängigkeitsinjektion zum Erstellen konkreter Objekte, Benutzerdefinierte LINQ-zu-zugrunde liegende Abfrageübersetzung, Benutzerdefinierte Caching-Implementierungen, Benutzerdefinierte FetchPlan-Implementierungen ...) Ich als Wahnsinn.
Einige der vorgebrachten Argumente sind "Nun, zumindest werden wir unseren eigenen Code kontrollieren können" oder "Oh, ich habe L2S / EF in einem früheren Projekt verwendet und es war nichts als Kopfzerbrechen". (Obwohl ich beide bereits in der Produktion verwendet habe und festgestellt habe, dass es nur wenige und sehr überschaubare Probleme gibt)
Hat einer Ihrer übererfahrenen Entwickler / Architekten irgendwelche Weisheiten, die mir helfen könnten, dieses Produkt von dem wegzulenken, was ich für eine völlige Katastrophe halte? Ich kann nicht anders, als zu glauben, dass jeder Nutzen, der durch das Ausweichen von EF-Problemen erzielt wird, genauso schnell verloren geht, wenn man versucht, das Rad neu zu erfinden.