This new post from Jani Hartikainen talks about models and how you can use models together with others (in this case, for searching your application's data).
If you have written a model layer which separates database access from the rest of the code, you probably know that you may end up with lots of methods like findByName, findByTitle or such, for cases where you want to find records based on specific criterias. [...] You could also use your model objects as search â€œcriteriasâ€ - A bit similar to how Propel handles criterias, but not as nearly as complex.
His simple example (making a user object, assigning a name to it and then passing it to a gateway to search on that name) illustrates one major benefit of using model objects in others - prevalidation. In this case, checking to see if the name passed in is even valid before continuing.
He also provides a bit more complex example - the contents of that user gateway model that can check to be sure that the user even exists.