Code Monkey home page Code Monkey logo

Comments (1)

JeremyCaney avatar JeremyCaney commented on June 28, 2024

The downside of this is that these overloads are only available if the namespace of the extension method is in scope.

That can be a problem when derived classes relying on those overloads are in a different namespace. E.g.,

  • OnTopic.Repositories.ITopicRepository
  • OnTopic.Data.Sql.SqlTopicRepository

In this case, if the caller only applies a using statement for OnTopic.Data.Sql.SqlTopicRepository, then the defaults won’t be available.

That said, this issue is at least mitigated for interfaces and/or abstract classes intended for use with dependency injection, such as ITopicRepository, since code references for dependencies should only be aware of the interface or abstract class, and not the concrete implementations, and will thus use the using statement for the interface (e.g., OnTopic.Repositories).

The only exception to this is in the composition root, when assembling the dependency graph, where there will be references to the concrete class. (This also applies when registering dependencies via a container.) Since constructors for dependency injection shouldn’t have optional or default parameters, however, this doesn’t affect that case.

This concern, however, may impact classes which are subject to extensibility, but not subject to dependency injection.

The alternative in those cases is to continue to rely on defaults on the interface and virtual methods, as we do today. As “Framework Design Guidelines” warns, however:

A disagreement between an interface declaration and the implementation on a default value creates an unnecessary source of confusion for your users.

As such, this should be carefully considered.

from ontopic-library.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.