I recently read an old article it which this was suggested
Avoid using the $uses array
You’ve got two completely unrelated models, but you need info from one in the controller of another. The
first idea is to add them to the $uses array. Hey, it’s easy and gets
the job done. Well, to make the long story short, it’s bad practice.
Think about your model bindings and ensure that models are really not
related to one another. Sometimes your User model is definitely not
related to CommentRating, but you absolutely need it in your users
controller. Well, just by chance it appears that
User->Post->Comment->CommentRating. It’s a deep binding that may not
be obvious at first, but by employing such a chain of models you can
easily avoid using the $uses array, when it’s really not necessary.
For the sake of readability/maintainability, I tend to prefer putting CommentRating in the uses array and then calling $this->CommentRating directly.
Is using the $uses array really bad practice and if so why?
That quote cuts a long story a bit too short. Why is it a bad practice? He doesn’t even give one reason. I wouldn’t pay too much attention to it.
I’m no expert, but there are definitely cases when readability and common sense in your code is more important than a minute performance increase or whatever else avoiding $uses may provide. I’ll be continuing to use $uses instead of obscure model chains like User->Post->Comment->Rating
EDIT: And as @tigrang added, with lazy loading of Models in Cake 2, there’s not really a performance benefit anyway!