开发 Swift iOS 应用程序“正确的方式”
Posted
技术标签:
【中文标题】开发 Swift iOS 应用程序“正确的方式”【英文标题】:Developing a Swift iOS app "The Right Way" 【发布时间】:2015-08-02 11:37:58 【问题描述】:最近,我学习了 Swift 和开发 ios 应用的基础知识。现在,我想自己开发一个真正的应用程序,但我非常关心编写好的代码,所以我查找了“最佳实践”、“设计模式”和“正确的方法”来实现它。
在我的搜索中,我找到了这个great tutorial,其中介绍了 Swift iOS 应用程序中通常使用的所有设计模式以及它们在哪里使用的示例。
但是我认为这个教程很棒并且帮助了我很多,我觉得这只是一个开始,因为我看到了很多 S.O.L.I.D.违反原则。例如:
查看 LibraryAPI 中实现的外观模式:
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
...)。 LibraryAPI
会不会太大以至于违反单一责任原则?
最后但并非最不重要... DIP 存在同样的问题PersistencyManager
。不应该实现DAO模式,所以`PersistencyManager不依赖其他类吗?
提前谢谢你,我希望我解释得足够好!
【问题讨论】:
这个问题最好在Code Review Stack Exchange上问 @DanielStorm 对不起,我什至不知道这个网站的存在。 【参考方案1】:一些建议
-
设计模式是一种指南,可帮助您节省解决已解决问题的精力,它们不是严格的规则
虽然您链接到的站点 (raywenderlich.com) 是学习教程的良好开端,但为了更详细地了解 swift 中的设计模式,我建议 Design Patterns In Swift
如果 HttpClient 和 PersistencyManager 是提供接口的基类,那么协议并不是严格必要的。我同意协议是一种更通用的方式
如果您使用协议,我会在初始化程序中指定客户端和持久性管理器,因为它们是必不可少的
持久化模型是一个足够具体的角色,可以由单个类处理,请参阅 realm.io 以获取示例 db
【讨论】:
感谢您的链接。非常非常非常有用!【参考方案2】:由于问题的第一行表明您想“自己开发一个真正的应用程序”,因此我只想为您指出正确的方向。
事实上,没有“最好”的方式来构建您的代码。您可以通过多种方式编写完成相同任务的代码。除非您在一个团队中工作并构建一个非常复杂的应用程序,否则您遵循哪种方法并不重要。
正如您所说,您已经学习了 swift,我建议您现在专注于学习 swift 的高级功能,例如闭包和协议。一旦你熟悉了这些,你就需要熟悉 iOS SDK,它有很多内置的框架,你需要在你的应用中使用。
最后,尽快开始使用您的应用。您可能无法在您的第一个应用程序中编写干净且结构良好的代码,但随着时间的推移,您将通过犯错误并在以后更正错误来学习。只是为了鼓励你,我想告诉你,做一个简单的应用程序并不难,我学习了objective c,并在20天内制作了我的第一个游戏,你也可以做到。如果您需要任何教程/资源,请发表评论,我会更新答案。
专注于构建应用程序。在构建应用程序后进行改进。
【讨论】:
我一直犯的一个错误。从一开始就一直想把它做到完美。但我会听从你的建议。谢谢! 如果你想开始自己的应用程序,直到你掌握了最好的编码设计和模式等等......你永远不会开始你的应用程序。顺便说一句,那是我的问题。我在考虑应用程序的每一个细节,而应用程序根本不存在。刚开始并从错误中吸取教训。我可以告诉我儿子注意生活中所有危险的事情,但如果他摔倒了,他实际上会学会,因为他不能学会站起来。做吧,我们稍后会处理这个问题:)以上是关于开发 Swift iOS 应用程序“正确的方式”的主要内容,如果未能解决你的问题,请参考以下文章
iOS oc/swift开发要知道的(应)知(付)识(面)点(试)
iOS oc/swift开发要知道的(应)知(付)识(面)点(试)
如何以正确的方式在 IOS SWIFT 3 中解析 Google 距离矩阵 API JSON