Skip to content

Instantly share code, notes, and snippets.

@klauswuestefeld
Created September 1, 2011 19:03
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save klauswuestefeld/1186975 to your computer and use it in GitHub Desktop.
Save klauswuestefeld/1186975 to your computer and use it in GitHub Desktop.
Martin Fowler to Usurp Pattern
We couldn’t find any files to show.
@klauswuestefeld
Copy link
Author

Martin Fowler to Usurp Pattern

Martin wrote a great post about System Prevalence and its history. That's terrific news. It means our industry is starting to recover from Database Atrophy. I thank Martin for that.

Martin and I discussed the post before he published it and I presented to him the issues below.

Why not Prevalence?

Why on earth did he try and re-baptize System Prevalence as MemoryImage?

The name Prevalence refers to the fact that the pattern not only gives us transparent persistence but also transparent mirroring for free, and having multiple mirrors in sync enables load balancing and fault-tolerance (thus, prevalence).

Is prevalence a bad name? No.
Is it not the precise same concept? Yes.
Is prevalence a well known name? Yes.
Did the pattern have a well known name before prevalence? No.

Martin himself agrees.

Why MemoryImage?

Martin chose the name MemoryImage to try and re-baptize the pattern. It has problems:

  1. The name "image" in our industry already has a strong, well-defined and >different< meaning and it is not used in a metaphorical way like "Factory" or "Visitor". Memory image, snapshot, system image and memory dump are all synonyms.

  2. The memory image is a part of the pattern. The post has to use the word "snapshot" all the time as a synonym for "memory image" to avoid confusion with the pattern itself.

  3. The snapshot is the least important part of the pattern. What the world calls transaction/event journaling and Martin calls "Event Sourcing", is what makes it all possible. The snapshot is just a shortcut to replaying the entire transaction journal on startup. I took me a few years to realize that. Martin will eventually too.

Play Nice

Why would one knowingly cause name confusion in the industry? Why knowingly ostracize an entire community devoted to studying, teaching, discussing and improving the pattern?

Martin and I discussed Prevayler and prevalence years ago at XP Agile Universe. "Objects are overrated" was his response then. We discussed this last post of his before he published it and I presented him with these issues. His answer was: "I can understand why you are upset.".

Well, thanks!

To be fair, he did add a footnote (!) to his post. He said we have been "quiet" (?) lately and implied I reinvented the pattern. I have never said I invented it, not even independently. I have often referenced earlier uses of the pattern such as for Smalltalk code (that I worked with for several years) and Age of Empires (that I played for countless hours :).

But I did give the pattern a name and provided an open-source framework for it.

Martin is the big kid in the patterns playground. Even Kent Beck and Ward Cunningham have played with us nicely, why can't Martin?

Must he march into the playground ten years late and be a clumsy bully?

Martin, please consider using the name Prevalence...

Or at least choose a good name.

@gb
Copy link

gb commented Sep 1, 2011

"I prefer to use an existing term if there's one available."
http://martinfowler.com/bliki/Neologism.html
he seems to have contradicted himself :)

@adolfont
Copy link

adolfont commented Sep 1, 2011

It's really funny. When I started reading Fowler's post, Prevayler came to my mind (although I never had a hands-on experience with it). Only later (after reading the full post) I noticed that he mentioned Prevayler. MemoryImage sounds weird. Prevalence would be a better name.

@rofr
Copy link

rofr commented Sep 1, 2011

Agreed. MemoryImage is a terrible name. Prevalence is a very good name once you understand the concept and have a definition of the word. I use a different approach adopting a database perspective when presenting to mainstream conservative developers.
Here are the slides from my presentation at the #devsum11 conference held may in stockholm: http://www.slideshare.net/rofr/introducing-livedb
I use the term "Prevalent System Architecture", explain the origin and refer to both prevayler and bamboo.

@rofr
Copy link

rofr commented Sep 1, 2011

The liveDB engine is open source and available at http://livedomain.codeplex.com/ and as a nuget package

@felipecruz
Copy link

I've submited a presentation (which people still voting) on pravalence in Python. (http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/desenvolvimento-web/persistencia-transparente-de-objetos)

Pravalence looks nice in python,, check it out: http://copycat.readthedocs.org/en/latest/

Prevalence is a better name than MemoryImage! ++

@rofr
Copy link

rofr commented Sep 1, 2011

@rofr
Copy link

rofr commented Sep 1, 2011

In the comments to fowlers article on hackernews someone uses the term IMDB, In Memory Database. I like that except it clashes with imdb.com

