Good day. It has long been wondering how it is customary to store abstractions (interfaces, abstract classes) and their implementation relative to each other? In the same physical folder or in different? In one namespace or in different? Here are the possible options (Objects, Base - folders; IObject - interface; ConcreteObjectA and ConcreteObjectB - implementations of the IObject interface).
Option 1 - all in one folder and one namespace:
-> **Objects** -> IObject -> ConcreteObjectA -> ConcreteObjectB
Option 2 - Base folder (or similar) for abstractions:
-> **Objects** -> **Base** -> IObject -> ConcreteObjectA -> ConcreteObjectB
Option 3 - Implementration folder (or similar) for implementations:
-> **Objects** -> **Implementration** -> ConcreteObjectA -> ConcreteObjectB -> IObject
Option 4 - your own (I will write in the answer).
Which option do you use? Why?