Ayende @ Rahien

Refunds available at head office

Choices...

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

Discuss...

Comments

Bill Barry
12/18/2007 09:27 PM by
Bill Barry

Oi...

umm, is

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

and are you using it more than once?

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

Avish
12/18/2007 09:31 PM by
Avish

Redesign.

Peter w
12/18/2007 09:36 PM by
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
12/18/2007 09:45 PM by
Trumpi

NO NO NO NO NO!!!

It's Factory<Factory<Factory>>

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

Luke Breuer
12/18/2007 11:43 PM by
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
12/19/2007 01:00 AM by
Nick Parker

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

Mats Helander
12/19/2007 01:20 AM by
Mats Helander

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

/Mats

goodwill
12/19/2007 09:06 AM by
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
12/19/2007 01:10 PM by
Tapio K

I need both !

Obviously

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

efdee
12/19/2007 02:48 PM by
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
12/19/2007 04:15 PM by
Mr_Simple

I feel so redeemed.

Bryan Watts
12/19/2007 06:23 PM by
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>>>>", 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

They are synonymous!

Keith Nicholas
12/19/2007 08:07 PM by
Keith Nicholas

I so hope you really need that level of abstraction.

James Kovacs
12/19/2007 08:51 PM by
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>>>>();

Assert.IsTrue(fooFactoryFactoryFactoryFactory is Joke);

}

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

Comments have been closed on this topic.