子类与扩展与内部类

时间:2017-06-20 15:42:59

标签: swift

我正在与Quizlet API进行互动,而且我一直在讨论构建代码的最佳方式。 Quizlet API具有多种功能,例如查看SetsClasses和其他User信息。我试图为此创建APIClients,但我一直在努力寻找更好的解决方案来为客户建模或从这些潜在解决方案中选择最佳解决方案。

解决方案1: 创建一个名为superclass的{​​{1}},并存储基本信息,如QuizletManagerclientID和相关信息,这些信息在所有子类中都很有用。然后,我可以创建单独的access codes,如subclassesQuizletSet等,以处理提取集,类和相关信息。当我真的需要获取数据时,我可能永远不会最终调用QuizletClass;但是,我会创建QuizletManager及相关类的新实例来进行联网。

解决方案2: 再次创建一个QuizletSet超类及其所有相关的子类。但是,这次我实例化了所有与Sets相关的子类以及QuizletManager类中的所有子类,并且QuizletManager中的方法在获取信息时调用子类。 在这种情况下,我总是会调用QuizletManagerQuizletManager会使用子类来实际获取信息。

解决方案3: 创建一个QuizletManager类并使其更具可读性,使用扩展来添加获取QuizletManagerSets等功能。扩展本质上包含添加抓取功能的函数{{ 1}}和相关信息。

解决方案4: 在这个解决方案中,我会在一个类中有一个类。基本上,我只是有这样的事情:

Classes

1 个答案:

答案 0 :(得分:1)

在前面的每个示例中,您都会耦合到层次结构或将所有与API相关的调用作为扩展放在单个类上。这可能会使您的代码更不灵活,更难维护。可能适合您的一种解决方案是使用依赖注入

以下是如何构建代码的示例。

struct QuizletAPICredentials {
    var clientID: String
    var accessCodes: [String]
    //etc...
}

class QuizletSetClient {
    var credentials: QuizletAPICredentials

    init(credentials: QuizletAPICredentials) {
        self.credentials = credentials
    }

    func fetchSets( ... ) {
        //get data...
    }
}

我希望这有帮助! : - ]