I am currently working with PHP to develop a server client application and therefore, I am trying to design a reference architecture to guide me through my implementation process.
I really like the new mean stack folder structure and the component/modules way to do it but even here I do struggle a lot.
As an example:
/<project-name>
index.php
/static
/css
/main.css
/js
/user
userFunctions.js
/bower_components
/jquery
/chart
/fontawesome
/template-engine
...
/scripts
/debug.php
/checkCodingStyle.php
/modules
/user
userDetailsController.php
userListController.php
userDetailsView.php
userListView.php
user.php
userDao.php
/utils
/db
mysql.php
/log
log.php
/lib
/tests
userUnitTest.php
There is one module, called "user" with two different views and controllers based on a data model user.php. The model can be accessed from the database calling the data access object userDao.php.
MVC + Dao allows me to seperate content and logic of my app by concern and also allows loose coupling between modules and strong cohesion inside each module.
But:
The model user might be something that I do need in other modules as well. Say we have a module event, I do want to reuse the data model user.php there, and it would be nice to use a user selection list based on userListView.php.
How do I do that? The userListView.php contains all the things I need, but it is connected to the userListController.php.
Is it wrong / bad when you call a data model from another module and reuse it in another modules controller?
Is there a better way in building up interfaces between modules, like services one module could call?