If your project is small enough so that one library is enough for each level, I would go with this approach. This helps maintain a clear separation of concerns.
Separate DLLs will not adversely affect performance in my experience. There are situations where they can help in performance (for example, when loading rarely used components). All DLL files are loaded into the same address space, since one or several DLLs practically do not differ in terms of runtime.
Each layer must be created as if it were used by several interfaces. It will also help maintain separation and help more correct and convenient code.
source
share