in reply to So, what's an object attribute anyway?

Take an object, let's call it a node. Say you occasionally modify these nodes and you want to record the time you've modified them. Is that modification time part of the state of the object or is it a property of the surrounding framework in which the modification was carried out?

An approch would be to do what version control systems like git do: equate a node with a branch in git, and a version of an article with a commit.

So in that case each node has an ArticleSnapshot (or whatever name you can come up with), which has an author, timestamp and text body, and is immutable. It has also a pointer to the previous version (or multiple previous versions, if you allow merges).

For ease of use, you could add delegation from a node to its current revision/snapshot, and a method that modifies the text, but under the hood it really stores a new snapshot.

If the content is stored in a database, you could even do that on the dabase level, with a trigger.

  • Comment on Re: So, what's an object attribute anyway?