Last active
November 5, 2022 23:51
-
-
Save cjnevin/98f105d8c35eeeaddcccb07ee6b753be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Abstract | |
protocol NavigationController { | |
func push(_ view: View) | |
} | |
protocol View {} | |
protocol Service { | |
func fetchUser() -> User | |
func write(user: User) | |
} | |
// Concrete | |
struct User { | |
let name: String | |
} | |
class Router { | |
let navigationController: NavigationController // abstract | |
@Dependency(\.userViewFactory) var userViewFactory // abstract | |
func show(user: User) { | |
let view = userViewFactory.make(user) | |
let presenter = PresenterB(interactor: InteractorB(), router: RouterB()) | |
presenter.delegate = view | |
view.presenter = presenter | |
navigationController.push(view) | |
} | |
} | |
class Presenter { | |
weak var delegate: View? // abstract | |
let interactor: Interactor // concrete | |
let router: Router // concrete | |
func prepare() { | |
interactor.fetchUser() | |
} | |
func store(user: User) { | |
interactor.store(user) | |
} | |
func show(user: User) { | |
router.show(user) | |
} | |
} | |
class Interactor { | |
weak var delegate: Presenter? | |
@Dependency(\.service) var service // abstract | |
func fetchUser() { | |
delegate?.show(user: service.fetchUser()) | |
} | |
func store(user: User) { | |
service.write(user) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment