Where do I put all these interfaces?

Before I discuss organization:

Well, now I foresee a reason: mocking.

You can mock with classes, as well. Subclassing works well for mocking as an option instead of always making interfaces.

Interfaces are incredibly useful – but I would recommend only making an interface if there is a reason to make an interface. I often see interfaces created when a class would work fine and be more appropriate in terms of logic. You shouldn’t need to make “hundreds of interfaces” just to allow yourself to mock out implementations – encapsulation and subclassing works quite well for that.

That being said – I typically will organize my interfaces along with my classes, as grouping related types into the same namespaces tends to make the most sense. The main exception is with internal implementations of interfaces – these can be anywhere, but I will sometimes make an “Internal” folder + an Internal namespace that I use specifically for “private” interface implementations (as well as other classes that are purely internal implementation). This helps me keep the main namespace uncluttered, so the only types are the main types relating to the API itself.

Leave a Comment

tech