• Nenhum resultado encontrado

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.. 

 

Documentos relacionados