Class 依赖注入 vs 协议实现
Class with Dependency injection vs Protocol with implementation
下面有两个示例产生相同的结果。试图了解在哪些情况下哪个更好(优点和缺点)。
(1) 两个 类 依赖注入
class ServiceClass {
init() {}
func printHelloWorld() {
print("Hello World")
}
}
class ExampleClass {
let service: ServiceClass
init(service: ServiceClass) {
self.service = service
}
func doSomething() {
service.printHelloWorld()
}
}
(2) Class 符合协议
protocol ServiceProtocol {
func doSomething()
}
extension ServiceProtocol {
func printHelloWorld() {
print("hello world")
}
}
class ExampleClass: ServiceProtocol {
init() {}
func doSomething() {
printHelloWorld()
}
}
正如@Joakim 在评论中提到的,结合使用这两种方法可能是最好的实现方式。
protocol ServiceProtocol {
func doSomething()
}
extension ServiceProtocol {
func printHelloWorld() {
print("hello world")
}
}
class ExampleClass {
let service: ServiceProtocol
init(service: ServiceProtocol) {
self.service = service
}
func doSomething() {
service.printHelloWorld()
}
}
下面有两个示例产生相同的结果。试图了解在哪些情况下哪个更好(优点和缺点)。
(1) 两个 类 依赖注入
class ServiceClass {
init() {}
func printHelloWorld() {
print("Hello World")
}
}
class ExampleClass {
let service: ServiceClass
init(service: ServiceClass) {
self.service = service
}
func doSomething() {
service.printHelloWorld()
}
}
(2) Class 符合协议
protocol ServiceProtocol {
func doSomething()
}
extension ServiceProtocol {
func printHelloWorld() {
print("hello world")
}
}
class ExampleClass: ServiceProtocol {
init() {}
func doSomething() {
printHelloWorld()
}
}
正如@Joakim 在评论中提到的,结合使用这两种方法可能是最好的实现方式。
protocol ServiceProtocol {
func doSomething()
}
extension ServiceProtocol {
func printHelloWorld() {
print("hello world")
}
}
class ExampleClass {
let service: ServiceProtocol
init(service: ServiceProtocol) {
self.service = service
}
func doSomething() {
service.printHelloWorld()
}
}