[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1t5gpsrsidbeb":3,"$fp4zn8k1m49v6":155},{"data":4},[5],{"id":6,"slug":7,"locale":8,"type":9,"title":10,"subtitle":11,"summary":12,"body":13,"primary_topic":14,"knowledge_status":15,"practical_validation":16,"workflow_status":17,"author_id":18,"published_at":19,"updated_at":19,"review_due_at":20,"canonical_url":21,"seo_title":10,"seo_description":12,"hero_asset_id":20,"reading_time":22,"version":23,"technology_versions":24,"review_frequency_days":25,"parent_content_id":26,"sort_in_parent":27,"hub_entry_status":28,"content_blocks":29,"hero_alt_text":21,"hero_caption":21,"hero_credit":21,"publication_scope":145,"access_level":146,"approved_at":147,"approved_by":148,"review_note":21,"home_enabled":149,"home_slot":150,"home_variant":151,"home_priority":152,"home_eyebrow":20,"home_valid_from":20,"home_valid_to":20,"home_image_asset_id":20,"promotion_kind":153,"sponsor_name":20,"sponsor_url":20,"sponsor_disclosure":154},"aeca65ec-7105-4c79-8e06-86c086f9bb5f","modernizzazione-legacy-sanitario-adapter-facade","it","CAPSULE","Adapter e Facade: compatibilità e semplificazione non sono la stessa cosa","Due pattern spesso confusi, entrambi utili quando si mette ordine attorno a un legacy complesso.","Adapter e Facade riducono accoppiamenti diversi: il primo rende compatibili contratti, la seconda offre un'interfaccia più semplice a un sottosistema complesso.","Adapter: cambiare la forma, non l'intento\nL'Adapter Pattern converte l'interfaccia di un componente in quella attesa dal chiamante. È particolarmente utile quando il dominio deve restare stabile ma il provider può cambiare. Una ImagingViewerPort può avere VueMotionAdapter, DICOMwebAdapter e LegacyViewerAdapter.\nFacade: ridurre la superficie\nLa Facade espone un'interfaccia più semplice davanti a un sottosistema complesso. Un legacy può richiedere cinque chiamate, tre codici tecnici e una sequenza rigida; una LegacyClinicalFacade può offrire un'unica operazione getClinicalSummary. La complessità resta dietro la facciata invece di propagarsi ai nuovi consumer.\nDifferenza essenziale\nAdapter risolve incompatibilità di interfaccia o protocollo.\n\nFacade riduce la complessità percepita e la superficie pubblica.\n\nAnti-Corruption Layer risolve incompatibilità semantica tra modelli di dominio.\n\nUna soluzione reale può avere Facade → ACL → Adapter, ciascuno con una responsabilità diversa.\n\nEsempio di composizione\nIl nuovo Clinical Record invoca LegacyClinicalPort. Una Facade raggruppa le operazioni necessarie; un ACL traduce episodi, stati e codici; un FirebirdAdapter o RestAdapter esegue concretamente la comunicazione. Il chiamante vede un contratto di dominio piccolo e stabile.\nIl rischio della Facade eterna\nUna Facade può diventare un comodo contenitore in cui accumulare nuove regole. Se ospita business logic del nuovo dominio, crea un secondo legacy. Durante una migrazione deve essere trattata come boundary temporaneo o come API di composizione con responsabilità strettamente definite.\nCome scegliere\nProtocollo diverso ma stessa semantica → Adapter.\n\nTroppe API legacy da semplificare → Facade.\n\nConcetti legacy diversi dal nuovo dominio → ACL.\n\nSostituzione incrementale dell'intero sottosistema → aggiungere Strangler Fig.\n\nNomi simili non significano responsabilità sovrapponibili: esplicitare la differenza evita boundary che diventano contenitori di tutto.","58ba728e-da9d-409d-a6c7-31325e3773a8","REVIEWED","NOT_PERFORMED","PUBLISHED","fbbfd4b6-f4c7-4740-94a6-f81eb8fbb1b2","2026-08-25T18:12:42.541Z",null,"",7,4,{},365,"776fc737-dda9-4c82-bd56-b6ba0b7148d6",6,"AVAILABLE",[30,141],{"id":31,"type":32,"version":33,"doc":34},"c334b43c-66fd-5387-a9be-8fc67d13a2b9","rich_text",1,{"type":35,"content":36},"doc",[37,45,50,55,59,64,92,97,101,106,110,115],{"type":38,"attrs":39,"content":41},"heading",{"level":40},2,[42],{"type":43,"text":44},"text","Adapter: cambiare la forma, non l'intento",{"type":46,"content":47},"paragraph",[48],{"type":43,"text":49},"L'Adapter Pattern converte l'interfaccia di un componente in quella attesa dal chiamante. È particolarmente utile quando il dominio deve restare stabile ma il provider può cambiare. Una ImagingViewerPort può avere VueMotionAdapter, DICOMwebAdapter e LegacyViewerAdapter.",{"type":38,"attrs":51,"content":52},{"level":40},[53],{"type":43,"text":54},"Facade: ridurre la superficie",{"type":46,"content":56},[57],{"type":43,"text":58},"La Facade espone un'interfaccia più semplice davanti a un sottosistema complesso. Un legacy può richiedere cinque chiamate, tre codici tecnici e una sequenza rigida; una LegacyClinicalFacade può offrire un'unica operazione getClinicalSummary. La complessità resta dietro la facciata invece di propagarsi ai nuovi consumer.",{"type":38,"attrs":60,"content":61},{"level":40},[62],{"type":43,"text":63},"Differenza essenziale",{"type":65,"content":66},"bulletList",[67,74,80,86],{"type":68,"content":69},"listItem",[70],{"type":46,"content":71},[72],{"type":43,"text":73},"Adapter risolve incompatibilità di interfaccia o protocollo.",{"type":68,"content":75},[76],{"type":46,"content":77},[78],{"type":43,"text":79},"Facade riduce la complessità percepita e la superficie pubblica.",{"type":68,"content":81},[82],{"type":46,"content":83},[84],{"type":43,"text":85},"Anti-Corruption Layer risolve incompatibilità semantica tra modelli di dominio.",{"type":68,"content":87},[88],{"type":46,"content":89},[90],{"type":43,"text":91},"Una soluzione reale può avere Facade → ACL → Adapter, ciascuno con una responsabilità diversa.",{"type":38,"attrs":93,"content":94},{"level":40},[95],{"type":43,"text":96},"Esempio di composizione",{"type":46,"content":98},[99],{"type":43,"text":100},"Il nuovo Clinical Record invoca LegacyClinicalPort. Una Facade raggruppa le operazioni necessarie; un ACL traduce episodi, stati e codici; un FirebirdAdapter o RestAdapter esegue concretamente la comunicazione. Il chiamante vede un contratto di dominio piccolo e stabile.",{"type":38,"attrs":102,"content":103},{"level":40},[104],{"type":43,"text":105},"Il rischio della Facade eterna",{"type":46,"content":107},[108],{"type":43,"text":109},"Una Facade può diventare un comodo contenitore in cui accumulare nuove regole. Se ospita business logic del nuovo dominio, crea un secondo legacy. Durante una migrazione deve essere trattata come boundary temporaneo o come API di composizione con responsabilità strettamente definite.",{"type":38,"attrs":111,"content":112},{"level":40},[113],{"type":43,"text":114},"Come scegliere",{"type":65,"content":116},[117,123,129,135],{"type":68,"content":118},[119],{"type":46,"content":120},[121],{"type":43,"text":122},"Protocollo diverso ma stessa semantica → Adapter.",{"type":68,"content":124},[125],{"type":46,"content":126},[127],{"type":43,"text":128},"Troppe API legacy da semplificare → Facade.",{"type":68,"content":130},[131],{"type":46,"content":132},[133],{"type":43,"text":134},"Concetti legacy diversi dal nuovo dominio → ACL.",{"type":68,"content":136},[137],{"type":46,"content":138},[139],{"type":43,"text":140},"Sostituzione incrementale dell'intero sottosistema → aggiungere Strangler Fig.",{"id":142,"type":143,"version":33,"text":144},"f0d8568b-ecae-55bc-bcbb-380c08e0c6e7","callout","Nomi simili non significano responsabilità sovrapponibili: esplicitare la differenza evita boundary che diventano contenitori di tutto.","PORTAL","ANONYMOUS","2026-08-25T18:12:40.927Z","794a9185-136c-4415-ab23-cd144eb5870e",false,"LATEST","AUTO",0,"EDITORIAL","Sponsorizzato",{"sources":156,"secondaryTopics":157,"tags":158,"primaryTopic":159,"technologies":163},[],[],[],[160],{"id":14,"name":161,"slug":162},"Software Architecture","software-architecture",[]]