Separate Document and Model. Store fields cache at component level. Allow to use protected and virtual variables.