Design patterns 实施工厂模式-卸下开关

Design patterns 实施工厂模式-卸下开关,design-patterns,factory-pattern,design-principles,Design Patterns,Factory Pattern,Design Principles,我最近刚开始尝试提高我作为开发人员的基本技能,并阅读更多关于设计模式的内容,而抽象工厂的变体是我使用了一段时间的东西。不过,我对实现的细节有一个问题,即不再需要一个大的switch语句 假设我有一个RESTAPI,用于将文档类型输入数据库。所有类型的文档都继承自文档抽象类 public IDocumentFactory{ Document CreateDocumentTypeOne(string inboundDocumentJson); Document CreateDocum

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

假设我有一个RESTAPI,用于将文档类型输入数据库。所有类型的文档都继承自文档抽象类

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来处理发货地址、物品重量等。;如果退款回复返回,工厂可以返回退款处理人,该处理人将处理退款金额等


如果RESTful api只返回您请求的类型,而不是所有api都遵循接口隔离原则,那就更好了。所以你有时不得不处理杂乱的数据

谢谢你,约翰!这是有道理的,我就是这样管理它的。工厂似乎是一个有开关语句的合乎逻辑的地方,因为我知道我在正确的线路上。