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?