За многие годы я написал слои доступа к данным, компоненты персистентности и даже свои собственные ORM в сотнях приложений (одно из моих «хобби»); Я даже реализовал свой собственный менеджер бизнес-транзакций (который обсуждался в SO).
Инструменты ORM долгое время использовались на других платформах, таких как Java, Python и т. Д. Похоже, теперь появилась новая причуда, когда команды, ориентированные на Microsoft, обнаружили их. В целом, я думаю, что это хорошая вещь - необходимый шаг на пути к изучению и пониманию концепций архитектуры и дизайна, которые, как представляется, были представлены вместе с появлением .NET.
Итог: я всегда предпочел бы сделать свой собственный доступ к данным, а не бороться с каким-то инструментом, который пытается «помочь» мне. Отказ от контроля над моей судьбой неприемлемо, и доступ к данным является важной частью судьбы моего приложения. Некоторые простые принципы делают доступ к данным очень управляемым.
Используйте базовые концепции модульности, абстракции и инкапсуляции - так что оберните базовый API доступа к данным вашей платформы (например, ADO.NET) своим собственным уровнем, который поднимает уровень абстракции ближе к вашему проблемному пространству. НЕ кодируйте весь доступ к данным ПРЯМО против этого API (также обсуждаемого в других разделах SO).
Строго придерживайтесь принципа СУХОЙ (не повторяйте себя) = рефакторинг дневного света из вашего кода доступа к данным. Используйте генерацию кода, когда это уместно, в качестве средства рефакторинга, но старайтесь по возможности исключить необходимость генерации кода. Как правило, генерация кода показывает, что в вашей среде чего-то не хватает - недостаток языка, ограничение встроенного инструмента и т. Д.
Тем временем, научитесь хорошо использовать доступный API, особенно в отношении производительности и надежности, а затем включите эти уроки в свой собственный абстрактный уровень доступа к данным. Например, научитесь правильно использовать параметры в SQL, а не встраивать литеральные значения в строки SQL.
Наконец, имейте в виду, что любое приложение / система, которая станет успешной, будет расти, сталкиваясь с проблемами производительности. Устранение проблем с производительностью зависит скорее от их разработки, а не от «подстройки» чего-либо в реализации. Эта проектная работа повлияет на базу данных и приложение, которые должны меняться синхронно. Поэтому старайтесь иметь возможность вносить такие изменения легко (гибко), а не пытаться избежать изменения самого приложения. Частично это в конечном итоге означает возможность развертывания изменений без простоев. Это не сложно сделать, если вы не «замышляете» от этого.