title: Where should I write the logics in didSelectItemAt in UICollectionView with VIPER?
body: <p>I have a UICollectionView with VIPER:</p>
  <pre class="lang-swift prettyprint-override"><code>//MARK: - UICollectionViewDataSource
      func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int {
          return presenter?.getCertsCount(status: getCertStatus()) ?? 0
      }
      
      func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -&gt; UICollectionViewCell {
          if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: &quot;cell&quot;, for: indexPath) as? MyCertificationCell {
              if let certs = presenter?.getCerts(status: getCertStatus()) {
                  cell.cert = certs[indexPath.item]
              }
              
              return cell
          }
          
          return UICollectionViewCell()
      }
  
      func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
          
      }
  </code></pre>
  <p>But where I should write the logic when <strong>didSelectItemAt</strong> like making a network request or pushing a new ViewController. In <strong>Presenter</strong> or <strong>Interactor</strong> or <strong>ViewModel</strong> ?</p>