Я предполагаю, что вы имеете в виду писать DAL, который обращается SQL, так как это является наиболее распространенной частью сегодня. ONe, если самые большие проблемы при написании DAL для SQL - это часть ORM. То есть существует принципиальное несоответствие импеданса между программированием OO и схемами реляционных баз данных. Было много замечательных, успешных попыток написания ORM. Но все они страдают от той же проблемы, что и их польза: они абстрагируют вас от генерируемого SQL-кода. Почему это проблема, заключается в том, что производительность вашей базы данных является важной составляющей того, насколько хорошо ваша система работает в целом. Многие ORM (возможно, большинство) не только обладают нестандартной производительностью для многих стандартных запросов, но и фактически поощряют шаблоны использования, которые значительно ухудшают производительность (неоднократно пересекающиеся отношения в циклах, когда запрос коллекций является одним из распространенных примеров, что затрудняет урегулирование взаимоблокировок другой). Конечно, после изучения API ORM в деталях, вы обычно можете найти пути вокруг этих выбоин.
Мое текущее состояние ORM заключается в том, что я хочу, чтобы оно делалось как можно меньше, но при этом давало мне эффективность сплошной библиотеки, которая заботится обо всех гайках и болтах доступа к данным. Другими словами, поскольку я не думаю, что они «достаточно хороши» и, возможно, никогда не будут с SQL в качестве задней части, я хочу сохранить контроль на уровне «чистого металла», и я опустится до написания SQL без колебаний во многих случаях, независимо от ORM, потому что я знаю конкретный способ, которым я хочу, чтобы данные запрашивались для моих данных потребностей.
Это, очевидно, более хрупкий подход к кодированию, чем если бы вы религиозно использовали ORM, поскольку он был предназначен, поэтому вы должны быть более усердными с точки зрения модульного тестирования, SQL-инъекции и надлежащего разделения проблем , Итак, подытожим, я согласен с Эшем, хотя это не означает, что он/она согласен со мной :)
Я согласен, что для разных ситуаций ответ будет другим, но я просто ищу несколько разных методов и как они сработали. – 2008-10-07 12:37:31