最近,我學習了Swift和開發iOS應用程序的基礎知識。現在,我想自己開發一個真正的應用程序,但是我非常關心編寫好的代碼,所以我一直在尋找「最佳實踐」,「設計模式」和「正確的方式」來實現它。開發Swift iOS應用程序「正確的方式」
在我的搜索,我發現這個great tutorial約通常在斯威夫特iOS應用中使用的所有設計模式和使用它們其中的一個例子。
但無論如何,我認爲這個教程一個偉大的之一,對我幫助很大,我有它僅是一個開始的感覺,因爲我看到很多S.O.L.I.D.原則違規。例如:
見LibraryAPI實現Facade模式:
class LibraryAPI: NSObject {
private let persistencyManager: PersistencyManager
private let httpClient: HTTPClient
private let isOnline: Bool
class var sharedInstance: LibraryAPI {
struct Singleton {
static let instance = LibraryAPI()
}
return Singleton.instance
}
override init() {
persistencyManager = PersistencyManager()
httpClient = HTTPClient()
isOnline = false
super.init()
NSNotificationCenter.defaultCenter().addObserver(self, selector:"downloadImage:", name: "BLDownloadImageNotification", object: nil)
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func getAlbums() -> [Album] {
// ... Not relevant
}
func addAlbum(album: Album, index: Int) {
// ... Not relevant
}
func deleteAlbum(index: Int) {
// ... Not relevant
}
func downloadImage(notification: NSNotification) {
// ... Not relevant
}
}
是在我腦海中看到的,這是第一件事:這是否違反Depedency倒置原則?不應該將httpClient
和persistencyManager
聲明爲協議,然後類HttpClient
和PersistencyManager
實現該協議?
如果是這樣的話,在某些時候,我必須確定一下班,負責執行這些協議,我將使用。我應該在哪裏告訴應用程序?
另一個問題我已經是:這個例子只實現了一個模型(Album
),但如果它會實現很多其他什麼? (Album
,Author
,Genre
...)。不會是LibraryAPI
這麼大,它會違反單一責任原則?
最後但並非最不重要......與DIP同樣的問題PersistencyManager
存在。它不應該實現DAO模式,所以`PersistencyManager不依賴於其他類?
謝謝你在前進,我希望我解釋自己不夠好!
在[Code Review Stack Exchange](http://codereview.stackexchange.com/)上可能會問這個問題更好 –
@DanielStorm對不起,我甚至不知道這個網站的存在。 – barbarity