<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Philippe Vialatte &#187; SubSonic</title>
	<atom:link href="https://blog.developpez.com/philippe/pcategory/net/subsonic/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/philippe</link>
	<description></description>
	<lastBuildDate>Fri, 03 Jan 2014 15:12:09 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Le mauvais coté des ORM…</title>
		<link>https://blog.developpez.com/philippe/p8587/net/le_mauvais_cote_des_ormahellip</link>
		<comments>https://blog.developpez.com/philippe/p8587/net/le_mauvais_cote_des_ormahellip#comments</comments>
		<pubDate>Tue, 02 Feb 2010 09:37:00 +0000</pubDate>
		<dc:creator><![CDATA[Philippe Vialatte]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[.c&#8217;est quand on doit s&#8217;en passer après une longue période d&#8217;utilisation ! Tout le mois de Décembre (et une bonne partie de Janvier), j&#8217;ai travaillé quasi-exclusivement sur un projet ou la DAL était générée avec des templates tt customisés de Subsonic 3. Tout allait bien, la vie était belle, faire une nouvelle requête me prenait grosso modo 5 minutes, dans le genre : 1: DataRepository&#60;Customer>.GetAll() 2: .Where(customer => customer.fk_company == companyId) Et tout ca avec [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>.c&rsquo;est quand on doit s&rsquo;en passer après une longue période d&rsquo;utilisation !</p>
<p>Tout le mois de Décembre (et une bonne partie de Janvier), j&rsquo;ai travaillé quasi-exclusivement sur un projet ou la DAL était générée avec des templates tt customisés de Subsonic 3.</p>
<p><span id="more-32"></span></p>
<p>Tout allait bien, la vie était belle, faire une nouvelle requête me prenait grosso modo 5 minutes, dans le genre :</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> DataRepository&lt;Customer>.GetAll()</pre>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>       .Where(customer => customer.fk_company == companyId)</pre>
</div>
</div>
<p>Et tout ca avec possibilité d&rsquo;injecter le Repository que je voulais en cas de test, et la certitude que je ne récupérerais que les données que je veux, sans me poser plus de questions (oui, dés que j&rsquo;ai du temps, j&rsquo;en dis plus, promis.).</p>
<p>Et la, du jour au lendemain, je reprends un projet qui suit le format &laquo;&nbsp;classique&nbsp;&raquo; des DAL basées sur des procédures stockées, avec une procédure stockée appelée par la couche DataAccess, elle-même appelée pa la couche Business, elle-même appelée par la couche Web.trois classes pour un appel à la base, avec, au final, moins de découplage et le même niveau de performances.</p>
<p>Je ne l&rsquo;ai pas beaucoup exprimé auparavant, et c&rsquo;est un avis à moi que j&rsquo;ai, mais utiliser des procédures stockées pour faire des opérations CRUD est, pour moi, devenu un anti-pattern.</p>
<p>Les remarques habituelles de performances sont valables pour des procédures stockées complexes, mais, sur un projet ou 80% des procédures stockées sont des opérations mono-tables, elles n&rsquo;ajoutent, à mon avis, qu&rsquo;une surcharge cognitive à l&rsquo;application (ou est le bug ? dans la table, la procedure, la couche DAL, la couche Business, la couche Web, le framework ???)</p>
<p>Pour tous les prochains projets, la cible que je vais essayer d&rsquo;atteindre, c&rsquo;est du 95% de code ORM, et 5% de Procédures stockées pour les traitements lourds.</p>
<p> </p>
<p>Et vous (enfin, toi, mon unique lecteur :D), qu&rsquo;en pensez-vous ? Utilisez-vous encore des procédures stockées ? Sont-elles un mal nécessaire, une aberration antédiluvienne, ou la seule raison pour laquelle vous vous levez le matin ?</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>[Article DVP] Introduction a SubSonic</title>
		<link>https://blog.developpez.com/philippe/p7512/net/article_dvp_introduction_a_subsonic</link>
		<comments>https://blog.developpez.com/philippe/p7512/net/article_dvp_introduction_a_subsonic#comments</comments>
		<pubDate>Wed, 22 Apr 2009 07:18:00 +0000</pubDate>
		<dc:creator><![CDATA[Philippe Vialatte]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aujourd&#8217;hui, jour de sortie d&#8217;article Apres pas mal de transpiration (premières lignes écrites en Décembre), voila un tutoriel sur l&#8217;utilisation de base de SubSonic (SubSonic, c&#8217;est bon, mangez-en ) L&#8217;article est présent ici : http://philippe.developpez.com/articles/Subsonic/ Le bon coté,  c&#8217;est que maintenant que l&#8217;article est publie, je vais pouvoir parler un peu plus de SubSonic sur ce blog (avant, je n&#8217;avais pas de référence en français a fournir ) Maintenant, allez télécharger SubSonic, et commencez a [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Aujourd&rsquo;hui, jour de sortie d&rsquo;article <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
<p>Apres pas mal de transpiration (premières lignes écrites en Décembre), voila un tutoriel sur l&rsquo;utilisation de base de SubSonic (SubSonic, c&rsquo;est bon, mangez-en <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> )</p>
<p>L&rsquo;article est présent ici :</p>
<p><a title="http://philippe.developpez.com/articles/Subsonic/" href="http://philippe.developpez.com/articles/Subsonic/">http://philippe.developpez.com/articles/Subsonic/</a></p>
<p>Le bon coté,  c&rsquo;est que maintenant que l&rsquo;article est publie, je vais pouvoir parler un peu plus de SubSonic sur ce blog (avant, je n&rsquo;avais pas de référence en français a fournir <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /> )</p>
<p>Maintenant, allez télécharger SubSonic, et commencez a travailler avec une DAL propre et facile a utiliser en moins de temps qu&rsquo;il ne vous en a fallu pour lire ce post&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SubSonic] Utiliser l’objet InlineQuery</title>
		<link>https://blog.developpez.com/philippe/p7544/net/subsonic_inlinequery</link>
		<comments>https://blog.developpez.com/philippe/p7544/net/subsonic_inlinequery#comments</comments>
		<pubDate>Mon, 27 Apr 2009 20:23:00 +0000</pubDate>
		<dc:creator><![CDATA[Philippe Vialatte]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;avais complètement oublié de le mentionner dans mon article précédent sur SubSonic, mais, de toutes les nouveautés de SubSonic dans la version 2.1, une des plus utiles quand on en à besoin est l&#8217;objet InlineQuery. En effet, comme je le montrais (et si vous n&#8217;avez pas lu l&#8217;article, allez-y maintenant ), SubSonic peut se révéler très puissant pour travailler avec des opérations de type CRUD, ainsi que pour le mapping des objets de la base [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;avais complètement oublié de le mentionner dans mon article précédent sur SubSonic, mais, de toutes les nouveautés de SubSonic dans la version 2.1, une des plus utiles quand on en à besoin est l&rsquo;objet InlineQuery.</p>
<p>En effet, comme je le montrais (et si vous n&rsquo;avez pas lu l&rsquo;article, <a href="http://philippe.developpez.com/articles/Subsonic">allez-y maintenant</a> <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> ), SubSonic peut se révéler très puissant pour travailler avec des opérations de type CRUD, ainsi que pour le mapping des objets de la base de données avec les objets .net, mais qu&rsquo;en est-il des requêtes &laquo;&nbsp;tordues&nbsp;&raquo; ou &laquo;&nbsp;bizarres&nbsp;&raquo; avec lesquelles on est régulièrement forcé de travailler (et je ne vous parle pas des requêtes dont on hérite avec la maintenance d&rsquo;une application vieille de quelques années :-/.) ?</p>
<p>Est-ce que je ne vais pas avoir aussi vite fait de tout me taper à la main ?</p>
<p>Dans les versions précédentes, on avait grosso modo deux choix :</p>
<ol>
<li>Créer une vue ou une procédure stockée (en fonction de l&rsquo;action), et appeler la vue ou l&rsquo;action à partir de SubSonic</li>
<li>Avoir un moyen annexe pour &laquo;&nbsp;shooter&nbsp;&raquo; des requêtes directement dans la base (oui, un bon vieux select, avec un datareader, des dataset, des connections, t tout le toutim.)</li>
</ol>
<p>Depuis la version 2, on à enfin un nouveau choix, plus &laquo;&nbsp;propre&nbsp;&raquo;, et surtout plus rapide à mettre en ouvre, vous l&rsquo;aurez deviné, l&rsquo;objet InlineQuery.</p>
<p>En terme de code, il suffit de faire :</p>
<div style="border-right: #000000 1px solid; border-top: #000000 1px solid; margin-left: 10pt; border-left: #000000 1px solid; margin-right: 2pt; border-bottom: #000000 1px solid">
<div style="overflow: scroll; white-space: nowrap; background-color: #dcdcdc"><font face=" Consolas"><font size="2"></font><font color="#800000"><span style="background-color: #efefe4">ContactCollection</span><font color="#000000"> </font><font color="#0080c0">contacts</font><font color="#000000"> </font><font color="#000096">=</font><font color="#000000"> </font><font color="#000096">new</font><font color="#000000"> </font><font color="#800000">InlineQuery</font><font color="#000000">()           <br />    </font><font color="#000096">.</font><font color="#0080c0">ExecuteAsCollection</font>&lt;<font color="#800000">ContactCollection</font>&gt;<font color="#000000">(</font><font color="#0000ff">&laquo;&nbsp;SELECT * from Contact Where surname = @surname&nbsp;&raquo;</font><font color="#000000">, </font><font color="#0000ff">&laquo;&nbsp;Vialatte&nbsp;&raquo;</font><font color="#000000">);</font></font></font> </div>
</p></div>
<p>(Ceci est évidemment un exemple simpliste, mais c&rsquo;est pour donner une idée).</p>
<p>Dans l&rsquo;exemple du dessus, le @surname va permettre à SubSonic de créer une requête paramétrée directement. Si on avait voulu ajouter plus de paramètres, la fonction attends un tableau d&rsquo;objets, on peut donc se lâcher ;).</p>
<p>InlineQuery propose aussi des méthodes renvoyant des DataReader, des DataSets, des scalaires (wow, un ExecuteScalar&lt;T&gt; <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> ), et même un ExecuteTypedList, pour renvoyer une liste de T.</p>
<p>Voila, facile, pas cher, que du bonheur <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQLite et SubSonic</title>
		<link>https://blog.developpez.com/philippe/p7647/net/subsonic/sqlite_et_subsonic</link>
		<comments>https://blog.developpez.com/philippe/p7647/net/subsonic/sqlite_et_subsonic#comments</comments>
		<pubDate>Tue, 26 May 2009 13:04:00 +0000</pubDate>
		<dc:creator><![CDATA[Philippe Vialatte]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Suite a une question sur le forum (et pour défendre SubSonic, forcement ), je me suis penché, hier soir, sur l&#8217;utilisation de SQLite avec SubSonic (un problème de jointure, mais ne nous dispersons pas&#8230;) Du coup, je me suis installé SQLite sur ma machine a la maison, téléchargé le provider SQLite pour ADO.NET, et en&#8230;trois minutes, j&#8217;ai ma base en route. Je ne connaissais pas du tout SQLite, mais cette base de données me botte&#8230; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Suite a une question sur le forum (et pour défendre SubSonic, forcement <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /> ), je me suis penché, hier soir, sur l&rsquo;utilisation de <a href="http://www.sqlite.org/">SQLite</a> avec SubSonic (un problème de jointure, mais ne nous dispersons pas&#8230;)</p>
<p>Du coup, je me suis installé SQLite sur ma machine a la maison, téléchargé le provider SQLite pour ADO.NET, et en&#8230;trois minutes, j&rsquo;ai ma base en route.</p>
<p>Je ne connaissais pas du tout SQLite, mais cette base de données me botte&#8230;</p>
<p>Une dll a ajouter au projet web, un fichier db3, et on a une petite base de données relationnelles légère, suffisamment réactive pour des petits volumes, et qui se sauvegarde en copiant le fichier db3&#8230;Que du bonheur, quoi <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
<p> Pour les pré-requis:  <br /> 
<ul>
<li><a href="http://sqlite.phxsoftware.com/">ADO.NET 2.0 SQLite Data Provider</a> </li>
<li><a title="http://subsonicproject.com/" href="http://subsonicproject.com/">Subsonic</a> </li>
<li>&#8230;et c&rsquo;est tout&#8230; </li>
</ul>
<p>Pour une comparaison entre MySQL, PostgreSQL et SQLite, voir ici:</p>
<p><a title="http://www.sqlite.org/speed.html" href="http://www.sqlite.org/speed.html">http://www.sqlite.org/speed.html</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Subsonic 3.0 est disponible !!!</title>
		<link>https://blog.developpez.com/philippe/p7845/net/subsonic/subsonic_3_0_est_disponible</link>
		<comments>https://blog.developpez.com/philippe/p7845/net/subsonic/subsonic_3_0_est_disponible#comments</comments>
		<pubDate>Sat, 04 Jul 2009 20:14:00 +0000</pubDate>
		<dc:creator><![CDATA[Philippe Vialatte]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ca y&#8217;est, enfin !!! Apres de longs mois d&#8217;attente (pour moi), la version 3 de mon outil chouchou sort enfin Au programme de la version 3: un moteur Linq qui permets d&#8217;utiliser Subsonic &#171;&#160;à la&#160;&#187; Linq to Sql (mais avec toutes les table supportées, Oracle, SQLite, et compagnie) un système de templates basés sur les templates T4, ce qui les rends faciles à customiser ou à faire évoluer une tonne de tutoriels (la version précédente [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ca y&rsquo;est, enfin !!!</p>
<p>Apres de longs mois d&rsquo;attente (pour moi), la version 3 de mon outil chouchou sort enfin <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
<p>Au programme de la version 3:</p>
<ul>
<li>un moteur Linq qui permets d&rsquo;utiliser Subsonic &laquo;&nbsp;à la&nbsp;&raquo; Linq to Sql (mais avec toutes les table supportées, Oracle, SQLite, et compagnie)</li>
<li>un système de templates basés sur les templates T4, ce qui les rends faciles à customiser ou à faire évoluer</li>
<li>une tonne de tutoriels (la version précédente en manquait cruellement), disponibles <a href="http://subsonicproject.com/docs">ici</a></li>
<li>un nouveau système de Repository, qui, couplé aux migrations, permets entre autres une approche beaucoup plus &laquo;&nbsp;POCO&nbsp;&raquo;, et même de générer la base de données automatiquement depuis le code !</li>
</ul>
<p>Forcément, cette version nécessite le Framework 3.5, ca tombe bien, mon client vient de passer à Visual Studio 2005 ;).</p>
<p>Le lien pour télécharger la bête est là :</p>
<p><a title="http://subsonicproject.com/Download" href="http://subsonicproject.com/Download">http://subsonicproject.com/Download</a></p>
<p>.et je comptes bien en reparler <img src="https://blog.developpez.com/philippe/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
