2015-08-03 19 views
0

我很困惑,並希望有關於使用強大的體系結構的建議。 1)第一個問題 我使用的模式是mvc end Facade。 在我的項目中,所有控制器都稱爲Facade類。門面類調用模型(業務邏輯) 這個過程被認爲是你的經驗表現? 2)第二個問題 Facade模式的手冊建議使用一個集中的類。 這裏我瘋了:) 想象一下有一個包含20個方法的類(A)和一個包含20個其他方法的類(B)。 Facade類實例化類(A)結束類(B) 我將不得不在Facade類調用40個方法中調用? 成爲一類非常非常大:(Swift整合模式MVC和門面模式

從你的經驗,你都採用什麼系統?

謝謝。

+0

你能更具體嗎?你真正的問題是什麼? :)你是問如何在iOS中實現這些特定模式或什麼? –

+0

是的。我如何在Swift中構建門面模式? 我有一個類(A)裏面包含20個方法。類(B)包含20種方法。如何實現模式外觀? – Diego

回答

3

你進入「我怎麼實現它」之前,你應該認真考慮爲什麼要實現它。

門面設計模式

Facade模式所使用的,否則共同創建簡單的接口,使您的生活更輕鬆複雜系統。通常 - 正如您可能已經注意到的那樣,您可以使用它來管理多個類(或者甚至具有接口的子系統)。

這意味着在實踐中你會在任何地方使用門面模式,你經常使用相同的樣板代碼(這是很常見的),所以可以用更短的東西來代替,或者如果門面將爲您提供更乾淨的代碼,更簡單的管理。此外,你可以用它來屏蔽內部實現,所以如果某個子系統改變它們的工作方式,那麼你的更高層次的功能仍然保持不變,並且發揮相同的作用。

如何建立正面

有一些great examples on wikipedia,我建議你讀一遍,尤其是簡單的計算機的代碼示例。我用它作爲例子爲雨燕版本:

// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 
// 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。不要試圖僅僅因爲你知道它是什麼而使用它(因爲人們常常會濫用這些模式並最終導致可怕的代碼)。

希望它有幫助!

+0

感謝您的幫助 在整個項目中使用門面模式我認爲是錯誤的。 因爲主類Es ..(RootFacade)會非常計數許多類和方法。 我想我只用於調用多個類的複雜進程。示例(調用webservice)。 – Diego

+1

立面只是支撐模式。對於構建到iOS應用程序,您應遵循Apple推薦的標準MVC模式。您可以在Apple網站上閱讀更多信息:https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html –