This essay says that inheritance is harmful and if possible you should “ban inheritance completely”. You see these arguments a lot, as well as things like “prefer composition to inheritance”. A lot of these arguments argue that in practice inheritance has problems. But they don’t preclude inheritance working in another context, maybe with a better language syntax. And it doesn’t explain why inheritance became so popular in the first place. I want to explore what’s fundamentally challenging about inheritance and why we all use it anyway.

  • Baldur Nil@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    5 months ago

    dependency injection is an abomination

    I don’t think so, dependency injection has made testing easier in all static typed code bases I worked on.

    • FunctionalOpossum@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      5 months ago

      The general idea is to not test things that need to be mocked, keep all logic out of those and keep them at the edges of the application. Then you test the remaining 90% of your code which would ideally be pure functions that don’t need mocks .

      The remaining 5% can be integration tests which doesn’t care about DI.

      In reality this doesn’t always work, because sometimes it’s better to write a complex query with logic and let your database do the processing.

    • okamiueru@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      5 months ago

      How does DI make testing easier, or the lack of it make it harder?

      Having a framework scan your code tree for magic annotation and configurations, etc, in order to instantiate “beans” or what not, is the worst imaginable tradeoff I’ve ever seen in software development. Calling it an abomination sounds exactly right.

      • John@mastodon.social
        link
        fedilink
        arrow-up
        0
        ·
        5 months ago

        @okamiueru @balder1993

        It’s an overloaded term:

        “Dependency inversion” is a language-agnostic technique for producing testable, loosely-coupled software.

        “Dependency injection” just means dependencies should be passed in through the constructor, instead of being magically new()'d whereever.

        “DI frameworks” are Satan’s farts. Classpath-scanning nonsense that turns compile-time errors into runtime errors. Not only is your Ctr still coupled to your Svc, but both are now coupled to Spring.