If the idea is that invalidation rule is to be stored in the class implementing `ItemInterface` then it seems to me that there's no clear separation between data to be stored and invalidation rules. It makes things more complex than they could be.