Thread Previous • Date Previous • Date Next • Thread Next |
On 2010-08-02 22:52, Jamu Kakar wrote:
The way we implement the pattern in Landscape is, I think, a bit simpler. We don't end up with a very general solution like you have with the implementation in Launchpad, but we don't have that many objects we want collections for, so it's not really a problem. Anyway, the pattern we use is to store the primitive values needed to construct the query. When collection.with_computer_ids(ids) is invoked we store 'ids', instead of creating a Computer.id.is_in(ids) expression and storing that. Each collection must implement a _get_result method that uses the primitive data that has been gathered to generate a query.
The idea with our Collection was that you can do this if you really want to, but it should be a distant second place to the simple, straightforward case.
The simple case does not require anything but a one-liner with_computer_ids implementation. But you pay a higher price if you do want to optimize the SQL: you'd make with_computer_ids store the ids list, and override select to take the ids list into account somehow. I think that's similar to the Landscape approach.
Jeroen
Thread Previous • Date Previous • Date Next • Thread Next |