Представьте себе приложение, подобное Facebook, где вы создаете учетную запись и можете создавать посты. AuthviewModel (используется для обработки входа в систему и регистрации) /> ContentManager выглядит так: < /p>
class ContentManager: ObservableObject {
let contentService: ContentServiceProtocol
private var cancellables = Set()
var posts: [Post] = [] // holds all of the user’s posts
init(contentService: ContentServiceProtocol) {
self. contentService = contentService
}
func fetchAllPosts() {
contentService.getAllPosts()
.receive(on: RunLoop.main)
.sink(receiveCompletion: { data in
print("Received \(data)")
}, receiveValue: {[weak self] data in
// Get the posts and update the view model
self?.posts = data.data?. posts ?? []
}).store(in: &cancellables)
}
func createPost() {
// call endpoint to create a post
}
// dozens of other functions that call the api
}
< /code>
Теперь, в AuthviewModel, я обрабатываю логин, регистрацию, вход и т. Д. Посты пользователя: < /p>
class AuthViewModel: ObservableObject {
let authService: AuthServiceProtocol
private var cancellables = Set()
var posts: [Post] = [] // holds all posts returned on login
init(authService: AuthServiceProtocol) {
self.authService = authService
}
func login() {
// login logic here, left out for this question
authService.login()
.receive(on: RunLoop.main)
.sink(receiveCompletion: { data in
print("Received \(data)")
}, receiveValue: {[weak self] data in
// Get the posts and update the view model
self?.posts = data.data?. posts ?? []
}).store(in: &cancellables)
}
}
< /code>
Моя проблема в том, что я не хочу держать посты внутри AuthviewModel. Я хочу, чтобы ContentManager был единственным источником истины для всех сообщений пользователя.
Я не думаю, что называть ContentManager из AuthviewModel - это правильный способ, так как это сделало бы их слишком связанными. < /p>
Но я не знаю, как еще делать это.
Подробнее здесь: https://stackoverflow.com/questions/794 ... iew-models