最近,我学习了Swift以及开发iOS应用程序的基础知识。现在,我想自己开发一个真正的应用程序,但我非常关心编写好的代码,所以我一直在寻找“最佳实践”,“设计模式”和“正确的方法”来实现它。
在我的搜索中,我发现了great tutorial关于Swift iOS应用中通常使用的所有设计模式以及它们在何处使用的示例。
但是我认为这个教程很棒并帮助了我很多,我觉得这只是一个开始,因为我看到很多S.O.L.I.D.违反原则。例如:
参见LibraryAPI中实现的外观模式:
:native
我首先想到的是:这是否违反了依赖性倒置原则?不应该将:nativestrict
和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
}
}
声明为协议,然后类httpClient
和persistencyManager
会实现该协议吗?
如果是这种情况,在某些时候,我将不得不定义实现这些协议的类,我将要使用。我应该在哪里告诉应用程序?
我的另一个问题是:这个例子只实现了一个模型(HttpClient
),但如果它实现了许多其他模型呢? (PersistencyManager
,Album
,Album
...)。 Author
不会如此之大,以致违反单一责任原则吗?
最后但并非最不重要的...... Genre
中存在与DIP相同的问题。它不应该实现DAO模式,所以`PersistencyManager不依赖于其他类吗?
提前谢谢你,我希望我解释得足够好!
答案 0 :(得分:17)
一些建议
答案 1 :(得分:7)
由于第一行问题表明您希望自己开发一个真正的应用程序"因此,我只是想指出你正确的方向。
事实是没有"最好"构建代码的方式您可以通过多种方式编写完成相同任务的代码。除非你在团队中工作并构建一个非常复杂的应用程序,否则你遵循哪种方法并不重要。
正如你所说,你已经学会了迅速,我建议你现在专注于学习像闭包和协议这样的swift的高级功能。熟悉这些内容之后,您需要熟悉iOS SDK,其中包含您需要在应用中使用的大量内置框架。
最后,请尽快开始使用您的应用。您可能无法在第一个应用程序中编写干净且结构良好的代码,但随着时间的推移,您将通过犯错并在以后更正它们来学习。为了鼓励你,我想告诉你,制作一个简单的应用并不是很难,我学会了客观的c并在20天内完成了我的第一场比赛,你也可以做到。如果您需要任何教程/资源,只需发表评论,我会更新答案。
专注于构建应用。稍后在构建应用时进行改进。