<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Comments on: Software Design problems, anyone?	</title>
	<atom:link href="http://matteo.vaccari.name/blog/archives/378/feed" rel="self" type="application/rss+xml" />
	<link>http://matteo.vaccari.name/blog/archives/378</link>
	<description>Extreme enthusiasm</description>
	<lastBuildDate>
	Mon, 25 Feb 2019 15:18:16 +0000	</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.1.1</generator>
			<item>
				<title>
				By: M stephens				</title>
				<link>http://matteo.vaccari.name/blog/archives/378/comment-page-1#comment-93764</link>
		<dc:creator><![CDATA[M stephens]]></dc:creator>
		<pubDate>Fri, 25 Feb 2011 03:37:24 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=378#comment-93764</guid>
					<description><![CDATA[Strategy pattern]]></description>
		<content:encoded><![CDATA[<p>Strategy pattern</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Carlo Pescio				</title>
				<link>http://matteo.vaccari.name/blog/archives/378/comment-page-1#comment-93301</link>
		<dc:creator><![CDATA[Carlo Pescio]]></dc:creator>
		<pubDate>Sun, 20 Jun 2010 13:06:19 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=378#comment-93301</guid>
					<description><![CDATA[si si Matteo, diciamo la stessa cosa : ), tu parli di funzione didattica, io dico che spingono &quot;a generare soluzioni inusuali&quot;, sono due facce della stessa medaglia...

comunque, io ogni tanto faccio un salto sul tuo blog, seguiro&#039; gli sviluppi : )

ciao

Carlo]]></description>
		<content:encoded><![CDATA[<p>si si Matteo, diciamo la stessa cosa : ), tu parli di funzione didattica, io dico che spingono &#8220;a generare soluzioni inusuali&#8221;, sono due facce della stessa medaglia&#8230;</p>
<p>comunque, io ogni tanto faccio un salto sul tuo blog, seguiro&#8217; gli sviluppi : )</p>
<p>ciao</p>
<p>Carlo</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: matteo				</title>
				<link>http://matteo.vaccari.name/blog/archives/378/comment-page-1#comment-93300</link>
		<dc:creator><![CDATA[matteo]]></dc:creator>
		<pubDate>Sun, 20 Jun 2010 06:48:53 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=378#comment-93300</guid>
					<description><![CDATA[Sono d&#039;accordo con quello che dici sui vincoli artificiali, eccetto che possono avere una funzione didattica.  Per esempio, nel caso del supermarket checkout, spingono a uscire dallo stile procedurale &quot;dammi X, Y, Z che li uso per fare un conto&quot; per passare a uno stile più OO &quot;tu che hai i dati necessari, fai questo conto&quot;.  E dico &quot;didattico&quot; non per fare il professore, ma proprio nel senso che serve per imparare; anch&#039;io ho imparato delle cose utili costringendomi a risolvere l&#039;esercizio con questi vincoli.

D&#039;accordo anche con l&#039;applicazione di nuovi requisiti &quot;a sorpresa&quot; come test della bontà del design.

Belli i tuoi contributi al checkout!!  Ne aggiungo uno anch&#039;io:

&quot;Il risultato non deve essere semplicemente il numero del totale, ma deve essere una lista di tutti i prodotti con i loro prezzi, con l&#039;indicazione di tutti gli sconti applicati&quot;.  

(Spoiler)  Dal punto di vista del design, se uno ha introdotto prima un &quot;collecting parameter&quot; che tiene traccia del totale, implementare questo nuovo requisito impatta solo il collecting parameter, mentre le altre classi (quasi) non vengono toccate.  Questo collecting parameter prende chiaramente il ruolo di Scontrino.]]></description>
		<content:encoded><![CDATA[<p>Sono d&#8217;accordo con quello che dici sui vincoli artificiali, eccetto che possono avere una funzione didattica.  Per esempio, nel caso del supermarket checkout, spingono a uscire dallo stile procedurale &#8220;dammi X, Y, Z che li uso per fare un conto&#8221; per passare a uno stile più OO &#8220;tu che hai i dati necessari, fai questo conto&#8221;.  E dico &#8220;didattico&#8221; non per fare il professore, ma proprio nel senso che serve per imparare; anch&#8217;io ho imparato delle cose utili costringendomi a risolvere l&#8217;esercizio con questi vincoli.</p>
<p>D&#8217;accordo anche con l&#8217;applicazione di nuovi requisiti &#8220;a sorpresa&#8221; come test della bontà del design.</p>
<p>Belli i tuoi contributi al checkout!!  Ne aggiungo uno anch&#8217;io:</p>
<p>&#8220;Il risultato non deve essere semplicemente il numero del totale, ma deve essere una lista di tutti i prodotti con i loro prezzi, con l&#8217;indicazione di tutti gli sconti applicati&#8221;.  </p>
<p>(Spoiler)  Dal punto di vista del design, se uno ha introdotto prima un &#8220;collecting parameter&#8221; che tiene traccia del totale, implementare questo nuovo requisito impatta solo il collecting parameter, mentre le altre classi (quasi) non vengono toccate.  Questo collecting parameter prende chiaramente il ruolo di Scontrino.</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Carlo Pescio				</title>
				<link>http://matteo.vaccari.name/blog/archives/378/comment-page-1#comment-93297</link>
		<dc:creator><![CDATA[Carlo Pescio]]></dc:creator>
		<pubDate>Sat, 19 Jun 2010 09:30:54 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=378#comment-93297</guid>
					<description><![CDATA[&#062;Più che soluzioni al FizzBuzz :-) mi piacerebbe vedere contributi a una “biblioteca” di problemi di design…
--
:)) certo... come dicevo, e&#039; una bella iniziativa, magari riesco anche a contribuire in qualche modo.

due consigli (non richiesti, ma ok : )

- capisco che introdurre vincoli (es. &quot;non potete usare get&quot;) a volte spinge a generare soluzioni inusuali, pero&#039; i vincoli artificiali sarebbero da evitare ove possibile (anche perche&#039; riducendo lo spazio del progettista si riduce anche la discussione delle alternative)

- sarebbe poi carino provare a vedere come si comportano le diverse soluzioni di fronte a cambiamenti nei requisiti (non note a priori, altrimenti...). Questo e&#039; in genere piu&#039; interessante rispetto ad un confronto del tipo &quot;il mio e&#039; piu&#039; open/closed del tuo&quot; che ogni tanto vedo in giro (peraltro in genere non viene identificato il subset di estensioni per cui il sistema risulta davvero &quot;open&quot;).

Volendo contribuire subito : ), ed avendo lavorato ad alcuni sistemi di cassa per un paio di clienti diversi, propongo qualche variante ai requisiti del problema #2, giusto per vedere la flessibilita&#039; delle soluzioni trovate:

a) ogni 3 prodotti, il piu&#039; economico e&#039; gratis. Nel caso di acquisto di N &#062; 3 prodotti, la scelta puo&#039; essere mirata a favore del negoziante (tipicamente) o del cliente.

b) sconti cross-product, ovvero: ogni N prodotti di tipo A acquistati, M prodotti di tipo B sono gratis (o scontati di X%).

c) [difficile, ma real-world] le regole del caso (b) possono sovrapporsi, e va trovata la soluzione complessiva piu&#039; favorevole per il cliente. Nel caso piu&#039; elementare (e raro)
N1 A =&#062; M1 B gratis
N2 B =&#062; M2 A gratis
Se compro K1 prodotti A e K2 prodotti B, come vanno prezzati?
(ovviamente i casi reali sono + complessi, le sovrapposizioni non sono mai del tipo simmetrico dato sopra, ma ok, una buona soluzione dovrebbe gestire tutti i casi).

