Na Arquitetura Limpa definida por Uncle Bob, existe a preocupação com dependências entre classes e entre módulos. Além de limpo, o código deve ser testável e modular, facilitando mudanças e colaboração.
Figura 20: Camadas - Clean Swift
No diagrama circular se torna claro que os Data Models não dependem de nenhum outro módulo. Do mesmo modo, Workers dependem dos Data Models e nada mais. O mesmo ocorre para a camada de serviços. O real problema surge nas camadas mais externas. O fato de que
externa que dependem de mais de uma camada mais interna. Deste modo, modificar um dos anéis internos pode propagar problemas para camadas mais externas.
Figura 21: Camadas da Arquitetura Limpa
Diferente do é pregado pela arquitetura limpa, na implementação executada temos frameworks e drivers nas camadas centrais. Isso não representa necessariamente um problema, porém representa alto acoplamento.
5
CONCLUSÕES E TRABALHOS FUTUROS
Na busca por sistemas de softwares que possuem modularidade, testabilidade, reuso e
facilidade de manutenção o arquiteto de software analisa diferentes modelos e padrões levando em
consideração cada aspecto do projeto em questão. Um ponto crucial nesta análise está na percepção
de que projetos que possuem diferentes requisitos, ainda que desenvolvidos a partir de um mesmo
framework , podem apresentar comportamentos divergentes quando implementados sob diferentes
modelos arquiteturais. A escolha de uma boa arquitetura passa a depender de algum modo da
experiência prévia do arquiteto, porém este deve ter sempre em mente que cada sistema é de certa
forma único e deve ser cuidadosamente construído. A análise executada neste trabalho tornou possível observar sob uma nova perspectiva como
as responsabilidades passaram a ser delegadas entre os componentes particulares de cada arquitetura
utilizada. A partir disso, é possível fazer observações a respeito de como o código se comporta a
partir dos pontos de vista sintático e estrutural. Ainda que pouco conclusivas, tais observações
dizem muito sobre como projetos iOS de maior porte tendem a se comportar sob tais circunstâncias. A partir das métricas de código observadas, nota-se que na abordagem Clean Swift o projeto
tende a possuir muitos componentes em comparação à abordagem Cocoa MVC, principalmente,
devido à introdução dos componente utilizados no ciclo VIP e componentes extras que se
encarregam de roteamento e passagem de dados. O uso dos templates Clean Swift , apesar de
melhorarem a testabilidade , colocam o projeto na contramão do que a arquitetura limpa prega a
respeito de modularização e acoplamento. É bom ter em vista que, neste caso, o alto acoplamento
não significa necessariamente algo ruim. Ainda que isso aconteça, a separação de responsabilidades
entre componentes é melhorada a custo de mais complexidade no código, o que pode aumentar a
curva de aprendizado para desenvolvedores iniciantes e até mesmo para os mais experientes, mas
sem conhecimento prévio deste modelo arquitetural. Outro ponto que foi observado é que os templates de Clean Swift invariavelmente tornam o
código mais acoplado ao framework e aos serviços, pois camadas mais externas se comunicam com
camadas internas para respeitar a ordem dos componentes do ciclo VIP. A comunicação entre estes
assim, Clean Swift exibe características de uma boa arquitetura para projetos que necessitam de alta
testabilidade. Ainda que mantenha forte acoplamento violando princípios relacionados à coesão e
responsabilidade de classes, todos os componentes introduzidos por este modelo podem ser
independentemente testáveis. Dessa forma, a principal constatação deste trabalho é que padrões
arquiteturais recentes e alternativos aos modelos de variação MV*, como por exemplo o Clean
Swift, não necessariamente trazem benefícios, pelo contrário, podem ter impactos negativos quando
se analisa os aspectos de qualidade de arquitetura de software.
5.1
Trabalhos Futuros
Durante a pesquisa, oportunidades de expansão foram vislumbradas em diversos caminhos.Tendo em vista que a qualidade dos resultados obtidos neste trabalho é afetada pelo fato de somente
um projeto ter sido analisado, a análise executada sob projetos de grande porte pode apresentar
resultados mais significativos no que diz respeito às métricas coletadas. No que diz respeito à
modularização e componentização, projetos maiores que utilizam MVC tendem a apresentar
ViewControllers ainda maiores e com mais responsabilidades, assim como novas regras e interações
mais complexas, cada vez mais dependentes do framework. Diferentes modelos arquiteturais presentes na comunidade como os da classe MV* também
podem ser comparados entre si, não só em quesitos arquiteturais, mas também em aspectos de
desempenho que analisem, por exemplo, qual o impacto dos sinais e bindings utilizados no padrão
MVVM que notificam Views ao observarem alterações em ViewModels . Observar como Clean Swift
se compara em relação ao modelo VIPER no quesito estrutural também pode oferecer discussões
interessantes a respeito de quais componentes são opcionais e quais devem receber maior importância no desenvolvimento iOS.
REFERÊNCIAS
[1] REF Krasner GE, Pope ST. A cookbook for using the model - view controller user interface paradigm in Smalltalk - 80. 1550 Plymouth Street Mountain View; 1998.
[2] ORLOV, Bohdan. iOS Architecture Patterns - iOS App Development. US: Medium, 2018. Disponível em: https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52. Acesso em: 23 jun. 2018.
[3] APPLE Developer Documentation. 2018. Disponível em:
https://developer.apple.com/documentation/. Acesso em: 25 jul. 2018.
[4] Managing Your App Lifecycle. 2018. Disponível em:
https://developer.apple.com/documentation/uikit/core_app/managing_your_app_s_life_cycle.. Acesso em: 22 ago. 2018.
[5] EIDHOF, Chris. Lighter View Controllers. 2013. Disponível em:
https://www.objc.io/issues/1-view-controllers/lighter-view-controllers/. Acesso em: 20 ago. 2018.
[6] Understand the complexity and maintainability of your code using Code Metrics in Visual Studio. 2018. Disponível em:
https://dailydotnettips.com/understand-the-complexity-and-maintainability-of-your-coding-using-co de-metrics-in-visual-studio/. Acesso em: 01 set. 2018.
[7] Microsoft: Medições de software. 2018. Disponível em:
https://docs.microsoft.com/pt-br/visualstudio/code-quality/code-metrics-values?view=vs-2017. Acesso em: 30 set. 2018.
[8] ATANASOV, Dejan. Introducing Clean Swift Architecture (VIP). 2017. Disponível em:
[9] Model-View-Controller. US: Apple Inc., 2018. Disponível em:
https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCo re/MVC.html. Acesso em: 29 jun. 2018.
[10] Introduction to Key-Value Observing Programming Guide. US: Apple Inc., 2018. Disponível em:
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/ KeyValueObserving.html. Acesso em: 21 jun. 2018.
[11] The MVVM Pattern. US: Microsoft, 2012. Disponível em:
https://docs.microsoft.com/en-us/previous-versions/msp-n-p/hh848246(v=pandp.10). Acesso em: 29 jun. 2018.
[12] ANICHE, Maurício. A tool to support researchers on mining software repositories studies. 2018. Disponível em: http s://github.com/mauricioaniche/repodriller .
[13] HABCHI, Sarra. “ Code Smells in iOS Apps: How Do They Compare to Android?” 2017. Disponível em: http s://ieeexplore.ieee.org/document/7972725/ . Acesso em: 30 ago. 2018.
[14] MARTIN, Robert. Why can't anyone get Web architecture right? Skills Matter , 2011.
Disponível em: http s://skillsmatter.com/skillscasts/2437-uncle-bob-web-architecture . Acesso em: 02 set. 2018.
[15] MARTIN, Robert. Why can't anyone get Web architecture right? Skills Matter , 2011. Disponível em: http s://skillsmatter.com/meetups/1111-uncle-bob-architecture . Acesso em: 02 set. 2018
[16] Core Data: Managed object graphs and object lifecycle, including persistence. Disponível em: http s://developer.apple.com/documentation/coredata . Acesso em: 09 set. 2018
[17] MARTIN, Robert. The Clean Architecture. The Clean Code Blog , 2012. Disponível em: http s://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html . Acesso em: 12 set. 2018
[18] R. L. Glass, “Frequently forgotten fundamental facts about software engineering,” IEEE software, vol. 18, no. 3, pp. 112–111, 2001.
[19] ANICHE, Maurício. Orientação a Objetos e SOLID para Ninjas: Projetando classes
flexíveis. 1. ed. São Paulo: Casa do Código, 2015.
[20] APOSTOLAKIS, Mike; ZULLO, Caio. Clean iOS Architecture pt.6: VIPER – Design Pattern or Architecture? Essential Developer, 2018. Disponível em:
http s://www.essentialdeveloper.com/articles/clean-ios-architecture-pt-6-viper-design-pattern-or-arc hitecture . Acesso em: 02 nov. 2018
[21] Model-View-Controller. 2018. Disponível em:
http s://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCo re/MVC.html . Acesso em: 03 out. 2018.
[22] RAYMOND. Clean Swift templates now update for Xcode 8.3.3 & 9.0 and Swift 3 & 4. 2018. Disponível em: http s://clean-swift.com/swift-3-compatible/ . Acesso em: 05 out. 2018
[23] EIDHOF, Chris. GALLAGHER, Matt. KUGLER, Florian. App Architecture iOS Application
Design Patterns in Swift. 2018. Disponível em: http s://www.objc.io/books/app-architecture/ .
Acesso em: 09 out. 2018.
[24] GILBERT, Jeff; STOLL, Conrad. Architecting ios apps with viper. 2014. Disponível em: https://www.objc.io/issues/13-architecture/viper/. Acesso em: 08 set. 2018..