Oren Eini

aka Ayende Rahien

Oren Eini

CEO of RavenDB

a NoSQL Open Source Document Database

Get in touch with me:

oren@ravendb.net +972 52-548-6969

Posts: 7,633
|
Comments: 51,252

Copyright ©️ Ayende Rahien 2004 — 2026

Privacy Policy · Terms
filter by tags archive
stack view grid view
  • architecture (626) rss
  • bugs (451) rss
  • community (384) rss
  • databases (481) rss
  • design (901) rss
  • development (663) rss
  • hibernating-practices (75) rss
  • miscellaneous (592) rss
  • performance (397) rss
  • programming (1117) rss
  • raven (1485) rss
  • ravendb.net (572) rss
  • reviews (184) rss
  • 2026
    • February (4)
    • January (5)
  • 2025
    • December (8)
    • November (4)
    • October (4)
    • September (10)
    • August (6)
    • July (7)
    • June (7)
    • May (10)
    • April (10)
    • March (10)
    • February (7)
    • January (12)
  • 2024
    • December (3)
    • November (2)
    • October (1)
    • September (3)
    • August (5)
    • July (10)
    • June (4)
    • May (6)
    • April (2)
    • March (8)
    • February (2)
    • January (14)
  • 2023
    • December (4)
    • October (4)
    • September (6)
    • August (12)
    • July (5)
    • June (15)
    • May (3)
    • April (11)
    • March (5)
    • February (5)
    • January (8)
  • 2022
    • December (5)
    • November (7)
    • October (7)
    • September (9)
    • August (10)
    • July (15)
    • June (12)
    • May (9)
    • April (14)
    • March (15)
    • February (13)
    • January (16)
  • 2021
    • December (23)
    • November (20)
    • October (16)
    • September (6)
    • August (16)
    • July (11)
    • June (16)
    • May (4)
    • April (10)
    • March (11)
    • February (15)
    • January (14)
  • 2020
    • December (10)
    • November (13)
    • October (15)
    • September (6)
    • August (9)
    • July (9)
    • June (17)
    • May (15)
    • April (14)
    • March (21)
    • February (16)
    • January (13)
  • 2019
    • December (17)
    • November (14)
    • October (16)
    • September (10)
    • August (8)
    • July (16)
    • June (11)
    • May (13)
    • April (18)
    • March (12)
    • February (19)
    • January (23)
  • 2018
    • December (15)
    • November (14)
    • October (19)
    • September (18)
    • August (23)
    • July (20)
    • June (20)
    • May (23)
    • April (15)
    • March (23)
    • February (19)
    • January (23)
  • 2017
    • December (21)
    • November (24)
    • October (22)
    • September (21)
    • August (23)
    • July (21)
    • June (24)
    • May (21)
    • April (21)
    • March (23)
    • February (20)
    • January (23)
  • 2016
    • December (17)
    • November (18)
    • October (22)
    • September (18)
    • August (23)
    • July (22)
    • June (17)
    • May (24)
    • April (16)
    • March (16)
    • February (21)
    • January (21)
  • 2015
    • December (5)
    • November (10)
    • October (9)
    • September (17)
    • August (20)
    • July (17)
    • June (4)
    • May (12)
    • April (9)
    • March (8)
    • February (25)
    • January (17)
  • 2014
    • December (22)
    • November (19)
    • October (21)
    • September (37)
    • August (24)
    • July (23)
    • June (13)
    • May (19)
    • April (24)
    • March (23)
    • February (21)
    • January (24)
  • 2013
    • December (23)
    • November (29)
    • October (27)
    • September (26)
    • August (24)
    • July (24)
    • June (23)
    • May (25)
    • April (26)
    • March (24)
    • February (24)
    • January (21)
  • 2012
    • December (19)
    • November (22)
    • October (27)
    • September (24)
    • August (30)
    • July (23)
    • June (25)
    • May (23)
    • April (25)
    • March (25)
    • February (28)
    • January (24)
  • 2011
    • December (17)
    • November (14)
    • October (24)
    • September (28)
    • August (27)
    • July (30)
    • June (19)
    • May (16)
    • April (30)
    • March (23)
    • February (11)
    • January (26)
  • 2010
    • December (29)
    • November (28)
    • October (35)
    • September (33)
    • August (44)
    • July (17)
    • June (20)
    • May (53)
    • April (29)
    • March (35)
    • February (33)
    • January (36)
  • 2009
    • December (37)
    • November (35)
    • October (53)
    • September (60)
    • August (66)
    • July (29)
    • June (24)
    • May (52)
    • April (63)
    • March (35)
    • February (53)
    • January (50)
  • 2008
    • December (58)
    • November (65)
    • October (46)
    • September (48)
    • August (96)
    • July (87)
    • June (45)
    • May (51)
    • April (52)
    • March (70)
    • February (43)
    • January (49)
  • 2007
    • December (100)
    • November (52)
    • October (109)
    • September (68)
    • August (80)
    • July (56)
    • June (150)
    • May (115)
    • April (73)
    • March (124)
    • February (102)
    • January (68)
  • 2006
    • December (95)
    • November (53)
    • October (120)
    • September (57)
    • August (88)
    • July (54)
    • June (103)
    • May (89)
    • April (84)
    • March (143)
    • February (78)
    • January (64)
  • 2005
    • December (70)
    • November (97)
    • October (91)
    • September (61)
    • August (74)
    • July (92)
    • June (100)
    • May (53)
    • April (42)
    • March (41)
    • February (84)
    • January (31)
  • 2004
    • December (49)
    • November (26)
    • October (26)
    • September (6)
    • April (10)
