Although no specific method can be without flaws, this is what we use.
Folder for the core of the application or model. This includes subfolders for any used third-party libraries and folders for specialized model classes. For example, there will be a folder for processing web services.
A folder for one main module, which will include subfolders for each screen containing class files, tips and resources (this may include more subfolders as needed).
Folder for the second main module, etc.
This model serves us as one of the main goals. There are things in our application core such as logging, data encryption / decryption, etc. Therefore, this is very unlikely for many of the applications we are developing. Similarly, there would be some applications that needed the functionality of the main module and add some other things. Therefore, these three groups of folders are stored as separate repositories in disruptive activities.
Now, when we start a new project, we create a new repository for the project and associate it with the repository of the main application box and other main module repositories according to the needs. Thus, any changes made in the application core by one project team are reflected in other projects. The same with other core modules. It also helps us achieve full modularity.
Of course, there would be flaws for this scheme, but this scheme has been well suited for us for many years :)
source share