<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Architecture | The .NET Blog</title><link>https://thedotnetblog.com/it/tags/architecture/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>it</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/it/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>SDD Conference 2026</title><link>https://thedotnetblog.com/it/events/sdd-conference-2026/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://thedotnetblog.com/it/events/sdd-conference-2026/</guid><description>Una conferenza di 5 giorni sullo sviluppo software al Barbican Centre di Londra con 78 sessioni e 14 workshop su architettura, .NET, IA, Azure, DevOps e altro.</description><content:encoded>&lt;p&gt;&lt;strong&gt;SDD 2026&lt;/strong&gt; si svolge dall&amp;rsquo;&lt;strong&gt;11 al 15 maggio 2026&lt;/strong&gt; al &lt;strong&gt;Barbican Centre di Londra&lt;/strong&gt;. La conferenza principale di 3 giorni va da martedì a giovedì, con workshop opzionali di un&amp;rsquo;intera giornata il lunedì e il venerdì.&lt;/p&gt;
&lt;p&gt;Con &lt;strong&gt;78 sessioni&lt;/strong&gt; e &lt;strong&gt;14 workshop&lt;/strong&gt;, è una delle conferenze per sviluppatori più ricche d&amp;rsquo;Europa.&lt;/p&gt;
&lt;h2 id="argomenti"&gt;Argomenti&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pensiero Architetturale&lt;/li&gt;
&lt;li&gt;Codice Funzionale in C# 13&lt;/li&gt;
&lt;li&gt;Design Serverless&lt;/li&gt;
&lt;li&gt;IA Semantica&lt;/li&gt;
&lt;li&gt;Azure Kubernetes Services&lt;/li&gt;
&lt;li&gt;Strategie Lean DevOps&lt;/li&gt;
&lt;li&gt;The Model Context Protocol (MCP)&lt;/li&gt;
&lt;li&gt;IA Agentica in .NET&lt;/li&gt;
&lt;li&gt;Refactoring del Monolite&lt;/li&gt;
&lt;li&gt;Programmare Più Velocemente con gli LLM&lt;/li&gt;
&lt;li&gt;Crittografia in un Mondo Post-Quantistico&lt;/li&gt;
&lt;li&gt;Sviluppo Local First&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="speaker"&gt;Speaker&lt;/h2&gt;
&lt;p&gt;Lineup di classe mondiale che include &lt;strong&gt;Kevlin Henney&lt;/strong&gt;, &lt;strong&gt;Neal Ford&lt;/strong&gt;, &lt;strong&gt;Sander Hoogendoorn&lt;/strong&gt;, &lt;strong&gt;Andrew Clymer&lt;/strong&gt;, &lt;strong&gt;Jacqui Read&lt;/strong&gt;, &lt;strong&gt;Christian Weyer&lt;/strong&gt;, &lt;strong&gt;Jeff Prosise&lt;/strong&gt;, &lt;strong&gt;Jules May&lt;/strong&gt;, &lt;strong&gt;Oliver Sturm&lt;/strong&gt; e &lt;strong&gt;Raju Gandhi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="biglietti-e-informazioni"&gt;Biglietti e informazioni&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/"&gt;Sito dell&amp;rsquo;evento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddvault.s3.amazonaws.com/assets/SDD_2026_schedule.pdf"&gt;PDF dell&amp;rsquo;agenda completa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sddconf.com/register"&gt;Opzioni di registrazione&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il 98% dei partecipanti di SDD 2025 ha valutato l&amp;rsquo;esperienza complessiva come buona, molto buona o eccellente.&lt;/p&gt;</content:encoded></item><item><title>Costruire un'app per conferenze con IA con lo stack componibile di .NET</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/</guid><description>Microsoft ha costruito ConferencePulse — un'app Blazor per conferenze live — combinando Microsoft.Extensions.AI, DataIngestion, VectorData, MCP e Agent Framework. Ecco come si incastrano i pezzi.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/ai-conference-app-dotnet-composable-stack/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;Costruire un&amp;rsquo;app per conferenze con IA con lo stack componibile di .NET&lt;/a&gt; — Microsoft ha costruito ConferencePulse, un&amp;rsquo;app Blazor Server per sessioni di conferenza live, combinando cinque librerie di estensione .NET. È stata utilizzata all&amp;rsquo;MVP Summit.&lt;/p&gt;
&lt;h2 id="cosa-fa-conferencepulse"&gt;Cosa fa ConferencePulse&lt;/h2&gt;
&lt;p&gt;ConferencePulse funziona durante le sessioni live e fornisce: sondaggi generati dall&amp;rsquo;IA dal contenuto della sessione, Q&amp;amp;A del pubblico con una pipeline RAG che attinge da una knowledge base live, insight generati automaticamente e riepiloghi delle sessioni prodotti da più agenti IA concorrenti. Lo stack è .NET 10, Blazor Server, Aspire, suddiviso in cinque progetti: Web, Core, Ingestion, Agents, Mcp e AppHost.&lt;/p&gt;
&lt;h2 id="microsoftextensionsai-unastrazione-per-tutto"&gt;Microsoft.Extensions.AI: un&amp;rsquo;astrazione per tutto&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IChatClient&lt;/code&gt; è l&amp;rsquo;astrazione unificata — si configura una volta e la stessa interfaccia funziona per Azure OpenAI, OpenAI, Anthropic o qualsiasi altro provider. Sei righe per ottenere un client completamente configurato con invocazione di funzioni, tracciamento OpenTelemetry e middleware di logging:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&lt;/span&gt;&lt;span class="p"&gt;(...).&lt;/span&gt;&lt;span class="n"&gt;GetChatClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-4o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseFunctionInvocation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseOpenTelemetry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UseLogging&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lo stesso &lt;code&gt;IChatClient&lt;/code&gt; viene riutilizzato in seguito per il passaggio di arricchimento dell&amp;rsquo;ingestion dei dati — nessun client separato necessario per questo.&lt;/p&gt;
&lt;h2 id="pipeline-dataingestion"&gt;Pipeline DataIngestion&lt;/h2&gt;
&lt;p&gt;Il contenuto della sessione scorre attraverso una pipeline: &lt;code&gt;MarkdownReader&lt;/code&gt; → &lt;code&gt;HeaderChunker&lt;/code&gt; (500 token, 50 token di sovrapposizione) → &lt;code&gt;SummaryEnricher&lt;/code&gt; + &lt;code&gt;KeywordEnricher&lt;/code&gt; → &lt;code&gt;VectorStoreWriter&lt;/code&gt; (Qdrant). Gli arricchitori usano lo stesso &lt;code&gt;IChatClient&lt;/code&gt; per generare riepiloghi ed estrarre parole chiave prima dell&amp;rsquo;indicizzazione. Le domande del pubblico, le coppie Q&amp;amp;A e i risultati dei sondaggi vengono inseriti in tempo reale man mano che la sessione avanza — la knowledge base cresce durante il talk.&lt;/p&gt;
&lt;h2 id="vectordata-ricerca-indipendente-dal-provider"&gt;VectorData: ricerca indipendente dal provider&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;VectorStoreCollection.SearchAsync()&lt;/code&gt; funziona allo stesso modo sia che il backing store sia Qdrant o Azure AI Search. La ricerca ibrida (vettore + testo completo) è supportata. La pipeline RAG per il Q&amp;amp;A del pubblico interroga questa collezione e riceve i chunk rilevanti da passare come contesto al client di chat.&lt;/p&gt;
&lt;h2 id="mcp-contenuto-della-sessione-come-strumenti"&gt;MCP: contenuto della sessione come strumenti&lt;/h2&gt;
&lt;p&gt;Il contenuto della sessione è esposto tramite MCP in modo che qualsiasi client compatibile con MCP possa accedervi. Sia il server che il client sono implementati — il server espone la conoscenza della sessione come strumenti MCP, e il client consente di chiamare questi strumenti dall&amp;rsquo;interno della pipeline dell&amp;rsquo;agente.&lt;/p&gt;
&lt;h2 id="agent-framework-riepilogo-multi-agente-in-parallelo"&gt;Agent Framework: riepilogo multi-agente in parallelo&lt;/h2&gt;
&lt;p&gt;Il riepilogo della sessione viene generato da tre agenti che eseguono in modo concorrente — &lt;code&gt;PollSummaryAgent&lt;/code&gt;, &lt;code&gt;QuestionSummaryAgent&lt;/code&gt; e &lt;code&gt;InsightSummaryAgent&lt;/code&gt; — poi uniti. Questo utilizza il pattern di group chat o esecuzione parallela di Microsoft Agent Framework. Ogni agente gestisce una preoccupazione; l&amp;rsquo;orchestratore unisce gli output.&lt;/p&gt;
&lt;h2 id="il-principio-di-progettazione"&gt;Il principio di progettazione&lt;/h2&gt;
&lt;p&gt;Il post fa un punto degno di nota: usa lo strumento più semplice che si adatta. Chiamate dirette a &lt;code&gt;IChatClient&lt;/code&gt; per semplici attività di generazione. Chiamata di strumento/funzione per l&amp;rsquo;estrazione di dati strutturati. Agenti completi solo quando si necessita di ragionamento autonomo multi-step. La stratificazione delle librerie lo impone — è possibile usare &lt;code&gt;Microsoft.Extensions.AI&lt;/code&gt; senza includere l&amp;rsquo;Agent Framework completo.&lt;/p&gt;
&lt;p&gt;Consulta il &lt;a href="https://devblogs.microsoft.com/dotnet/building-ai-conference-app-dotnet-composable-stack/"&gt;post completo&lt;/a&gt; per la struttura completa del progetto e i link al codice sorgente.&lt;/p&gt;</content:encoded></item><item><title>Dove il tuo Agente Ricorda le Cose? Guida Pratica all'Archiviazione della Cronologia Chat</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Gestito dal servizio o dal client? Lineare o ramificabile? La decisione architetturale che definisce cosa può fare davvero il tuo agente IA — con esempi di codice in C# e Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Questo post è stato tradotto automaticamente. Per la versione originale, &lt;a href="https://thedotnetblog.com/it/news/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;clicca qui&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Quando costruisci un agente IA, dedichi la maggior parte dell&amp;rsquo;energia al modello, agli strumenti e ai prompt. La domanda su &lt;em&gt;dove vive la cronologia della conversazione&lt;/em&gt; sembra un dettaglio di implementazione — ma è una delle decisioni architetturali più importanti che prenderai.&lt;/p&gt;
&lt;p&gt;Determina se gli utenti possono ramificare le conversazioni, annullare le risposte, riprendere le sessioni dopo un riavvio e se i tuoi dati escono mai dalla tua infrastruttura. Il &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;team di Agent Framework ha pubblicato un&amp;rsquo;analisi approfondita&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="due-pattern-fondamentali"&gt;Due pattern fondamentali&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gestito dal servizio&lt;/strong&gt;: il servizio IA archivia lo stato della conversazione. La tua app mantiene un riferimento e il servizio include automaticamente la cronologia rilevante in ogni richiesta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestito dal client&lt;/strong&gt;: la tua app mantiene la cronologia completa e invia messaggi rilevanti con ogni richiesta. Il servizio è stateless. Tu controlli tutto.&lt;/p&gt;
&lt;h2 id="come-agent-framework-astrae-questo"&gt;Come Agent Framework astrae questo&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mi chiamo Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Come mi chiamo?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Mi chiamo Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Come mi chiamo?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="riferimento-rapido-ai-provider"&gt;Riferimento rapido ai provider&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Archiviazione&lt;/th&gt;
&lt;th&gt;Modello&lt;/th&gt;
&lt;th&gt;Compattazione&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;td&gt;Lineare&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (default)&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;td&gt;Ramificabile&lt;/td&gt;
&lt;td&gt;Servizio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Tu&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="come-scegliere"&gt;Come scegliere&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di ramificazione o &amp;ldquo;annulla&amp;rdquo;?&lt;/strong&gt; → Responses API gestito dal servizio&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hai bisogno di sovranità dei dati?&lt;/strong&gt; → Gestito dal client con provider di database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;È un semplice chatbot?&lt;/strong&gt; → Gestito dal servizio lineare va benissimo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Leggi il &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;post completo&lt;/a&gt; per l&amp;rsquo;albero decisionale completo.&lt;/p&gt;</content:encoded></item></channel></rss>