Couchbase vs RavenDB Performance at Rakuten Kobo Whitepaper
  previous post next post  
Dec 18 2007

Choices...

time to read 1 min | 4 words

IFooFactoryFactoryFactoryFactory vs. Factory<Factory<Factory<Factory<Factory<IFooFactory>>>>>

Discuss...

Tweet Share Share 14 comments
Tags:
  • Humor

Related posts that you may find interesting:

04 Mar 2006 Rhino Mocks 2.6.4: Bug Fix Release
Microsoft Rhino Mocks
08 Oct 2008 Rhino Mocks Challenge: Implement This Feature
Challanges Rhino Mocks
20 Apr 2008 Rhino Mocks Futures
Rhino Mocks
  previous post next post  

Comments

Bill Barry
18 Dec 2007
21:27 PM
Bill Barry

Oi...

umm, is

iFooFactoryFactoryFactoryFactory : Factory<Factory<Factory<Factory<Factory<IFooFactory>>>>>

and are you using it more than once?

If so, then the former; btw, what is wrong that you need such a structure?

Avish
18 Dec 2007
21:31 PM
Avish

Redesign.

Peter w
18 Dec 2007
21:36 PM
Peter w

I like the latter, because the syntax exposes a little more detail about the type, but this is only a matter of personal preference.

I'll tell you one thing: it is a serious PITA to do the latter in XAML and it is pissing me off at the moment!!!!!!!!

Trumpi
18 Dec 2007
21:45 PM
Trumpi

NO NO NO NO NO!!!

It's Factory<Factory<Factory<Hammer>>>

(For those who don't get it, read http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12)

Luke Breuer
18 Dec 2007
23:43 PM
Luke Breuer

I would go for the double barrel shotgun. If you need more firepower, I'll see what I can do. :-p

Nick Parker
19 Dec 2007
01:00 AM
Nick Parker

You could SO use another factory to manage all that complexity! ;-)

Mats Helander
19 Dec 2007
01:20 AM
Mats Helander

I'm with Nick on this one, although it seems you're also missing an AbstractFactory or two in there.

/Mats

goodwill
19 Dec 2007
09:06 AM
goodwill

I think redesign is a good answer.

I will prefer #1, the #2 one is going to cause a lot of confusion on casting as Factory<Factory... is a distinct type and it never cast to Factory...

Tapio K
19 Dec 2007
13:10 PM
Tapio K

I need both !

Obviously

Factory<Factory<Factory<Factory<Factory<IFooFactory>>>>> implements interface IFooFactoryFactoryFactoryFactory

efdee
19 Dec 2007
14:48 PM
efdee

I usualy prefer the first version because it allows for a more descriptive name and it keeps the implementation (using generics) hidden.

Mr_Simple
19 Dec 2007
16:15 PM
Mr_Simple

I feel so redeemed.

Bryan Watts
19 Dec 2007
18:23 PM
Bryan Watts

Generics allow you to describe something which, when expanded, gives you a more particular something.

In this case, you can say "IFooFactoryFactoryFactoryFactory" by saying "Factory<Factory<Factory<Factory<Factory<IFooFactory>>>>>", and you don't need to create (or maintain) a separate artifact.

