Внедрение Worker в архитектуру Clean Swift - PullRequest
0 голосов
/ 31 мая 2019

Я разрабатываю новый проект с нуля, и есть некоторые понятия об этой архитектуре, которые я хотел бы реализовать наилучшим образом.

Во многих ссылках в Интернете я вижу несколько примеров, связанных с архитектурой Clean Swift. В этой архитектуре вы можете обнаружить, что Interactor имеет зависимость Worker classes

   protocol InteractorLogic {
     // Functions
   }

   class Interactor: InteractorLogic {
     var presenter: PresenterLogic?
     var worker: AWorker? 
   }

У меня есть сомнения относительно реализации этого Worker, потому что я видел в некоторых примерах, что внутри этого Worker они помещают все "варианты использования", связанные со сценой:

    protocol SceneWorkerLogic {

     func getPosts(success: ((Posts) -> Void), error: ((Error) -> Void)))
     func getUser(success: ((User) -> Void), error: ((Error) -> Void)))

   }

   class SceneWorker {

     func getPosts(success: ((Posts) -> Void), error: ((Error) -> Void))) {

     }

     func getUser(success: ((User) -> Void), error: ((Error) -> Void))) {

     }
   }

и в других примерах они делят функциональность на разные Workers, такие как UserWorker и PostWorker, где реализованы функции CRUD, связанные с Users и Posts:

   protocol PostWorkerLogic {

     func getPosts(success: ((Posts) -> Void), error: ((Error) -> Void)))

   }

   class PostWorker {

     func getPosts(success: ((Posts) -> Void), error: ((Error) -> Void))) {

     }


   }

Я считаю, что второй подход лучше с точки зрения Clean Code, но я понял, что он может быть еще чище, если мы используем файл для одной операции CRUD, такой как getUser или getPosts.

Как я могу улучшить это?

1 Ответ

0 голосов
/ 31 мая 2019

Есть много способов сделать!То, что было показано в книге «Быстрая смена», не мое любимое ...

Я предпочитаю использовать рабочих с инъекциями зависимостей для использования в качестве шаблона фасада для получения данных!Для этого у вас будет рабочий сцены и конкретные рабочие.

Пример. У вас есть сцена, в которой представлен список фильмов.Этот список может быть получен из сети или coredata, поэтому у вас будет работник, который получит тот тип источника данных, который вы будете использовать в его методе init, и реализует протокол с методом getMovies, и это будет работник сцены!Тогда у вас будет другой работник, который получит это из сети, и еще один для coredata, оба они должны реализовать этот протокол с getMovies!

Я думаю, что будет лучше, если вы получите пример приложения, которое я построил изиспользуйте эту архитектуру, чтобы лучше понять ее!Я действительно думаю, что этот способ намного лучше, чем тот, который он использует в своем приложении для чистого swift (clean store).

Вот мой пример приложения, использующего clean swift: https://github.com/chavitos/TheMovieDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...