Choices...

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

Discuss...

Print | posted on Tuesday, December 18, 2007 11:13 PM

Feedback


Gravatar

# re: Choices... 12/18/2007 11: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?


Gravatar

# re: Choices... 12/18/2007 11:31 PM Avish

Redesign.


Gravatar

# re: Choices... 12/18/2007 11: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!!!!!!!!


Gravatar

# re: Choices... 12/18/2007 11: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)


Gravatar

# re: Choices... 12/19/2007 1:43 AM Luke Breuer

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


Gravatar

# re: Choices... 12/19/2007 3:00 AM Nick Parker

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


Gravatar

# re: Choices... 12/19/2007 3: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


Gravatar

# re: Choices... 12/19/2007 11: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...


Gravatar

# re: Choices... 12/19/2007 3:10 PM Tapio K

I need both !

Obviously

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


Gravatar

# re: Choices... 12/19/2007 4: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.


Gravatar

# re: Choices... 12/19/2007 6:15 PM Mr_Simple

I feel so redeemed.


Gravatar

# re: Choices... 12/19/2007 8: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!


Gravatar

# re: Choices... 12/19/2007 10:07 PM Keith Nicholas

I so hope you really need that level of abstraction.


Gravatar

# re: Choices... 12/19/2007 10: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).

Comments have been closed on this topic.