# The Universal Design Pattern

DevFeed: [The Universal Design Pattern](<https://devfeed.tech/articles/the-universal-design-pattern-38765.md>)

Original publisher: [Read original article](<https://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html>)

Author: Steve Yegge (noreply@blogger.com)

Published: 2008-10-20T10:06:00Z

Content type: article

Language: en

Sources: [Steve Yegge](<https://devfeed.tech/sources/steve-yegge.md>)

Topics: [properties](<https://devfeed.tech/topics/properties.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [class](<https://devfeed.tech/topics/class.md>), [object](<https://devfeed.tech/topics/object.md>), [XML](<https://devfeed.tech/topics/xml.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [properties](<https://devfeed.tech/tags/properties.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [technical](<https://devfeed.tech/tags/technical.md>), [technical-article](<https://devfeed.tech/tags/technical-article.md>), [xml](<https://devfeed.tech/tags/xml.md>)

## AI overview

This technical article presents the Properties Pattern, also known in its fullest form as the Prototype Pattern. It explains the pattern as a flexible approach to modeling problems across programming languages and as a general-purpose persistence strategy, while comparing it with class-based object-oriented, relational, and XML modeling.

## Source excerpt

This idea that there is generality in the specific is of far-reaching importance. -- Douglas Hofstadter, Gödel, Escher, Bach Note: Today's entry is a technical article: it isn't funny. At least not intentionally. Update, Oct 20th 2008: I've added an Updates section, where I'll try to track significant responses, at least for a week or so. There are three entries so far. Contents Introduction Three Great Schools of Software Modeling Class Modeling Relational Modeling XML Modeling Other schools Finding the sweet spot Property Modeling Brains and Thoughts Who uses the Properties Pattern? Eclipse JavaScript Pushing it even further The pattern takes shape... Wyvern Lisp XML revisited Bigtable Properties Pattern high-level overview Representations Keys Quoting Missing keys Data structures Inheritance The deletion problem Read/write asymmetry Read-only plists Performance Interning strings Perfect hashing Copy-on-read caching Refactoring to fields Refrigerator REDACTED Rolling your own Transient properties The deletion problem (remix) Persistence Query strategies Backfills Type systems Toolkits Problems Further reading New Updates Final thoughts Introduction Today I thought I'd talk about a neat design pattern that doesn't seem to get much love: the Properties Pattern. In its fullest form it's also sometimes called the Prototype Pattern. People use this pattern all over the place, and I'll give you a nice set of real-life examples in a little bit. It's a design pattern that's useful in every programming language, and as we'll see shortly, it's also pretty darn useful as a general-purpose persistence strategy. But even though this pattern is near-universal, people don't talk about it very often. I think this is because while it's remarkably flexible and adaptable, the Properties Pattern has a reputation for not being "real" design or "real" modeling. In fact it's often viewed as a something of a shameful cheat, particularly by overly-zealous proponents of object-oriented desi