 There are, however, fairly standard heuristics that have been borrowed from the domain of software engineering.These include 'inheritance' (based on principles of object-oriented programming); and 'templating and generative programming', (consistent with the principles of MVC separation).The precise difference between the various guidelines is subject to some debate, and some aspects of the different guidelines share a degree of similarity.