36
Martin Fowler: ORM Hate (martinfowler.com)
submitted 1 week ago* (last edited 1 week ago) by HaraldvonBlauzahn@feddit.org to c/programming@programming.dev

This is a pragmatic piece of Fowler on the rather dry topic of Object-relational mappings - in short, the attempt to marry an object-oriented code base with a relational data base.

Usually you'd get enough early success to commit deeply to the framework and only after a while did you realize you were in a quagmire - this is where I sympathize greatly with Ted Neward's famous quote that object-relational mapping is the Vietnam of Computer Science

What Fowler refers to here, is Ted Neward's article "The Vietnam Of Computer Science"

all 25 comments
sorted by: hot top controversial new old
[-] eager_eagle@lemmy.world 31 points 1 week ago* (last edited 1 week ago)

I've never worked on a codebase where using ORMs wasn't better than rolling your own queries. What are people writing that they actually need the marginal performance gains? And even if that's worth it, why not just use raw queries in your critical paths?

Every time I have to write or modify raw SQL it feels like I'm throwing away all my static checking features and increasing the chance of bugs, because I have no idea of the query matches my schema or if it'll blow up at runtime.

[-] SorteKanin@feddit.dk 10 points 1 week ago

Your last paragraph can be fixed even without an ORM though. Rust has libraries like diesel and sqlx that verify the sql in various ways.

[-] anton 1 points 1 week ago

Diesel is an ORM and sqlx requires a modern macro system, that many established languages lack.

[-] SorteKanin@feddit.dk 1 points 1 week ago

Diesel is an ORM

This is kind of stretch to say though - it is not an ORM if you compare it to something like ActiveRecord. Diesel is just a DSL for writing SQL queries that are verified by the compiler.

sqlx requires a modern macro system

I wouldn't say it requires using macros. You could definitely imagine verifying queries in the same way in languages without macros. But yea, this is one of the strengths of Rust I suppose.

[-] criss_cross@lemmy.world 7 points 1 week ago

I worked in a codebase at a FAANG company that didn’t have an ORM and it was the most miserable thing to write and code review. Constantly there would be bugs in queries and types. I missed having an ORM so much.

[-] ExLisper@lemmy.curiana.net 3 points 1 week ago

Couldn't agree more. ORM helps in some places and is extremely easy to skip if needed. I think most comments saying that ORM is an overkill are just from people fighting everything that's new just because it's new. Not that ORM is that new, some people are just still stuck in the 90s.

[-] OldMrFish@lemmy.one 1 points 1 week ago

After working on a few different projects, I've always ended up using ORM for normal operations and Stored Procedures for the complex stuff.

If using MS products, the Database project type in Visual Studio even adds some basic static checking to SQL to help you out a little.

Had the pleasure of taking over maintenance of a moderately complex application with a data access layer based entirely on Stored Procedures once - that was fun..

[-] cecilkorik@lemmy.ca 15 points 1 week ago

Two choices always seem to end up as the fate of any large scale, long-term developed database application. Either you use an ORM, or you build your own piece by piece. I know which one makes more sense to me.

[-] Maestro@fedia.io 10 points 1 week ago

Same goes for any application that are proud to use "no framework". It just means that you partially implemented your own poorly documented half-assed framework.

[-] uuj8za@piefed.social 9 points 1 week ago

It's a little more nuanced than that.

I will gladly write my own small, half-assed framework that I 100% know, can reason about, can debug, and can extend to fit my requirements. I will gladly pass on a fat-assed, bloated framework with a million dependencies, where I only need a few features, and where if I need something that isn't offered by the framework I have to submit a PR or add some janky-ass workaround.

[-] Maestro@fedia.io 7 points 1 week ago

That is fine for your personal projects. It stops being fine as soon as you need to hire extra people and grow the team.

[-] Tempy@programming.dev 7 points 1 week ago

Does it, if you can work on the normal application code, there's no reason you can't work on the lower levels of applications. It's all just code. Ramp up might take a bit more time, but I wouldn't expect horrendously so. As long as your patterns make sense and what is there is written well enough and is not a spaghetti monster in the making, any one should be able to pick it up.

[-] Miaou@jlai.lu 1 points 1 week ago

That's a big "if" in your last sentence. You underestimate how bad most people in the field are.

[-] inzen@lemmy.world 3 points 1 week ago* (last edited 1 week ago)

Why though?

[-] e8d79@discuss.tchncs.de 13 points 1 week ago* (last edited 1 week ago)

I consider the ORM hate uninformed and misguided at best. Just like any other technology not all of them are created equally there are better ones and worse ones. I have used Entity Framework Core for years and have almost no complaints but If I only knew ORMs like NHibernate then I might have a different opinion.

[-] BrianTheeBiscuiteer@lemmy.world 10 points 1 week ago

I love asking new hires about ORMs. If they don't have anything bad to say about them I know they've never used them.

I like ORM's because they prevent sql injection. Mostly. Sql injection is a really bad vuln that's nowhere near as ubiqitous as it used to be for every php app, and that's partly due to ORM's.

[-] CameronDev@programming.dev 3 points 1 week ago

It's a bit sad that sql injection is still a thing. It's been a known problem for decades, and developers keep itching to reinvent the vulnerability over and over...

[-] Ephera@lemmy.ml 7 points 1 week ago

Yeah, this is one of those issues that I feel separates the seniors from the, uh, less experienced seniors. (Let's be real, as a junior, you know jackshit about this.)

Knowing when to use an ORM, when to use SQL vs. NoSQL, all of that is stuff you basically only learn through experience. And experience means building multiple larger applications with different database technologies, bringing them into production and seeing them evolve over time.

It takes multiple years to do that for one application, so you need a decade or more experience to be able to have somewhat of an opinion.
And of course, it is all too easy to never explore outside of your pond, to always have similar problems to solve, where an SQL database does the job well enough, so a decade of experience is not a guarantee of anything either...

[-] Olap@lemmy.world 3 points 1 week ago

Having seen what the ORM hate leads to. Just use the ORM folks. Far better in the long to do so! Nothing has come close to ActiveRecord imo in Typescript or Python sadly. Unless anyone has a library or two I should check out?

[-] lukalix98@programming.dev 3 points 1 week ago

Jooq is cool if you happen to use Java.

[-] HaraldvonBlauzahn@feddit.org 2 points 1 week ago

Haven't tried it, but functional programming methods (as in Clojure) combined with Datomic / Datalog sound interesting. It is said to be quite good.

[-] hperrin@lemmy.ca 2 points 1 week ago

You can check out my library, Nymph.js. It’s what powers Port87.

Unfortunately, I don’t have a whole lot of open source code showing how to use it, since it was developed specifically for Port87, which isn’t open source. But there are test files that show how to use it.

[-] hperrin@lemmy.ca 1 points 1 week ago

I’m starting to think more that I shouldn’t call my library, Numph.js, an ORM. It technically is one, but it’s very different than other ORMs. A lot of the stuff he’s talking about here doesn’t apply to Nymph (for better or for worse). I just don’t know what to call it though.

this post was submitted on 23 Mar 2026
36 points (100.0% liked)

Programming

26376 readers
86 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS