首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift集成模式MVC和外观模式

Swift集成模式MVC和外观模式
EN

Stack Overflow用户
提问于 2015-08-03 19:44:59
回答 1查看 475关注 0票数 0

我非常困惑,希望您能给我一个使用强大架构的建议。1)第一个问题是我使用的模式是mvc end Facade。在我的项目中,所有控制器都称为Facade类。facade类调用Model (业务逻辑)这个过程根据您的经验被认为是性能? 2)第二个问题Facade模式的手册建议集中使用单个类。这里我疯狂了:)想象一下,一个类(A)包含20个方法,一个类(B)包含20个其他方法。Facade类实例化class (A) end class (B)我必须在Facade类中调用40个方法?成为一个非常非常大的班级:(

根据你的经验,你采用了什么系统?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-08-03 22:05:15

在你进入“我如何实现它”之前,你应该真正思考一下为什么要实现它。

外观设计模式

Facade模式用于为复杂的系统创建更简单的界面,从而使您的生活更轻松。通常,正如您可能已经注意到的,您可以使用它来管理多个类(甚至是您有接口的子系统)。

此外,您可以使用它来屏蔽内部实现,因此,如果某些子系统改变了它们的工作方式,您的更高级别的函数仍将保持不变,并填补相同的角色。

如何构建门面

里面有一些great examples on wikipedia,建议大家通读一遍,特别是简单计算机的代码示例。我用它作为Swift版本的例子:

代码语言:javascript
复制
// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
// MARK: - Definitions

private let BOOT_ADDRESS = 0


// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
// MARK: - Subsystems

class CPU {

    func freeze() { }
    func jump(position : Int64) { }
    func execute() { }
}


class Memory {

    func load(position : Int64, data : NSData) { }
}


class HardDrive {

    func read(position : Int64, data : NSData) -> NSData { }
}


// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
// MARK: - Facade

class Computer {

    // Create all computer subsystems
    let cpu = CPU()
    let memory = Memory()
    let hdd = HardDrive()

    // Implement reason why you are creating this facade
    func start() {

        self.cpu.freeze()
        self.memory.load(BOOT_ADDRESS, data: NSData())
        self.cpu.jump(BOOT_ADDRESS)
        self.cpu.execute()
    }
}

现在你可以看到,你有CPU,内存和硬盘,所有内部复杂的东西。但你只关心门面电脑。这使您可以启动计算机,而无需考虑如何操作,如下所示:

代码语言:javascript
复制
// Create computer object
let computer = Computer()

// Start computer (how is it done is none of your bussiness)
computer.start()

现在,你如何解决你的特定问题取决于你,但你应该遵循类似的想法。不要忘记,只有在Facade确实对您有帮助的情况下,才应该使用Facade。永远不要因为你知道它是什么而试图使用它(因为人们经常过度使用这些模式,然后以糟糕的代码告终)。

希望它能帮上忙!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31786384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档