Sarebbe divertente vedere quanto codice (e quanta &quot;struttura&quot;) si salva di fronte ad ogni modifica, e quanto i vincoli artificiali abbiano migliorato o peggiorato la flessibilita&#039; del design...

ciao

Carlo]]></description>
		<content:encoded><![CDATA[<p>&gt;Più che soluzioni al FizzBuzz :-) mi piacerebbe vedere contributi a una “biblioteca” di problemi di design…<br />
&#8212;<br />
:)) certo&#8230; come dicevo, e&#8217; una bella iniziativa, magari riesco anche a contribuire in qualche modo.</p>
<p>due consigli (non richiesti, ma ok : )</p>
<p>&#8211; capisco che introdurre vincoli (es. &#8220;non potete usare get&#8221;) a volte spinge a generare soluzioni inusuali, pero&#8217; i vincoli artificiali sarebbero da evitare ove possibile (anche perche&#8217; riducendo lo spazio del progettista si riduce anche la discussione delle alternative)</p>
<p>&#8211; sarebbe poi carino provare a vedere come si comportano le diverse soluzioni di fronte a cambiamenti nei requisiti (non note a priori, altrimenti&#8230;). Questo e&#8217; in genere piu&#8217; interessante rispetto ad un confronto del tipo &#8220;il mio e&#8217; piu&#8217; open/closed del tuo&#8221; che ogni tanto vedo in giro (peraltro in genere non viene identificato il subset di estensioni per cui il sistema risulta davvero &#8220;open&#8221;).</p>
<p>Volendo contribuire subito : ), ed avendo lavorato ad alcuni sistemi di cassa per un paio di clienti diversi, propongo qualche variante ai requisiti del problema #2, giusto per vedere la flessibilita&#8217; delle soluzioni trovate:</p>
<p>a) ogni 3 prodotti, il piu&#8217; economico e&#8217; gratis. Nel caso di acquisto di N &gt; 3 prodotti, la scelta puo&#8217; essere mirata a favore del negoziante (tipicamente) o del cliente.</p>
<p>b) sconti cross-product, ovvero: ogni N prodotti di tipo A acquistati, M prodotti di tipo B sono gratis (o scontati di X%).</p>
<p>c) [difficile, ma real-world] le regole del caso (b) possono sovrapporsi, e va trovata la soluzione complessiva piu&#8217; favorevole per il cliente. Nel caso piu&#8217; elementare (e raro)<br />
N1 A =&gt; M1 B gratis<br />
N2 B =&gt; M2 A gratis<br />
Se compro K1 prodotti A e K2 prodotti B, come vanno prezzati?<br />
(ovviamente i casi reali sono + complessi, le sovrapposizioni non sono mai del tipo simmetrico dato sopra, ma ok, una buona soluzione dovrebbe gestire tutti i casi).</p>
<p>Sarebbe divertente vedere quanto codice (e quanta &#8220;struttura&#8221;) si salva di fronte ad ogni modifica, e quanto i vincoli artificiali abbiano migliorato o peggiorato la flessibilita&#8217; del design&#8230;</p>
<p>ciao</p>
<p>Carlo</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: matteo				</title>
				<link>http://matteo.vaccari.name/blog/archives/378/comment-page-1#comment-93296</link>
		<dc:creator><![CDATA[matteo]]></dc:creator>
		<pubDate>Fri, 18 Jun 2010 12:25:35 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=378#comment-93296</guid>
					<description><![CDATA[Hola Carlo,

Grazie per il tuo commento.  Io il FizzBuzz lo vedo un po&#039; come uno strumento per illustrare alcune tecniche di design.  

Più che soluzioni al FizzBuzz :-) mi piacerebbe vedere contributi a una &quot;biblioteca&quot; di problemi di design... (hint! hint!)

Matteo]]></description>
		<content:encoded><![CDATA[<p>Hola Carlo,</p>
<p>Grazie per il tuo commento.  Io il FizzBuzz lo vedo un po&#8217; come uno strumento per illustrare alcune tecniche di design.  </p>
<p>Più che soluzioni al FizzBuzz :-) mi piacerebbe vedere contributi a una &#8220;biblioteca&#8221; di problemi di design&#8230; (hint! hint!)</p>
<p>Matteo</p>
]]></content:encoded>
						</item>
						<item>
				<title>
				By: Carlo Pescio				</title>
				<link>http://matteo.vaccari.name/blog/archives/378/comment-page-1#comment-93295</link>
		<dc:creator><![CDATA[Carlo Pescio]]></dc:creator>
		<pubDate>Fri, 18 Jun 2010 11:41:13 +0000</pubDate>
		<guid isPermaLink="false">http://matteo.vaccari.name/blog/?p=378#comment-93295</guid>
					<description><![CDATA[peccato che nessuno abbia proposto qualche soluzione, il problema e&#039; carino anche se &quot;artificiale&quot; (e in un ottica di &quot;vero&quot; design questo e&#039; sempre un po&#039; problematico), peraltro il codice che ho visto su slideshare (oltre a risolvere un problema leggermente diverso) e&#039;... come dire... migliorabile : )

ottima iniziativa comunque : )]]></description>
		<content:encoded><![CDATA[<p>peccato che nessuno abbia proposto qualche soluzione, il problema e&#8217; carino anche se &#8220;artificiale&#8221; (e in un ottica di &#8220;vero&#8221; design questo e&#8217; sempre un po&#8217; problematico), peraltro il codice che ho visto su slideshare (oltre a risolvere un problema leggermente diverso) e&#8217;&#8230; come dire&#8230; migliorabile : )</p>
<p>ottima iniziativa comunque : )</p>
]]></content:encoded>
						</item>
			</channel>
</rss>
