Я предполагаю, что вы имеете в виду написание DAL, обращающегося к SQL, потому что сегодня это наиболее распространенная часть. ОДНАКО, если самая большая проблема при написании DAL для SQL - это часть ORM. То есть существует фундаментальное несоответствие импеданса между объектно-ориентированным программированием и схемами реляционных баз данных. Было много отличных и даже успешных попыток написания ORM. Но все они страдают от одной и той же проблемы, заключающейся в их преимуществе: они отвлекают вас от базового генерируемого SQL. Это проблема в том, что производительность вашей базы данных является критическим компонентом того, насколько хорошо ваша система функционирует в целом. Многие ORM (возможно, большинство) не только имеют невысокую производительность для многих стандартных запросов, но и фактически поощряют шаблоны использования, которые значительно ухудшают производительность (частый пример - многократное прохождение отношений внутри циклов при запросе коллекций, что затрудняет разрешение взаимоблокировок. Другая). Конечно, после детального изучения ORM API вы обычно можете найти способы обойти эти выбоины с производительностью.
Мое текущее мнение о состоянии ORM состоит в том, что я хочу, чтобы они делали как можно меньше, но при этом давали мне эффективность надежной библиотеки, которая заботится обо всех тонкостях доступа к данным. Другими словами, поскольку я не думаю, что они «достаточно хороши» и, возможно, никогда не будут использовать SQL в качестве серверной части, я хочу сохранить контроль на уровне «голого железа», и я перейду к написанию SQL с помощью рука без колебаний во многих случаях, независимо от ORM, потому что я знаю конкретный способ, которым я хочу, чтобы данные запрашивались для моих конкретных потребностей.
Очевидно, что это более хрупкий подход к кодированию, чем если бы вы неукоснительно использовали ORM, как это было задумано, поэтому в результате вы должны быть особенно внимательными с точки зрения модульного тестирования, SQL-инъекций и надлежащего разделения проблем. Итак, подытоживая, я согласен с Эшем, хотя это не означает, что он согласен со мной :)
person
D'Arcy Rittich
schedule
07.12.2008