实施工厂模式 - 移除开关

Implementing Factory Patterns - Removing the switch

我最近刚开始尝试提高我作为开发人员的基本技能,并阅读了更多有关设计模式的内容,抽象工厂的变体是我使用了一段时间的东西。不过,我对实现的细节有疑问,即不再需要大的 switch 语句。

假设我有一个 REST API 用于将文档类型输入数据库。所有类型的文档都继承自文档摘要 class.

public IDocumentFactory{
    Document CreateDocumentTypeOne(string inboundDocumentJson);
    Document CreateDocumentTypeTwo(string inboundDocumentJson);
}

我如何避免在我的 API 控制器中做这样的事情来决定进入哪种类型的文档

public Document LoadDocument (string type, string inboundDocumentJson) {
    switch (type) {
        case "type1":
            return IDocumentFactory.CreateDocumentTypeOne(inboundDocumentJson);
        case "type2":
            return IDocumentFactory.CreateDocumentTypeTwo(inboundDocumentJson);
    }    
}

我觉得无论以哪种方式实现代码,我都需要在某个地方使用这样的 switch 语句?在我调用 API 之前是否有不同的 API 端点和开关?或者在 API 某处。

我是否遗漏了有关实施的内容?如果没有,放置代码的最佳位置在哪里?

工厂通常是放置 switch 语句以处理不同类型的地方。在解析器中,您可能需要处理不同级别的响应和类型,因此它们会堆叠起来:如果返回“购买”响应,它可能包含送货地址,因此您可以使用工厂创建一个 purchaseHandler 来处理送货地址、物品重量等;如果退款响应返回,工厂可以 return 一个 refundHandler 来处理退款金额等。

如果 RESTful api 只 return 您请求的类型会更好,但并非所有 api 都遵循接口隔离原则。所以你有时不得不处理混乱的数据。