当前位置:  开发笔记 > 编程语言 > 正文

IoC容器是否取代了工厂的使用

如何解决《IoC容器是否取代了工厂的使用》经验,为你挑选了1个好方法。

我刚刚开始使用IoC容器,如果这是一个愚蠢的问题,请道歉.

我在应用程序中有如下代码

internal static class StaticDataHandlerFactory
    {
        public static IStaticDataHandler CreateHandler(StaticDataUpdate staticDataUpdate)
        {
            if (staticDataUpdate.Item is StaticDataUpdateOffice)
            {
                return new OfficeUpdateHandler();
            }

            if (staticDataUpdate.Item is StaticDataUpdateEmployee)
            {
                return new EmployeeUpdateHandler();   
            }

            if (staticDataUpdate.Item == null)
            {
                throw new NotImplementedException(
                    string.Format("No static data provided"));
            }
            else
            {
                throw new NotImplementedException(
                    string.Format("Unimplemented static data type of {0}", staticDataUpdate.Item.GetType().FullName));
            }
        }
    }

它基本上是一个简单的工厂,它返回处理输入数据的正确策略.

IoC容器是否允许我删除这样的代码?也就是说:它是否允许我根据输入参数的类型动态选择要加载的具体实现?

还是我离开这里?



1> Julian Birch..:

实际上,尽管可以用控制系统的反转代替一些代码,但对我来说这并不是一个好主意.依赖注入往往最适合系统配置,而不是动态创建对象.换句话说,容器本身是一个巨大的全局变量,因此应该出现在你的大部分代码中.

另外,代码似乎违反了得墨忒耳法则.看来参数应该是"StaticDataUpdateItem"类型而不是"StaticDataUpdate".通过观察,有一个非常强大的论据,可以将此代码重写为StaticDataUpdateItem上的方法调用.

我非常重视IoC,但使用抽象工厂模式仍然可以更好地处理动态对象.简而言之,如果您不喜欢向项目本身添加方法以生成句柄的想法,那么代码可能最好保持原样.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有