Interfaces which embed type information are usually a less-expressive way of saying the same thing with generics:

IStringWidget vs. IWidget<string>

They are synonymous!

Keith Nicholas
19 Dec 2007
20:07 PM
Keith Nicholas

I so hope you really need that level of abstraction.

James Kovacs
19 Dec 2007
20:51 PM
James Kovacs

Based on the comments, it appears that a few people haven't properly analyzed an instance of the aforementioned type.

[Test]

public void CanExamineComplexClass() {

IFooFactoryFactoryFactoryFactory fooFactoryFactoryFactoryFactory = new Factory<Factory<Factory<Factory<Factory<IFooFactory>>>>>();

Assert.IsTrue(fooFactoryFactoryFactoryFactory is Joke);

}

If this was meant as a serious example, Oren would have used Boo (or written his own compiler).

Comment preview

Comments have been closed on this topic.

Markdown formatting

ESC to close

Markdown turns plain text formatting into fancy HTML formatting.

Phrase Emphasis

*italic*   **bold**
_italic_   __bold__

Links

Inline:

An [example](http://url.com/ "Title")

Reference-style labels (titles are optional):

An [example][id]. Then, anywhere
else in the doc, define the link:
  [id]: http://example.com/  "Title"

Images

Inline (titles are optional):

![alt text](/path/img.jpg "Title")

Reference-style:

![alt text][id]
[id]: /url/to/img.jpg "Title"

Headers

Setext-style:

Header 1
========
Header 2
--------

atx-style (closing #'s are optional):

# Header 1 #
## Header 2 ##
###### Header 6

Lists

Ordered, without paragraphs:

1.  Foo
2.  Bar

Unordered, with paragraphs:

*   A list item.
    With multiple paragraphs.
*   Bar

You can nest them:

*   Abacus
    * answer
*   Bubbles
    1.  bunk
    2.  bupkis
        * BELITTLER
    3. burper
*   Cunning

Blockquotes

> Email-style angle brackets
> are used for blockquotes.
> > And, they can be nested.
> #### Headers in blockquotes
> 
> * You can quote a list.
> * Etc.

Horizontal Rules

Three or more dashes or asterisks:

---
* * *
- - - - 

Manual Line Breaks

End a line with two or more spaces:

Roses are red,   
Violets are blue.

Fenced Code Blocks

Code blocks delimited by 3 or more backticks or tildas:

```
This is a preformatted
code block
```

Header IDs

Set the id of headings with {#<id>} at end of heading line:

## My Heading {#myheading}

Tables

Fruit    |Color
---------|----------
Apples   |Red
Pears	 |Green
Bananas  |Yellow

Definition Lists

Term 1
: Definition 1
Term 2
: Definition 2

Footnotes

Body text with a footnote [^1]
[^1]: Footnote text here

Abbreviations

MDD <- will have title
*[MDD]: MarkdownDeep

 

FUTURE POSTS

No future posts left, oh my!

RECENT SERIES

  1. API Design (10):
    29 Jan 2026 - Don't try to guess
  2. Recording (20):
    05 Dec 2025 - Build AI that understands your business
  3. Webinar (8):
    16 Sep 2025 - Building AI Agents in RavenDB
  4. RavenDB 7.1 (7):
    11 Jul 2025 - The Gen AI release
  5. Production postmorterm (2):
    11 Jun 2025 - The rookie server's untimely promotion
View all series

RECENT COMMENTS

  • Rustam, Yes, you can do that with `slackdump`, sure. I literally couldn't get the auth to work properly. Now, I *could* ...
    By Oren Eini on A tale of one-off, coding agents and the shortest path to victory
  • It's quite easy with slackdump: 1. Run a dump of a channel: slackdump dump <CHANNEL_ID> - produces a zip file with the...
    By Rustam on A tale of one-off, coding agents and the shortest path to victory
  • As someone reading you for a long time and maintaining his own 15 year old code base, on a much smaller scale, I also came to...
    By Nicholas Piasecki on Maintainability in the age of coding agents
  • Peter, That actually comes from a bunch of reasons. - `@refresh` - is easier to just type then provide a strongly typed...
    By Oren Eini on Implementing Agentic Reminders in RavenDB
  • curious why literal strings are used (@refresh, smartest-agent, GetRaisedReminders etc). Is there no simple way to use strin...
    By peter on Implementing Agentic Reminders in RavenDB

Syndication

Main feed ... ...
Comments feed   ... ...
}