@klauswuestefeld
Copy link
Author

The term In Memory Database to refer to Prevalence is bad because:

@quilombodigital
Copy link

Well... actually, by using the term "MemoryImage" and saying it is a database, it makes the reader think it´s as a cache or a memoize structure. something that certainly it is not.
I agree with using prevalence. :) An article named "Prevalence should Prevail" would be a nice start to make a little noise.

@germanviscuso
Copy link

Why rename what has been perfectly defined? Not only MemoryImage is a "quick and dirty" definition, after all these years the arbitrary rename also shows disrespect for a community that has invested so much in evolving, discussing and sharing the pattern (Prevayler).

@rofr
Copy link

rofr commented Sep 2, 2011

I dont agree with "not a database", really depends on how you define it. See first paragraph: http://en.wikipedia.org/wiki/Database

I'm not trying to suggest a better name. I accept Prevalence, Prevalent System and Prevalent System Architecture as standards and use them when appropriate. I also consider Memory Based Architecture as a generalization of prevalence.

But when explaining the concept to someone new I would say in-memory database is a great starting point. That usually gets the discussion going, eg: "Is it an object database? graph database? How do you achieve persistence?"

@klauswuestefeld
Copy link
Author

Rofr, no prevalence layer is "an organized collection of data for one or more purposes, usually in digital form." (http://en.wikipedia.org/wiki/Database)

The >apps< running on these prevalence layers can be defined as that.

I like "Persistence Layer" as a starting point for someone new.

@nusco
Copy link

nusco commented Sep 11, 2011

I agree with the criticism of "Memory Image". I can see where Martin took that name from: Smalltalk. As influential as it used to be, however, I don't think the Smalltalk heritage is widespread enough today. It's not like people hear "Memory Image" and think "Oh, yes, like Smalltalk!". So I think it's an artificial name, and that's never good for a pattern.

On the other hand, sorry, but I never much liked "Prevalent System" either. Maybe because English is not my mother language, but when I hear "Prevalence", I think of a lot of things - not all of them pleasant, most of them related to violence and submission, and none of them related to this pattern. I think that we should just let the pattern spread, and a common name arise. Darwinian selection of dictionary is good, and not the point: the point is that this pattern is a good idea, and it should spread.

As a side note, I think that the condescendent attitude of many thought leaders towards Prevayler is not very generous. Prevayler deserves much more than a footnote, given all the bad vibes it got from people who accepted the then-current orthodoxy ("You cannot have persistence without SQL") without a question. Today, I think that the authors of Prevayler have a right to be recognised as far-sighted people.

OK, Klaus didn't "invent" the pattern. Fair enough: if you "invent" a pattern, then it's not a pattern, right? He kept the idea alive while the rest of the world was either ignoring him or accusing him of selling snake oil. In my book, that's reason enough for recognition and respect.

@edmundoandrade
Copy link

Indeed, Klaus deserves a good answer from Martin Fowler because of this: Klaus kept the idea alive, by means of a working implementation: Prevayler (as commented by nusco).

Martin is not obliged to accept Klaus' perspective (1), but an evasive footnote is not acceptable neither. Although obvious to Martin, his articles' readers should know some interesting pratical facts like the one stated in (2).

(1) It is called system prevalence. It encompasses transparent persistence, fault-tolerance and load-balancing.
Reference: http://www.advogato.org/article/398.html

(2) After working on a number of applications, I was most surprised to find that the most common bottleneck in a Prevalent system is not the data access and manipulation logic, but rather the Web server.
Reference: http://www.ibm.com/developerworks/library/wa-objprev/

Copy link

ghost commented Dec 21, 2011

What a shame Martin Fowler, what shame...

@rj45NSX
Copy link

rj45NSX commented Mar 15, 2016

It's pretty simple. Money. Most of Martin Fowler stuff is pretty rehashed pogs of old.

Recently I had, not one but two interviews with the same question on dependency injection. The interviewers thought dp meant to pass an interface.... It's not a surprise people are confused when you market it that way.

One has to think that the term "dependancy injection" is a bs term meant to sell books and to coin it for himself. Its too bad because it's not a bad pattern but it's marketed in such a way that confuses many people because he tries to take owner ship to extreme levels. I would have just the pattern AutoFactory or something and spoke around the "IOC" container not the trival matter of how it is so called "injected" which actually should be replaced with "passed" a variable etc etc. Shame on you Martin. Stop naming patterns stupid shit and stealing old stuff and rehashing it as your own. It would be better you never existed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment