Você está na página 1de 12

Diagrams

DIAGRAMS

Dependência Modular. FeedViewController Herda de UIViewController.

FeedViewController depende de UIViewController e UIKit.


DIAGRAMS

Neste caso, a FeedViewController tem uma dependência de uma closure.


DIAGRAMS

Closure com typelias, porém continua sendo uma dependência. É uma closure porém é uma interface (signature).

Seta fechada significa dependência concreta. Dependencia como reference. Strong reference.
Closure em Swift são reference type.
DIAGRAMS

Substituindo a Closure por um protocolo. Como é um protocolo nós precisamos invocar a função. E o diagrama
permanece o mesmo.
Um protocolo com um método pode sempre ser substituído por uma closure.
DIAGRAMS

Implementando o protocolo FeedLoader. Classe RemoteFeedLoader, que pode estar em outro módulo (cor diferente).

Setar tracejada significa que a classe RemoteFeedLoader conforma com o protoloco/interface FeedLoader.
DIAGRAMS

Implementação diferente do protocolo FeedLoader. Poderia ser um cache, um JSON, ou cenário de não ter internet.
DIAGRAMS

Cenário para verificar a conexão com a internet. Inserindo as classes (dependências) concretas na ViewController.

Não podemos mudar o comportamento. Não está aberto para extensões.


DIAGRAMS

Para termos um cenário com o mesmo comportamento, podemos encapsular a lógica de verificar a conexão.
DIAGRAMS

Composable: Como a ViewController conforma com o protocolo FeadLoader podemos fazer com que essa classe nova
também conforme com esse protocolo para que a ViewController se comunique com ele também.

O RemoteWithLocalFallbackLoader implementa o FeedLoader e depende do RemoteFeedLoader e LocalFeedLoader.

Agora a VC não sabe


nada sobre o Loader
(de onde os dados
vem).

Fica mais testar pois


tudo esta isolado.
DIAGRAMS

Simplificando a função loadFeed. Não quebramos nada em outros locais.


DIAGRAMS
Criando as classes ViewController. O código não reflete a complexidade do diagrama.

Eu posso setar o loader depois de criar classe VC, para cenários onde eu precise usar Storyboards ou customizações,
custom segues, nibs.

Você também pode gostar