我非常困惑,希望您能给我一个使用强大架构的建议。1)第一个问题是我使用的模式是mvc end Facade。在我的项目中,所有控制器都称为Facade类。facade类调用Model (业务逻辑)这个过程根据您的经验被认为是性能? 2)第二个问题Facade模式的手册建议集中使用单个类。这里我疯狂了:)想象一下,一个类(A)包含20个方法,一个类(B)包含20个其他方法。Facade类实例化class (A) end class (B)我必须在Facade类中调用40个方法?成为一个非常非常大的班级:(
根据你的经验,你采用了什么系统?
谢谢。
发布于 2015-08-03 22:05:15
在你进入“我如何实现它”之前,你应该真正思考一下为什么要实现它。
外观设计模式
Facade模式用于为复杂的系统创建更简单的界面,从而使您的生活更轻松。通常,正如您可能已经注意到的,您可以使用它来管理多个类(甚至是您有接口的子系统)。
此外,您可以使用它来屏蔽内部实现,因此,如果某些子系统改变了它们的工作方式,您的更高级别的函数仍将保持不变,并填补相同的角色。
如何构建门面
里面有一些great examples on wikipedia,建议大家通读一遍,特别是简单计算机的代码示例。我用它作为Swift版本的例子:
// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
// 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,内存和硬盘,所有内部复杂的东西。但你只关心门面电脑。这使您可以启动计算机,而无需考虑如何操作,如下所示:
// Create computer object
let computer = Computer()
// Start computer (how is it done is none of your bussiness)
computer.start()现在,你如何解决你的特定问题取决于你,但你应该遵循类似的想法。不要忘记,只有在Facade确实对您有帮助的情况下,才应该使用Facade。永远不要因为你知道它是什么而试图使用它(因为人们经常过度使用这些模式,然后以糟糕的代码告终)。
希望它能帮上忙!
https://stackoverflow.com/questions/31786384
复制相似问题