Для типичных монолитных по всем координатам приложений где все свалено в одну кучу: модели в одной папке, контроллеры в другой - то мое правило работает. Там если именовать все в стиле
Model/User, Controller/User, т.е. ClassType/Feature, то быстро образуется бардак.Однако продвинутые системы, в которых много классов, быстро переформатируются в папки по доменам, или контекстам, или фичам. И получается, например, домен тот же самый
User, папка App/Domain/User, а классы мы именуем DomainName/ClassType. Классы будут App/Domain/User/Controller, User/Handler, User/Model, etc.Поскольку логика приложения красиво разорвана на эти куски, то
User/Model редко когда юзают в одном и том же файле с Post/Model, например(это вам не Eloquent модели!). И неудобств не возникает, код занимает на пару байт меньше памяти, его чуток быстрее читать и т.д.Еще было бы прекрасно для многих из этих классов применить
package-private из мира Java, что сделало бы эти классы доступными только внутри своего неймспейса и они не мешались бы остальным, но народ терпит, не жалуется, видимо, не такая это уж и проблема.