{"id":5821,"date":"2011-02-21T18:26:51","date_gmt":"2011-02-21T17:26:51","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=5821"},"modified":"2011-02-21T18:50:53","modified_gmt":"2011-02-21T17:50:53","slug":"creiamo-un-applicazione-completa-il-design-di-unapp","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/creiamo-un-applicazione-completa-il-design-di-unapp\/","title":{"rendered":"Creiamo un&#8217;applicazione completa | Il Design di un&#8217;app"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/creare-un-applicazione-iphone-completa-devapp-Design.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/creare-un-applicazione-iphone-completa-devapp-Design.jpg\" alt=\"creare-un-applicazione-iphone-completa-devapp-Design\" title=\"creare-un-applicazione-iphone-completa-devapp-Design\" width=\"200\" height=\"200\" class=\"alignleft size-full wp-image-5946\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/creare-un-applicazione-iphone-completa-devapp-Design.jpg 250w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/creare-un-applicazione-iphone-completa-devapp-Design-150x150.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/creare-un-applicazione-iphone-completa-devapp-Design-92x92.jpg 92w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/creare-un-applicazione-iphone-completa-devapp-Design-64x64.jpg 64w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a> Oggi parliamo di un argomento molto importante, spesso sottovalutato e che dovrebbe toccare ogni sviluppatore iPhone (e non): il design delle applicazioni. Molte volte, infatti, vuoi per questioni di tempo, vuoi per pigrizia, si fa l&#8217;errore di saltare tutti i passaggi che si pensa siano pi\u00f9 inutili, uno di questi \u00e8 appunto il design dell&#8217;applicazione, che andrebbe ragionato nelle prime fasi di sviluppo, ovvero nella parte di progettazione delle proprie applicazioni. Ogni studente di ingegneria informatica (o scienze informatiche) sa molto bene che questa parte \u00e8 davvero importante, anche se nella realt\u00e0 capita anche a loro, a lungo andare, di perdere la buona abitudine di fermarsi quei &#8220;5 minuti&#8221; in pi\u00f9 che potrebbero far invece risparmiare ore se non giorni di correzione dell&#8217;applicazione per via di un cattivo design iniziale.<!--more--><\/p>\n<p>Dopo 3 anni di esperienza, malgrado la mia giovane et\u00e0, ho capito che questo pu\u00f2 essere un errore fatale. Il rischio di finire in un vicolo cieco \u00e8 altissimo, anche perch\u00e9 spesso ci si trova davanti clienti che iniziano a richiedere questa o quell&#8217;altra &#8220;piccola modifica&#8221;, convinti che una qualsiasi banalit\u00e0, sia una modifica da pochi minuti (tanto cosa ci vuole ad aggiungere &#8220;un flag&#8221; qua e la :P). Ecco perch\u00e8 ragionare per bene fin da subito (anche e soprattutto con i nostri clienti) soprattutto prima di iniziare a scrivere codice e insieme allo sviluppo di un bel diagramma delle classi che ci serviranno, non guasta mai!<\/p>\n<h4>Cosa costruiremo nella nostra applicazione?<\/h4>\n<p>Passiamo al nostro progetto e proviamo ad immaginare di quanti controller necessitiamo per la nostra applicazione. Ad occhio e croce potrebbero servircene almeno 4 per:<\/p>\n<ul>\n<li>Quick Converter (Convertitore Rapido)<\/li>\n<li>Multi Converter (Convertitore con una valuta &#8220;madre&#8221; e le altre in cascata, a scelta)<\/li>\n<li>Rates (Possibilit\u00e0 di vedere i singoli cambi)<\/li>\n<li>Settings (Da non trascurare!)<\/li>\n<\/ul>\n<p>Ognuno di questi avr\u00e0 una classe. Personalmente non includo mai i View Controller nel diagramma delle classi ed il perch\u00e8 \u00e8 molto semplice: i View Controller, durante lo sviluppo, possono scomparire come nascere.<\/p>\n<p>Quello di cui necessitiamo veramente \u00e8 capire se le nostre valute necessitano o meno di una classe apposita, o se semplicemente potremmo limitarci ad utilizzare una struttura dati pi\u00f9 basica come, ad esempio, un <em>NSDictionary<\/em>. Nel progetto che costruiremo un semplice NSDictionary, con le giuste chiavi, potrebbe essere pi\u00f9 che sufficiente, ma essendo questo un tutorial completo proposto come studio, sono convinto che creando una classe apposita avremo l&#8217;occasione di poter toccare molti pi\u00f9 aspetti della programmazione su iPhone.<\/p>\n<p>Decisa quella che \u00e8 la nostra struttura dati pi\u00f9 semplice, la valuta, dobbiamo ragionare sul cambio. Il tasso di cambio, con valuta annessa, pu\u00f2 essere considerata una classe? Possiamo creare una classe con le due valute e poi inserire una variabile che ne identifica il tasso di cambio? Certo, ma questa soluzione la ritengo, personalmente, pessima. Creare una classe con 3 variabili, dove due di esse sono di una classe creata da noi, a meno che il nostro storage dati non sia in Core Data (e pi\u00f9 avanti vedremo il perch\u00e8), \u00e8 uno spreco di risorse. Quello che faremo sar\u00e0 semplicemente salvare il nostro tasso di cambio in un <em>NSMutableDictionary<\/em> con chiave del tipo &#8220;valuta1-valuta2&#8221;. Questo ci permetter\u00e0 di salvare risorse e di avere un numero limitato di oggetti in memoria. In questo caso, la scelta migliore, \u00e8 tenere tutto quanto in memoria, rendendo il tempo di conversione molto inferiore.<\/p>\n<p>Come facciamo ad avere un oggetto che resti in vita per tutta la durata del nostro programma? Le soluzioni sono molteplici, si pu\u00f2 iniziare con un semplice oggetto nel nostro delegate, fino ad un oggetto dichiarato in un file header globale passando per un singleton. Quest&#8217;ultimo caso citato \u00e8 proprio quello che useremo.<\/p>\n<p>Vedremo in uno dei prossimi articoli cos&#8217;\u00e8 in dettaglio un oggetto &#8220;singleton&#8221; e mostreremo i suoi vantaggi e svantaggi, per ora vi saluto, ci si vede nel prossimo articolo che tratter\u00e0 le icone per la nostra applicazione.<\/p>\n<p><strong>NOTA:<\/strong> <em>Potete seguire tutto il progetto completo navigando nella categoria &#8220;<a href=\"http:\/\/www.devapp.it\/wordpress\/category\/progetti-completi\" target=\"_blank\">Progetti Completi<\/a>&#8221; del sito.<\/em><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/clk.tradedoubler.com\/click?p=24373&#038;a=1735897&#038;g=0&#038;url=http:\/\/itunes.apple.com\/gb\/app\/wallpaper-case-studies\/id408888024?mt=8&#038;partnerId=2003\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/02\/banner-wallpaper-cs.png\" alt=\"banner-wallpaper-cs\" title=\"banner-wallpaper-cs\" width=\"468\" height=\"54\" class=\"aligncenter size-full wp-image-5843\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oggi parliamo di un argomento molto importante, spesso sottovalutato e che dovrebbe toccare ogni sviluppatore iPhone (e&#8230;<\/p>\n","protected":false},"author":540,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[563],"tags":[576,577,578,309],"class_list":["post-5821","post","type-post","status-publish","format-standard","hentry","category-progetti-completi","tag-design-applicazione-iphone","tag-progetto-iphone-completo","tag-programmare-iphone-ipad","tag-sviluppo-applicazioni-iphone"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/5821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/540"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=5821"}],"version-history":[{"count":14,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/5821\/revisions"}],"predecessor-version":[{"id":5957,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/5821\/revisions\/5957"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=5821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=5821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=5821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}