【问题标题】:Reflection in Factory a Good Practice?工厂反思是一种好的做法?
【发布时间】:2012-10-08 06:21:09
【问题描述】:

我想写一个工厂来实例化一个具体的类并将它的接口返回给客户端。通过这种方式,我可以将客户端与直接依赖于具体类解耦。但是,同时我不希望工厂依赖于具体类。我可以使用反射来满足我的需要,但在这样做之前我想知道这是否是一个好的做法。

【问题讨论】:

    标签: c# design-patterns factory


    【解决方案1】:

    很难说没有更多细节,但我通常期望工厂实现依赖于它创建实例的具体类。在我看来,这是一种完全自然的依赖。

    如果你想让它成为一个非常通用的工厂,它本质上精确地增加了价值因为它使用了反射——本质上是做大多数 IoC 容器所做的一小部分——那没关系;但如果它是一种特定类型的工厂,那么我只会接受依赖。它可能会导致代码更易于理解和测试,并且效率更高。

    【讨论】:

    • 我想补充一点,这个工厂经常和它创建的具体类型在同一个组件中。
    • @Jon Skeet:我明白你的意思。我想创建一个通用工厂,将整个业务层与 UI 层分离。在这种情况下,我可以公开一个能够实例化任何具体类的通用工厂,或者我可以公开一个实例化特定类别的具体类的工厂,并且我将为每个类别都有一个工厂。有什么好主意?
    • @Imran:你肯定需要你自己的保理吗?现有的 IoC 容器不能满足您的需要吗? (他们可能不会,但值得考虑......)
    • @JonSkeet:我没有做足够的研究来了解 IoC 容器。但就目前而言,我认为 Spring.NET 是一个不错的选择。你能推荐任何其他框架吗?
    • @Imran:我不能说我对 .NET 容器有足够的“真实”经验。我知道有很多可供选择:)
    【解决方案2】:

    是的,您的方法将是很好的做法。但是已经有一些框架可以为您工作。请参阅MEF 框架。

    【讨论】:

      【解决方案3】:

      是的,你的方法很好,我认为它没有任何问题。但是,您应该使用一些已经存在的框架,而不是花时间来做这件事。

      你可以考虑Spring Framework's IOC module

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-07
        相关资源
        最近更新 更多