Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

A Modern Alternative to Abstract Factory Filtered Dependencies

DZone's Guide to

A Modern Alternative to Abstract Factory Filtered Dependencies

· Integration Zone
Free Resource

Today’s data climate is fast-paced and it’s not slowing down. Here’s why your current integration solution is not enough. Brought to you in partnership with Liaison Technologies.

I've mentioned before that I really don’t like the Abstract Factory pattern, and in particular, code like this:

static IGUIFactory CreateOsSpecificFactory()
 {
    string sysType = ConfigurationSettings.AppSettings["OS_TYPE"];
    if (sysType == "Win") 
    {
        return new WindowsFactory();
    } 
    else 
    {
        return new MacFactory();
  }
}

One of the comments mentioned that this might not be ideal, but it is still better than:

if(RunningOnWindows)
 {
    // code
 }
 else if(RunningOnMac)
 {
    // code
 }
 else if(RunningOnLinux)
 {
    // code
}

And I agree. But I think that, as the comment mentioned, a far better alternative would be using the container. You can do this using:

[OperationSystem("Windows")]
public class WindowsFactory : IGUIFactory
{
} 
[OperationSystem("Linux")]
public class LinuxFactory : IGUIFactory
{
}
[OperationSystem("Mac")]
public class MacFactory : IGUIFactory
{
}

Then you just need to wire things through the container. Among other things, this means that we respect the open / closed principle. If we need to support a new system, we can just add a new class, we don’t need to modify code.

Remember, the Go4 book was written in the age of C++. Reflection didn’t exists, and that means that a lot of patterns do by hands things that can happen automatically.

 

Is iPaaS solving the right problems? Not knowing the fundamental difference between iPaaS and iPaaS+ could cost you down the road. Brought to you in partnership with Liaison Technologies.

Topics:

Published at DZone with permission of Oren Eini, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}