[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fk0idqx0ia775":3,"$fafmh8i99xjeo":164},{"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":154,"access_level":155,"approved_at":156,"approved_by":157,"review_note":21,"home_enabled":158,"home_slot":159,"home_variant":160,"home_priority":161,"home_eyebrow":20,"home_valid_from":20,"home_valid_to":20,"home_image_asset_id":20,"promotion_kind":162,"sponsor_name":20,"sponsor_url":20,"sponsor_disclosure":163},"b03a0217-cd29-4af8-bf11-cc0f9c38033c","modernizzazione-legacy-sanitario-anti-corruption-layer","it","CAPSULE","Anti-Corruption Layer: proteggere il nuovo dominio dal legacy","Tradurre semantica, identificativi e modelli senza importare il debito storico nel nuovo codice.","L'Anti-Corruption Layer isola il modello moderno dai concetti, codici e strutture del legacy, traducendo entrambi i lati attraverso un confine esplicito.","Il problema che risolve\nQuando un nuovo servizio integra un legacy è facile importarne la semantica: nomi di colonne, codici storici, chiavi composte, stati ambigui e regole nate per vincoli tecnici. Se questi concetti entrano nel nuovo dominio, il refactor diventa una copia più moderna del vecchio sistema.\nChe cosa fa l'ACL\nL'Anti-Corruption Layer è un confine di traduzione tra due modelli. Il nuovo dominio parla il proprio linguaggio; l'ACL conosce il linguaggio legacy e lo converte. Può contenere mapper, translator, client, assembler e regole di equivalenza. È intenzionalmente il luogo dove concentrare la conoscenza che vogliamo eliminare in futuro.\nEsempio sanitario\nUn legacy può identificare un ricovero con anno, progressivo e codice struttura. Il nuovo ADT può invece usare un EncounterId stabile. L'ACL riceve l'identificativo di dominio, traduce verso la chiave legacy quando deve interrogare il vecchio sistema e rimappa la risposta in Encounter, Admission, Transfer e Discharge. Il dominio ADT non deve conoscere la composizione della chiave storica.\nACL non è un semplice Adapter\nAdapter: rende compatibili due interfacce o protocolli; per esempio trasforma una porta OrderIntegrationPort in una chiamata HL7\u002FMLLP.\n\nACL: protegge una semantica; per esempio traduce stati, identificativi, regole e significati tra due modelli differenti.\n\nUn ACL può usare uno o più Adapter al suo interno.\n\nRegole di progettazione\nIl dominio moderno non importa classi, DTO o enum del legacy.\n\nI mapper legacy vivono nel modulo ACL, non nel core domain.\n\nLe equivalenze non ovvie sono testate con casi reali e fixture anonimizzate.\n\nLe anomalie di traduzione sono osservabili e non vengono nascoste con fallback silenziosi.\n\nL'ACL ha una strategia di retirement: deve poter sparire quando il legacy viene spento.\n\nErrore frequente\nCreare un DTO chiamato NewPatient ma con gli stessi cinquanta campi e codici del legacy non è un ACL: è una rinomina. La traduzione deve avvenire verso concetti del nuovo dominio, non verso una copia cosmetica della struttura precedente.\nDove posizionarlo\nIn una Hexagonal Architecture l'ACL appartiene normalmente agli adapter esterni. Il domain layer vede una Port, per esempio LegacyEncounterLookup; l'implementazione usa ACL e adapter di protocollo per parlare con il sistema storico.\n\nUn buon ACL è deliberatamente sacrificabile: concentra la dipendenza dal legacy in modo che, al retirement, si possa cancellare un modulo invece di ripulire tutta la piattaforma.","58ba728e-da9d-409d-a6c7-31325e3773a8","REVIEWED","NOT_PERFORMED","PUBLISHED","fbbfd4b6-f4c7-4740-94a6-f81eb8fbb1b2","2026-08-25T18:11:24.225Z",null,"",8,5,{},365,"776fc737-dda9-4c82-bd56-b6ba0b7148d6",4,"AVAILABLE",[30,150],{"id":31,"type":32,"version":33,"doc":34},"8abc5485-129f-55ea-92c7-6223fb59b2ab","rich_text",1,{"type":35,"content":36},"doc",[37,45,50,55,59,64,68,73,95,100,132,137,141,146],{"type":38,"attrs":39,"content":41},"heading",{"level":40},2,[42],{"type":43,"text":44},"text","Il problema che risolve",{"type":46,"content":47},"paragraph",[48],{"type":43,"text":49},"Quando un nuovo servizio integra un legacy è facile importarne la semantica: nomi di colonne, codici storici, chiavi composte, stati ambigui e regole nate per vincoli tecnici. Se questi concetti entrano nel nuovo dominio, il refactor diventa una copia più moderna del vecchio sistema.",{"type":38,"attrs":51,"content":52},{"level":40},[53],{"type":43,"text":54},"Che cosa fa l'ACL",{"type":46,"content":56},[57],{"type":43,"text":58},"L'Anti-Corruption Layer è un confine di traduzione tra due modelli. Il nuovo dominio parla il proprio linguaggio; l'ACL conosce il linguaggio legacy e lo converte. Può contenere mapper, translator, client, assembler e regole di equivalenza. È intenzionalmente il luogo dove concentrare la conoscenza che vogliamo eliminare in futuro.",{"type":38,"attrs":60,"content":61},{"level":40},[62],{"type":43,"text":63},"Esempio sanitario",{"type":46,"content":65},[66],{"type":43,"text":67},"Un legacy può identificare un ricovero con anno, progressivo e codice struttura. Il nuovo ADT può invece usare un EncounterId stabile. L'ACL riceve l'identificativo di dominio, traduce verso la chiave legacy quando deve interrogare il vecchio sistema e rimappa la risposta in Encounter, Admission, Transfer e Discharge. Il dominio ADT non deve conoscere la composizione della chiave storica.",{"type":38,"attrs":69,"content":70},{"level":40},[71],{"type":43,"text":72},"ACL non è un semplice Adapter",{"type":74,"content":75},"bulletList",[76,83,89],{"type":77,"content":78},"listItem",[79],{"type":46,"content":80},[81],{"type":43,"text":82},"Adapter: rende compatibili due interfacce o protocolli; per esempio trasforma una porta OrderIntegrationPort in una chiamata HL7\u002FMLLP.",{"type":77,"content":84},[85],{"type":46,"content":86},[87],{"type":43,"text":88},"ACL: protegge una semantica; per esempio traduce stati, identificativi, regole e significati tra due modelli differenti.",{"type":77,"content":90},[91],{"type":46,"content":92},[93],{"type":43,"text":94},"Un ACL può usare uno o più Adapter al suo interno.",{"type":38,"attrs":96,"content":97},{"level":40},[98],{"type":43,"text":99},"Regole di progettazione",{"type":74,"content":101},[102,108,114,120,126],{"type":77,"content":103},[104],{"type":46,"content":105},[106],{"type":43,"text":107},"Il dominio moderno non importa classi, DTO o enum del legacy.",{"type":77,"content":109},[110],{"type":46,"content":111},[112],{"type":43,"text":113},"I mapper legacy vivono nel modulo ACL, non nel core domain.",{"type":77,"content":115},[116],{"type":46,"content":117},[118],{"type":43,"text":119},"Le equivalenze non ovvie sono testate con casi reali e fixture anonimizzate.",{"type":77,"content":121},[122],{"type":46,"content":123},[124],{"type":43,"text":125},"Le anomalie di traduzione sono osservabili e non vengono nascoste con fallback silenziosi.",{"type":77,"content":127},[128],{"type":46,"content":129},[130],{"type":43,"text":131},"L'ACL ha una strategia di retirement: deve poter sparire quando il legacy viene spento.",{"type":38,"attrs":133,"content":134},{"level":40},[135],{"type":43,"text":136},"Errore frequente",{"type":46,"content":138},[139],{"type":43,"text":140},"Creare un DTO chiamato NewPatient ma con gli stessi cinquanta campi e codici del legacy non è un ACL: è una rinomina. La traduzione deve avvenire verso concetti del nuovo dominio, non verso una copia cosmetica della struttura precedente.",{"type":38,"attrs":142,"content":143},{"level":40},[144],{"type":43,"text":145},"Dove posizionarlo",{"type":46,"content":147},[148],{"type":43,"text":149},"In una Hexagonal Architecture l'ACL appartiene normalmente agli adapter esterni. Il domain layer vede una Port, per esempio LegacyEncounterLookup; l'implementazione usa ACL e adapter di protocollo per parlare con il sistema storico.",{"id":151,"type":152,"version":33,"text":153},"67fb5e98-a400-5039-ab60-79a55c18cf2c","callout","Un buon ACL è deliberatamente sacrificabile: concentra la dipendenza dal legacy in modo che, al retirement, si possa cancellare un modulo invece di ripulire tutta la piattaforma.","PORTAL","ANONYMOUS","2026-08-25T18:11:22.076Z","794a9185-136c-4415-ab23-cd144eb5870e",false,"LATEST","AUTO",0,"EDITORIAL","Sponsorizzato",{"sources":165,"secondaryTopics":166,"tags":167,"primaryTopic":168,"technologies":172},[],[],[],[169],{"id":14,"name":170,"slug":171},"Software Architecture","software-architecture",[]]