Где должны быть функции делегата / источника данных UICollectionView / UITableView go в Clean Swift [Чистая архитектура дяди Боба] - PullRequest
0 голосов
/ 30 января 2020

Я недавно переключил свое приложение с MVC на Clean Swift, и у меня возникают проблемы с выбором, в какие классы помещать определенные вещи. Например, должны ли функции delegate / datasource для UICollectionView / UITableView go в Interactor или Presenter? Или, может быть, некоторые функции, такие как didSelectItemAt, должны go в Interactor, потому что они имеют дело с вводом, а другие, такие как cellForItemAt, должны go в Presenter, потому что они имеют дело с представлениями.

Каковы ваши процессы принятия решений, когда вы решаете, куда поместить определенную функциональность в Clean Swift? `

В настоящее время у меня есть ViewController

{
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
    func scrollViewDidScroll(_ scrollView: UIScrollView)

}

следующее в моем Interactor

{
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
}

и следующее в моем Presenter

{
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
}

1 Ответ

2 голосов
/ 31 января 2020

Как правило, встроенные протоколы Apple с префиксом UI должны оставаться в контроллере представления. Если это когда-либо становится слишком сложным, вы можете просто переместить источник данных и делегировать методы расширению. Они редко становятся достаточно сложными, чтобы гарантировать собственный контроллер. Если это так, это означает, что у вас, вероятно, есть бизнес-логика c, которую следует извлечь и перенести в интерактор. Но вы все равно должны оставить эти методы в контроллере представления или его расширении.

...