На днях у меня был клиент, который попросил совета по созданию простого WPF LOB-приложения. В основном им нужно приложение CRUD для базы данных, основная цель которого - учебный проект WPF.
Я также показал им Linq To SQL, и они были впечатлены.
Затем я объяснил, что, вероятно, не стоит использовать объекты L2S непосредственно из их кода BLL или пользовательского интерфейса. Вместо этого им следует рассмотреть что-то вроде шаблона репозитория.
В этот момент я уже мог чувствовать, как в их головах (и в некоторой степени также и в моей) срабатывают чрезмерно инженерные сигналы тревоги. Неужели им действительно нужна вся эта сложность для простого приложения CRUD? (Хорошо, он эффективно работает для них как учебный проект WPF, но давайте представим, что он превращается в «настоящее» приложение).
- Вы когда-нибудь считали приемлемым использовать объекты L2S во всем приложении?
- Насколько сложно (по опыту) провести рефакторинг, чтобы в дальнейшем использовать другой фреймворк персистентности?
На мой взгляд, если уровень пользовательского интерфейса использует объекты L2S как простой объект POCO (не касаясь каких-либо методов, специфичных для L2S), то это должно быть очень легко реорганизовать позже, если потребуется.
Им действительно нужен способ централизовать запросы L2S, поэтому необходим какой-то способ управления этим, даже если они напрямую используют объекты L2S. Так что в некотором смысле мы уже продвигаемся к некоторым аспектам DAL / DAO / Repository.
Основная проблема с Repo, которую я вижу, - это боль, связанная с отображением между объектами L2S и некоторой моделью предметной области. И действительно ли оно того стоит? Вы получаете довольно много «бесплатно» объектов L2S, которые, я думаю, будет сложно использовать после сопоставления с другой моделью.
Мысли?