What is your suggestion on where to put cross-cutting concerns in a package-by-feature structured app? This aspect seem to be missing from most of the pro package-by-feature articles I have read.
Consider for example a Java REST api:
com.myapp.authentication
AuthenticationResource.java
Token.java
TokenDao.java
...
com.myapp.article
ArticleResource.java
Article.java
ArticleDao.java
...
com.myapp.util
Security.java (hash, random string, etc...)
...
Now, where would you put the global User object and DAO (used by most features after authentication), and the DB connection used by the DAOs?
And how would you handle cross-dao transactions?
I was thinking maybe have a startTransaction
and endTransaction
method on each DAO, and rely on nested transacions. Thoughts?
Another option could be to have a global DaoManager
from which the service layer would request writeable/readable DAOs from, and then commit the result when done. In which case, where to put such a class? Thoughts?
I feel like this is such a common starting point for most apps I am making, which also gets me stuck so quickly.