I usually construct project structuer based on Clean Architecture created by Uncle bob
I express roles with different words and I didn't use some modules explained inside clean architecture.
But I follow dependency rule because the rule help developer to implement logic without losing maintenability, extensibility which means keeping productivity.
As long as the system follow the rule, developer can easly change or extend infrastructure and User interface.
this repository is sample project to explain what I usually do.