{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,10]],"date-time":"2026-05-10T10:17:16Z","timestamp":1778408236154,"version":"3.51.4"},"publisher-location":"Cham","reference-count":23,"publisher":"Springer Nature Switzerland","isbn-type":[{"value":"9783031945434","type":"print"},{"value":"9783031945441","type":"electronic"}],"license":[{"start":{"date-parts":[[2025,1,1]],"date-time":"2025-01-01T00:00:00Z","timestamp":1735689600000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2025,5,29]],"date-time":"2025-05-29T00:00:00Z","timestamp":1748476800000},"content-version":"vor","delay-in-days":148,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2025]]},"abstract":"<jats:title>Abstract<\/jats:title>\n          <jats:p>Agility embraces changes in the functional and non-functional requirements. When the latter happens, the architecture needs to evolve, putting architectural refactoring in evidence. Microservices is an architectural style that enables more agility in a system\u2019s architecture, as it favors the evolution of the system by adding new operations. But it also has its liabilities: the number of services can explode, with similar ones being created. Ultimately, that harms the system\u2019s evolution and maintenance. This work addresses these challenges by proposing a catalog of architecture refactorings to promote reusability in Microservices. These refactorings target patterns that embrace data heterogeneity in the APIs and employ metadata to enhance messages and guide processing. We evaluated the catalog with case studies of three real-world applications and conducted change impact analysis in two scenarios: adding a new data provider, and adding a new processing algorithm. The results showed that embracing heterogeneous data in the API enables a more seamless addition of new data providers, and using metadata can strongly decouple the processing algorithms from the data they use. Furthermore, the results point to other improvements in observability, scalability, and infrastructure.<\/jats:p>","DOI":"10.1007\/978-3-031-94544-1_9","type":"book-chapter","created":{"date-parts":[[2025,5,28]],"date-time":"2025-05-28T12:14:13Z","timestamp":1748434453000},"page":"129-144","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":2,"title":["Architecture Refactoring Towards Service Reusability in\u00a0the\u00a0Context of\u00a0Microservices"],"prefix":"10.1007","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-2877-9509","authenticated-orcid":false,"given":"Jo\u00e3o","family":"Daniel","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0009-0000-2486-4004","authenticated-orcid":false,"given":"Gabriel","family":"Mota","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-8424-419X","authenticated-orcid":false,"given":"Xiaofeng","family":"Wang","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-5555-3487","authenticated-orcid":false,"given":"Eduardo","family":"Guerra","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2025,5,29]]},"reference":[{"key":"9_CR1","doi-asserted-by":"publisher","unstructured":"Assun\u00e7\u00e3o, W.K., Kr\u00fcger, J., Mosser, S., Selaoui, S.: How do microservices evolve? An empirical analysis of changes in open-source microservice repositories. J. Syst. Softw. 204 (2023). https:\/\/doi.org\/10.1016\/j.jss.2023.111788","DOI":"10.1016\/j.jss.2023.111788"},{"key":"9_CR2","doi-asserted-by":"publisher","unstructured":"Baltes, S., Ralph, P.: Sampling in software engineering research: a critical review and guidelines. Empirical Softw. Eng. 27(4), 94 (2022). https:\/\/doi.org\/10.1007\/s10664-021-10072-8","DOI":"10.1007\/s10664-021-10072-8"},{"key":"9_CR3","doi-asserted-by":"publisher","unstructured":"Bengtsson, P.O., Lassing, N., Bosch, J., Van\u00a0Vliet, H.: Architecture-level modifiability analysis (ALMA). J. Syst. Softw. 69(1-2), 129\u2013147 (2004). https:\/\/doi.org\/10.1016\/S0164-1212(03)00080-3","DOI":"10.1016\/S0164-1212(03)00080-3"},{"key":"9_CR4","unstructured":"Brandolini, A.: Introducing EventStorming An act of Deliberate Collective Learning. Leanpub (2018)"},{"key":"9_CR5","unstructured":"Daigneau, R.: Service Design Patterns. Addison-Wesley (2012)"},{"key":"9_CR6","doi-asserted-by":"crossref","unstructured":"Erder, M., Pureur, P.: Continuous Architecture - Sustainable Architecture in an Agile and Cloud-Centric World (2016)","DOI":"10.1016\/B978-0-12-803284-8.00007-5"},{"key":"9_CR7","unstructured":"Evans, E.: Domain-Driven Design Tackling Complexity in the Heart of Software. Tech. rep. (2003). www.domainlanguage.com"},{"key":"9_CR8","unstructured":"Fowler, M.: Refactoring Improving the Design of Existing Code. Addison-Wesley Professional (1999)"},{"key":"9_CR9","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4302-0096-3_10","author":"E Gamma","year":"1995","unstructured":"Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns, elements of reusable object-oriented software. Addison-Wesley (1995). https:\/\/doi.org\/10.1007\/978-1-4302-0096-3_10","journal-title":"Addison-Wesley"},{"key":"9_CR10","doi-asserted-by":"publisher","unstructured":"Lehnert, S.: A taxonomy for software change impact analysis. In: Proceedings of the 12th International Workshop on Principles of Software Evolution and the 7th Annual ERCIM Workshop on Software Evolution, pp. 41\u201350. ACM, New York, NY, USA (2011). https:\/\/doi.org\/10.1145\/2024445.2024454","DOI":"10.1145\/2024445.2024454"},{"key":"9_CR11","doi-asserted-by":"publisher","unstructured":"Lercher, A., Glock, J., Macho, C., Pinzger, M.: Microservice API evolution in practice: a study on strategies and challenges. J. Syst. Softw. 215 (2024). https:\/\/doi.org\/10.1016\/j.jss.2024.112110","DOI":"10.1016\/j.jss.2024.112110"},{"key":"9_CR12","doi-asserted-by":"publisher","unstructured":"Lino\u00a0Daniel, J.F., Wang, X., Martins\u00a0Guerra, E.: Pattern language for leveraging metadata to reusability in APIs. In: Proceeding of the 29th European Conference on Pattern Languages of Programs (2024). https:\/\/doi.org\/10.1145\/3698322.3698344","DOI":"10.1145\/3698322.3698344"},{"key":"9_CR13","unstructured":"Martin, R.C.: The Clean Architecture (2012). http:\/\/blog.8thlight.com\/uncle-bob\/2012\/08\/13\/the-clean-architecture.html--"},{"key":"9_CR14","unstructured":"Richards, M.: Software Architecture Patterns - Understanding Common Architecture Patterns and When to Use them (2015)"},{"key":"9_CR15","doi-asserted-by":"publisher","unstructured":"Runeson, P., H\u00f6st, M.: Guidelines for conducting and reporting case study research in software engineering. Empirical Softw. Eng. 14(2), 131\u2013164 (2009). https:\/\/doi.org\/10.1007\/s10664-008-9102-8","DOI":"10.1007\/s10664-008-9102-8"},{"key":"9_CR16","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2024.3520477","author":"K Silva","year":"2024","unstructured":"Silva, K., Melegati, J., Silveira, F., Wang, X., Ferreira, M., Guerra, E.: ArchHypo: managing software architecture uncertainty using hypotheses engineering. IEEE Trans. Softw. Eng. (2024). https:\/\/doi.org\/10.1109\/TSE.2024.3520477","journal-title":"IEEE Trans. Softw. Eng."},{"key":"9_CR17","doi-asserted-by":"publisher","unstructured":"Silva, K., Melegati, J., Wang, X., Ferreira, M., Guerra, E.: Using hypotheses to manage technical uncertainty and architecture evolution in a software start-up. IEEE Softw. 41(4), 7\u201313 (2024). https:\/\/doi.org\/10.1109\/MS.2024.3383628","DOI":"10.1109\/MS.2024.3383628"},{"key":"9_CR18","doi-asserted-by":"publisher","unstructured":"Stocker, M., Zimmermann, O.: API refactoring to patterns: catalog, template and tools for remote interface evolution. In: ACM International Conference Proceeding Series Association for Computing Machinery (2023). https:\/\/doi.org\/10.1145\/3628034.3628073","DOI":"10.1145\/3628034.3628073"},{"key":"9_CR19","doi-asserted-by":"publisher","unstructured":"Stocker, M., Zimmermann, O., Kapferer, S.: Pattern-oriented API refactoring: addressing design smells and stakeholder concerns. In: Proceedings of the 29th European Conference on Pattern Languages of Programs, People, and Practices, pp. 1\u201324. ACM, New York, NY, USA (2024).https:\/\/doi.org\/10.1145\/3698322.3698334","DOI":"10.1145\/3698322.3698334"},{"key":"9_CR20","doi-asserted-by":"publisher","unstructured":"Viviani, L., Guerra, E., Melegati, J., Wang, X.: An empirical study about the instability and uncertainty of non-functional requirements. In: Lecture Notes in Business Information Processing. vol. 475 LNBIP, pp. 77\u201393. Springer Science and Business Media Deutschland GmbH (2023). https:\/\/doi.org\/10.1007\/978-3-031-33976-9_6","DOI":"10.1007\/978-3-031-33976-9_6"},{"key":"9_CR21","doi-asserted-by":"publisher","unstructured":"Wohlin, C., Rainer, A.: Is it a case study?\u2014A critical analysis and guidance. J. Syst. Softw. 192, 111395 (2022). https:\/\/doi.org\/10.1016\/j.jss.2022.111395","DOI":"10.1016\/j.jss.2022.111395"},{"key":"9_CR22","unstructured":"Yin, R.K.: Case Study Research, design and methods. SAGE, 4th edn. (2009)"},{"key":"9_CR23","doi-asserted-by":"publisher","unstructured":"Zhao, J., Yang, H., Xiang, L., Xu, B.: Change impact analysis to support architectural evolution. J. Softw. Maintenance Evol. Res. Pract. 14(5), 317\u2013333 (2002). https:\/\/doi.org\/10.1002\/smr.258","DOI":"10.1002\/smr.258"}],"container-title":["Lecture Notes in Business Information Processing","Agile Processes in Software Engineering and Extreme Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-031-94544-1_9","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,2]],"date-time":"2025-06-02T22:03:14Z","timestamp":1748901794000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/978-3-031-94544-1_9"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025]]},"ISBN":["9783031945434","9783031945441"],"references-count":23,"URL":"https:\/\/doi.org\/10.1007\/978-3-031-94544-1_9","relation":{},"ISSN":["1865-1348","1865-1356"],"issn-type":[{"value":"1865-1348","type":"print"},{"value":"1865-1356","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025]]},"assertion":[{"value":"29 May 2025","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"XP","order":1,"name":"conference_acronym","label":"Conference Acronym","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"International Conference on Agile Software Development","order":2,"name":"conference_name","label":"Conference Name","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Brugg-Windisch","order":3,"name":"conference_city","label":"Conference City","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Switzerland","order":4,"name":"conference_country","label":"Conference Country","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2025","order":5,"name":"conference_year","label":"Conference Year","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2 June 2025","order":7,"name":"conference_start_date","label":"Conference Start Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"5 June 2025","order":8,"name":"conference_end_date","label":"Conference End Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"26","order":9,"name":"conference_number","label":"Conference Number","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"xpu2025","order":10,"name":"conference_id","label":"Conference ID","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"https:\/\/www.agilealliance.org\/event\/xp-2025\/","order":11,"name":"conference_url","label":"Conference URL","group":{"name":"ConferenceInfo","label":"Conference Information"}}]}}