{"id":36518,"date":"2019-10-31T22:12:07","date_gmt":"2019-10-31T19:12:07","guid":{"rendered":"https:\/\/prohoster.info\/blog\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\/"},"modified":"2019-10-31T22:12:07","modified_gmt":"2019-10-31T19:12:07","slug":"programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","title":{"rendered":"Architettura software e design dei sistemi: quadro generale e guida alle risorse","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salve, colleghi.<\/p>\n<p>Oggi vi proponiamo la traduzione di un articolo di Tugberk Ugurlu, il quale si \u00e8 preso la responsabilit\u00e0 di esporre in modo relativamente conciso i principi di progettazione dei moderni sistemi software. Ecco cosa riferisce l'autore di s\u00e9 nel suo essenziale.<\/p>\n<p><img decoding=\"async\" alt=\"Architettura software e design dei sistemi: quadro generale e guida alle risorse\" src=\"\/wp-content\/uploads\/2019\/07\/30de77ffad15171ce493ce5003c99360.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPoich\u00e9 \u00e8 decisamente impossibile coprire in un articolo cos\u00ec vasto un tema colossale come i pattern architettonici + i pattern di progettazione aggiornati al 2019, raccomandiamo non solo il testo del signor Ugurlu, ma anche i numerosi link che ha gentilmente fornito. Se vi piace, pubblicheremo anche un testo pi\u00f9 specializzato sulla progettazione di sistemi distribuiti.<\/p>\n<p><img decoding=\"async\" alt=\"Architettura software e design dei sistemi: quadro generale e guida alle risorse\" src=\"\/wp-content\/uploads\/2019\/07\/4ccec9506aedb91bb601ebc32b6762be.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<i>Immagine <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/6EnTPvPPL6I?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">di Isaac Smith<\/a><\/noindex> dal sito Unsplash<\/i><\/p>\n<p>Se non vi siete mai trovati ad affrontare sfide come la progettazione di un sistema software da zero, all'inizio di un lavoro del genere non \u00e8 chiaro da dove cominciare. Ritengo sia necessario delineare i confini, per avere un'idea pi\u00f9 o meno chiara di cosa si intende progettare, e poi rimboccarsi le maniche e lavorare senza uscire da questi limiti. Come punto di partenza, si potrebbe prendere un prodotto o un servizio (idealmente, uno che vi piace molto) e approfondire la sua realizzazione. Potreste restare stupiti da quanto possa sembrare semplice quel prodotto e dalla grande complessit\u00e0 che vi si cela. Non dimenticate: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=k9Zbuuo51go\">il semplice \u00e8 spesso complesso<\/a><\/noindex>, e questo \u00e8 normale.<\/p>\n<p>Credo che il miglior consiglio che posso dare a chi inizia a progettare un sistema sia: non ammettere alcuna supposizione! Fin dall'inizio \u00e8 necessario concretizzare i fatti noti su questo sistema e le aspettative correlate. Ecco alcune buone domande, le cui risposte vi aiuteranno ad avviare la progettazione:<\/p>\n<ul>\n<li>Qual \u00e8 il problema che stiamo cercando di risolvere? <\/li>\n<li>Qual \u00e8 il numero massimo di utenti che interagiranno con il nostro sistema?<\/li>\n<li>Quali pattern di scrittura e lettura dei dati utilizzeremo? <\/li>\n<li>Quali sono i casi di errore previsti e come intendiamo affrontarli?<\/li>\n<li>Quali sono le aspettative riguardo alla coerenza e alla disponibilit\u00e0 del sistema? <\/li>\n<li>Dobbiamo prendere in considerazione requisiti legati a verifiche esterne e regolamentazioni durante il lavoro?<\/li>\n<li>Quali tipi di dati riservati intendiamo conservare?<\/li>\n<\/ul>\n<p>\nQueste sono solo alcune domande che sono state utili sia per me che per i team con cui ho avuto il piacere di lavorare nel corso della mia carriera professionale. Se conosci le risposte a queste domande (e a tutte le altre pertinenti al contesto in cui lavori), puoi iniziare a addentrarti nei dettagli tecnici del compito.<\/p>\n<p><b>Impostiamo il livello iniziale<\/b><\/p>\n<p>Cosa intendo qui per \u00ablivello iniziale\u00bb (baseline)? In effetti, ai nostri tempi, la maggior parte dei problemi nel settore del software \u00abpu\u00f2\u00bb essere risolta utilizzando metodi e tecnologie gi\u00e0 esistenti. Pertanto, orientandoti in questo panorama, ottieni un vantaggio quando affronti compiti che qualcuno ha gi\u00e0 risolto prima di te. Non dimentichiamo che i programmi vengono scritti per risolvere i problemi delle aziende e degli utenti, quindi cerchiamo di affrontare il compito nel modo pi\u00f9 diretto e semplice (dal punto di vista dell'utente) possibile. Perch\u00e9 \u00e8 importante ricordarlo? Forse nella tua personale sistematica ti piace cercare soluzioni uniche per ogni problema, poich\u00e9 pensi: \u00abche tipo di programmatore sarei se seguisco sempre schemi\u00bb? In realt\u00e0, <b>l'arte sta nel prendere decisioni su dove e cosa fare<\/b>. Ovviamente, ognuno di noi di tanto in tanto deve affrontare problemi unici, ognuno dei quali rappresenta una vera sfida. Tuttavia, se il nostro livello iniziale \u00e8 chiaramente definito, sappiamo su cosa concentrare le nostre energie: cercare soluzioni gi\u00e0 pronte per il compito che ci \u00e8 stato assegnato o approfondire la questione per una comprensione pi\u00f9 profonda.<\/p>\n<p>Penso di averti convinto che, se uno specialista ha una buona comprensione di quale sia la componente architettonica di alcuni eccellenti sistemi software, tali conoscenze saranno essenziali per padroneggiare l'arte dell'architetto e costruire una solida base in questo campo.<\/p>\n<p>Bene, da dove iniziamo? Su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\">Donna Martin<\/a><\/noindex> ha un repository su GitHub chiamato <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\">system-design-primer<\/a><\/noindex>, grazie al quale potrai imparare a progettare sistemi su larga scala e prepararti a colloqui su questo tema. Nel repository c'\u00e8 una sezione con esempi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/tree\/1144b8ef4c441af73f7cbfd51f56b8eb62350a66#real-world-architectures\">di architetture reali<\/a><\/noindex>, dove, in particolare, si discute di come progettano i loro sistemi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/tree\/1144b8ef4c441af73f7cbfd51f56b8eb62350a66#company-architectures\">alcune aziende ben note<\/a><\/noindex>, ad esempio, Twitter, Uber, ecc.<\/p>\n<p>Tuttavia, prima di passare a questo materiale, approfondiamo le sfide architettoniche pi\u00f9 importanti che si devono affrontare nella pratica. Questo \u00e8 importante perch\u00e9 \u00e8 necessario specificare MOLTI aspetti di un problema complesso e multifaceted, e poi risolverlo nel contesto della regolamentazione vigente in questo sistema. <noindex><a rel=\"nofollow\" href=\"https:\/\/jg.gg\/\">Jackson Gabbard<\/a><\/noindex>, ex dipendente di Facebook, ha registrato <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=ZgdS0EUmn70\">un video di 50 minuti sugli colloqui relativi alla progettazione dei sistemi<\/a><\/noindex>, dove ha condiviso la sua esperienza nella valutazione di centinaia di candidati. Anche se il video riguarda specificamente la progettazione di grandi sistemi e i criteri di successo, importanti nella selezione di un candidato per tale posizione, rimane una risorsa completa su quali siano le cose pi\u00f9 importanti nella progettazione dei sistemi. Propongo anche <noindex><a rel=\"nofollow\" href=\"https:\/\/jg.gg\/2016\/07\/31\/architecture-and-systems-design-interview\/\">un riassunto<\/a><\/noindex> di questo video.<\/p>\n<p><b>Acquisisci conoscenze sulla memorizzazione e recupero dei dati<\/b> <\/p>\n<p>Di norma, la tua decisione su come memorizzare e fornire i tuoi dati a lungo termine influisce in modo critico sulle prestazioni del sistema. Pertanto, devi prima di tutto comprendere le caratteristiche attese di scrittura e lettura dei dati nel tuo sistema. Successivamente, \u00e8 necessario essere in grado di valutare questi parametri e fare una scelta basata sulle valutazioni effettuate. Tuttavia, per gestire efficacemente questo compito, sar\u00e0 indispensabile avere familiarit\u00e0 con i modelli di memorizzazione dei dati esistenti. Di fatto, questo implica avere una solida conoscenza legata alla <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#database\">selezione del database<\/a><\/noindex>. <\/p>\n<p>I database possono essere considerati strutture dati che presentano un'eccezionale scalabilit\u00e0 e longevit\u00e0. Pertanto, la conoscenza delle strutture dati dovrebbe tornarti molto utile anche nella scelta di un database specifico. Ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/topics\/data-types-intro\">Redis<\/a><\/noindex> \u00e8 un server di strutture dati che supporta diversi tipi di valori. Permette di lavorare con strutture dati come liste e insiemi e di leggere i dati utilizzando algoritmi ben noti, come ad esempio <noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/topics\/lru-cache\">LRU<\/a><\/noindex>, organizzando tale attivit\u00e0 in uno stile durevole e altamente disponibile. <\/p>\n<p><img decoding=\"async\" alt=\"Architettura software e design dei sistemi: quadro generale e guida alle risorse\" src=\"\/wp-content\/uploads\/2019\/07\/8e30da0e8edd592609466f3c6c6f66d1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Immagine <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/JuFcQxgCXwA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Samuel Zeller<\/a><\/noindex> dal sito Unsplash<\/i><\/p>\n<p>Quando vi orienterete sufficientemente sui vari modelli di archiviazione dei dati, potrete passare a studiare la coerenza e la disponibilit\u00e0 dei dati. La prima cosa che dovrete assimilare <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#cap-theorem\">\u00e8 il teorema CAP<\/a><\/noindex> , almeno a grandi linee, e poi affinare queste conoscenze approfondendo i modelli consolidati di <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#consistency-patterns\">coerenza<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#availability-patterns\">disponibilit\u00e0<\/a><\/noindex>. In questo modo acquisirete una visione d'insieme in quest'area e capirete che la lettura e la scrittura dei dati sono in realt\u00e0 due problemi molto diversi, ognuno dei quali presenta le proprie sfide specifiche. Armati di alcuni modelli per garantire coerenza e disponibilit\u00e0, potrete aumentare significativamente le prestazioni del sistema, garantendo nel contempo un flusso continuo di dati alle vostre applicazioni.<\/p>\n<p>Infine, concludendo la discussione sulle questioni di archiviazione dei dati, \u00e8 opportuno menzionare anche la memorizzazione nella cache. Deve essere eseguita simultaneamente sia sul client che sul server? Quali dati avrete in cache? E perch\u00e9? Come organizzerete l'invalidazione della cache? Viene effettuata regolarmente, a intervalli di tempo definiti? Se s\u00ec, con che frequenza? Raccomando di iniziare il lavoro su questi temi con il <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#cache\">seguente capitolo<\/a><\/noindex> del suddetto manuale di progettazione dei sistemi. <\/p>\n<p><b>Modelli di comunicazione<\/b><\/p>\n<p>I sistemi sono composti da vari componenti; possono essere diversi processi che operano all'interno dello stesso nodo fisico o diverse macchine che agiscono in diverse parti della vostra rete. Alcune di queste risorse all'interno della vostra rete possono essere private, ma altre devono essere pubbliche e aperte ai consumatori che vi accedono dall'esterno.<\/p>\n<p>\u00c8 necessario garantire la comunicazione tra queste risorse e anche lo scambio di informazioni tra l'intero sistema e il mondo esterno. Nel contesto della progettazione dei sistemi, qui ci troviamo nuovamente ad affrontare un insieme di nuove sfide uniche. Scopriamo come possono essere utili <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#asynchronism\">i flussi di lavoro asincroni<\/a><\/noindex>, e quali sono i diversi<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#communication\">modelli di comunicazione disponibili<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Architettura software e design dei sistemi: quadro generale e guida alle risorse\" src=\"\/wp-content\/uploads\/2019\/07\/e4dc98256b755acf931097d218f8b0dd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Immagine <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/DgZxBnZeQo8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Tony Stoddard<\/a><\/noindex> dal sito Unsplash<\/i><\/p>\n<p>Nell'organizzare la comunicazione con il mondo esterno \u00e8 sempre molto importante <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer\/#security\">sicurezza<\/a><\/noindex>, un obiettivo al quale bisogna avvicinarsi con grande seriet\u00e0 e dedicarsi attivamente. <\/p>\n<p><b>Distribuzione delle connessioni<\/b><\/p>\n<p>Non sono sicuro che rendere questo argomento una sezione autonoma sembri giustificato a tutti. Tuttavia, presenter\u00f2 qui questa concettualizzazione in modo dettagliato, ritenendo che il materiale di questa sezione sia meglio descritto dal termine \u00abdistribuzione delle connessioni\u00bb (connection distribution).<\/p>\n<p>I sistemi si formano attraverso il corretto collegamento di numerosi componenti, e la loro comunicazione tra di loro \u00e8 spesso organizzata sulla base di protocolli consolidati, come TCP e UDP. Tuttavia, questi protocolli talvolta non sono sufficienti a soddisfare tutte le esigenze dei moderni sistemi, che sono spesso sotto un carico elevato e dipendono fortemente dalle necessit\u00e0 degli utenti. Spesso \u00e8 necessario trovare modi per distribuire le connessioni, al fine di gestire carichi cos\u00ec elevati nel sistema.<\/p>\n<p>Alla base di tale distribuzione c'\u00e8 un <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/DNS\">sistema dei nomi di dominio<\/a><\/noindex> (DNS). Un sistema di questo tipo consente di convertire un nome di dominio, ad esempio un algoritmo round robin pesato (weighted round robin) e metodi basati su ritardi, che aiutano a distribuire il carico. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8\">Il bilanciamento del carico<\/a><\/noindex> \u00e8 fondamentale, e praticamente qualsiasi grande sistema su Internet con cui ci confrontiamo oggi \u00e8 situato dietro uno o pi\u00f9 bilanciatori di carico. I bilanciatori di carico aiutano a distribuire le richieste dei clienti tra molti istanze disponibili. I bilanciatori di carico possono essere sia hardware che software, ma nella pratica ci si trova pi\u00f9 spesso con soluzioni software, come ad esempio <noindex><a rel=\"nofollow\" href=\"http:\/\/www.haproxy.org\/\">HAProxy<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/elasticloadbalancing\/\">ELB<\/a><\/noindex>. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer#reverse-proxy-web-server\">I proxy inversi<\/a><\/noindex> sono concettualmente molto simili ai bilanciatori di carico, anche se ci sono una serie di <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/donnemartin\/system-design-primer#load-balancer-vs-reverse-proxy\">differenze nette<\/a><\/noindex>. Queste differenze devono essere necessariamente considerate quando si progetta un sistema in base alle propri necessit\u00e0.<\/p>\n<p>Bisogna anche essere a conoscenza delle <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Content_Delivery_Network\">reti di distribuzione dei contenuti<\/a><\/noindex> (CDN). Un CDN \u00e8 una rete globale distribuita di server proxy che fornisce informazioni da nodi che sono geograficamente pi\u00f9 vicini a un particolare utente. \u00c8 preferibile utilizzare reti CDN se si lavora con file statici scritti in JavaScript, CSS e HTML. Inoltre, oggi sono comuni servizi cloud che offrono gestori del traffico, come ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/traffic-manager\/traffic-manager-overview?ranMID=24542&amp;ranEAID=je6NUbpObpQ&amp;ranSiteID=je6NUbpObpQ-9vzliSFGJdQqkHaqdUFnUQ&amp;epi=je6NUbpObpQ-9vzliSFGJdQqkHaqdUFnUQ&amp;irgwc=1&amp;OCID=AID2000142_aff_7593_1243925&amp;tduid=(ir__ntizratyeckfrlt1kk0sohz30m2xjibo1hl6incq00)(7593)(1243925)(je6NUbpObpQ-9vzliSFGJdQqkHaqdUFnUQ)()&amp;irclickid=_ntizratyeckfrlt1kk0sohz30m2xjibo1hl6incq00\">Azure Traffic Manager<\/a><\/noindex>, che ti offre distribuzione globale e minori ritardi nel lavorare con contenuti dinamici. Tuttavia, tali servizi sono generalmente utili in quei casi in cui ci si trova a lavorare con servizi web senza stato. <\/p>\n<p><b>Parliamo della logica di business. Strutturazione della logica di business, flussi di lavoro e componenti<\/b><\/p>\n<p>Quindi, siamo riusciti a discutere vari aspetti infrastrutturali del sistema. \u00c8 probabile che l'utente non si preoccupi affatto di tutti questi elementi del tuo sistema e, a dirla tutta, non ci pensi nemmeno. L'utente \u00e8 interessato a come interagire con il tuo sistema, cosa \u00e8 possibile ottenere procedendo in questo modo, e come il sistema esegue i comandi dell'utente, cosa fa e come gestisce i dati dell'utente.<\/p>\n<p>Come \u00e8 chiaro dal titolo di questo articolo, intendevo trattare dell'architettura software e del design dei sistemi. Di conseguenza, non intendevo approfondire i pattern di design del software, che descrivono come si creano i componenti software. Tuttavia, pi\u00f9 ci rifletto, pi\u00f9 mi sembra che il confine tra pattern di design del software e pattern architettonici sia molto sfumato, e queste due concezioni siano strettamente collegate. Prendiamo, ad esempio, <noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\">la registrazione degli eventi<\/a><\/noindex> (event sourcing). Non appena adotterai questo pattern architettonico, influenzer\u00e0 praticamente tutti gli aspetti del tuo sistema: la conservazione a lungo termine dei dati, il livello di coerenza adottato nel tuo sistema, i contorni dei componenti al suo interno, ecc. Pertanto, ho deciso di menzionare alcuni pattern architettonici che riguardano direttamente la logica di business. Anche se in questo articolo dovr\u00f2 limitarmi a una semplice lista, ti consiglio di familiarizzarti con essa e riflettere sulle idee ad essa associate. Ecco a te:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">Principi SOLID<\/a><\/noindex> <\/li>\n<li>Concetti <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">Design orientato agli oggetti<\/a><\/noindex>, in particolare, <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/ingeniouslysimple\/aggregates-in-domain-driven-design-5aab3ef9901d\">aggregati<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/ingeniouslysimple\/command-vs-event-in-domain-driven-design-be6c45be52a9\">comandi ed eventi<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/267125\/\">Architettura esagonale<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/CQRS.html\">Separazione delle responsabilit\u00e0 tra comandi e richieste (CQRS)<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\">Registrazione degli eventi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/doc.akka.io\/docs\/akka\/2.5\/guide\/actors-intro.html\">Modello ad attori<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/215605\/\">Pattern di design MVC, MVVM e MVP<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<b>Approcci collaborativi<\/b><\/p>\n<p>\u00c8 estremamente improbabile che tu sia l'unico partecipante al progetto responsabile del processo di progettazione del sistema. Al contrario, probabilmente dovrai interagire con i colleghi, che lavorano sia nell'ambito del tuo compito sia al di fuori di esso. In questo caso, potrebbe essere necessario valutare le soluzioni tecnologiche scelte insieme ai colleghi, estrapolare le esigenze aziendali e capire come meglio parallelizzare le attivit\u00e0.<\/p>\n<p><img decoding=\"async\" alt=\"Architettura software e design dei sistemi: quadro generale e guida alle risorse\" src=\"\/wp-content\/uploads\/2019\/07\/ad39e031dcac8e69fafb637603043bfb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Immagine <noindex><a rel=\"nofollow\" href=\"https:\/\/unsplash.com\/photos\/3V8xo5Gbusk?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\">Kaleidico<\/a><\/noindex> dal sito Unsplash<\/i><\/p>\n<p>Innanzitutto, \u00e8 necessario sviluppare una comprensione precisa e riconosciuta di quale sia l'obiettivo aziendale che stai cercando di raggiungere e con quali elementi variabili dovrai confrontarti. Tecniche di modellazione di gruppo, in particolare, <noindex><a rel=\"nofollow\" href=\"https:\/\/techbeacon.com\/devops\/introduction-event-storming-easy-way-achieve-domain-driven-design\">storming di eventi<\/a><\/noindex> (event storming) aiutano significativamente ad accelerare questo processo e aumentano le tue possibilit\u00e0 di successo. Puoi iniziare a lavorare su questo prima o dopo aver delineato <noindex><a rel=\"nofollow\" href=\"https:\/\/www.infoq.com\/news\/2015\/02\/service-boundaries-healthcare\/\">i confini dei tuoi servizi<\/a><\/noindex>, e poi approfondirlo man mano che il prodotto matura. Facendo affidamento sul livello di coerenza che verr\u00e0 raggiunto qui, puoi anche formulare <noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/bliki\/UbiquitousLanguage.html\">un linguaggio comune<\/a><\/noindex> per il contesto limitato in cui operi. Quando sar\u00e0 necessario parlare dell'architettura del tuo sistema, potrebbe esserti utile <noindex><a rel=\"nofollow\" href=\"https:\/\/c4model.com\/\">il modello C4<\/a><\/noindex>, proposto da <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/simonbrown\">Simon Brown<\/a><\/noindex>, specialmente quando devi capire quanto dovrai scendere nei dettagli del problema, visualizzando le cose che desideri comunicare.<\/p>\n<p>Probabilmente in questo campo esiste anche un'altra tecnologia matura, altrettanto utile della progettazione orientata agli oggetti. Tuttavia, torniamo sempre alla comprensione del dominio, quindi la conoscenza e l'esperienza nel campo della <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">progettazione orientata agli oggetti<\/a><\/noindex> dovrebbero esserti utili.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/461283\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0412\u043e\u0442 \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0441\u0435\u0431\u0435 \u0432 \u0441\u0443\u0445\u043e\u043c \u043e\u0441\u0442\u0430\u0442\u043a\u0435: \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432 \u0445\u0430\u0431\u0440\u043e\u0441\u0442\u0430\u0442\u044c\u0435 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u043c\u0443, \u043a\u0430\u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b + \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043d\u0430 2019 \u0433\u043e\u0434, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27331,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c: \u043e\u0431\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0438 \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:12:07+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:12:07+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Architettura software e progettazione dei sistemi: panoramica generale e guida alle risorse | ProHoster","description":"Salve, colleghi. Oggi vi presentiamo la traduzione dell'articolo di Tugberk Ugurlu, che si \u00e8 preso la responsabilit\u00e0 di esporre i principi della progettazione del software moderno in un volume relativamente contenuto.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c: \u043e\u0431\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0438 \u043f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c | ProHoster","og:description":"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435, \u043a\u043e\u043b\u043b\u0435\u0433\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 \u0422\u0443\u0433\u0431\u0435\u0440\u043a\u0430 \u0423\u0433\u0443\u0440\u043b\u0443 (Tugberk Ugurlu), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0437\u044f\u043b\u0441\u044f \u0432 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043e\u0431\u044a\u0435\u043c\u0435 \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0444\u0442\u0432\u0435\u0440\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/programmnaya-arhitektura-i-proektirovanie-sistem-obshhaya-kartina-i-putevoditel-po-resursam","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:12:07+00:00","article:modified_time":"2019-10-31T19:12:07+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36518","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 03:40:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:43:33","updated":"2026-01-22 03:40:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36518"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36518\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27331"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}