如果我有一个结构和一些代码来处理这个结构的数组,那么放置这个代码的地方在哪里?
struct Thing {
var id : String
let type : ThingType
}
things:[Thing]?
我有代码从服务器检索值,该服务器返回100 Thing
数组。代码应该放在哪里?
我目前将它定义为Struct的静态函数,但是如果有的话,我希望遵循约定。
答案 0 :(得分:2)
从服务器检索protocol ThingProvider {
func fetchThings() -> [Thing]
}
实例的函数当然不应该是Thing的成员。
最好制作一个声明该功能的新协议,如下所示:
class DataBaseThingProvider: ThingProvider {
init() {
// open database connection
}
deinit() {
// close database connection
}
func fetchThings() -> [Thing] {
// fetch Things from database
}
}
和符合类型:
class MockThingProvider: ThingProvider {
func fetchThings() -> [Thing] {
return [
Thing(id: "MockThing1", type: thingType1),
Thing(id: "MockThing2", type: thingType2),
Thing(id: "MockThing3", type: thingType3)
]
}
}
这样,您可以通过更换您使用的具体提供程序类来更改您使用的提供程序(Firebase,Parse,SQLite,CoreData,JSON,CSV等等)。所有其他代码都可以保持不变。< / p>
它还使您的代码更易于测试,因为您可以轻松构建模拟提供程序,从而将测试与生产后端分离。
{{1}}