<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Commentaires sur : Les Settings en .Net</title>
	<atom:link href="http://grozeille.com/2008/06/08/les-settings-en-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://grozeille.com/2008/06/08/les-settings-en-net/</link>
	<description>Just another Wordpress.com weblog</description>
	<lastBuildDate>Sat, 07 Jan 2012 12:00:31 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Par : Virginia</title>
		<link>http://grozeille.com/2008/06/08/les-settings-en-net/#comment-61</link>
		<dc:creator><![CDATA[Virginia]]></dc:creator>
		<pubDate>Mon, 27 Oct 2008 23:47:20 +0000</pubDate>
		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=60#comment-61</guid>
		<description><![CDATA[Keep up the good work.]]></description>
		<content:encoded><![CDATA[<p>Keep up the good work.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : grozeille</title>
		<link>http://grozeille.com/2008/06/08/les-settings-en-net/#comment-55</link>
		<dc:creator><![CDATA[grozeille]]></dc:creator>
		<pubDate>Wed, 18 Jun 2008 19:29:36 +0000</pubDate>
		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=60#comment-55</guid>
		<description><![CDATA[Très juste, le temps c&#039;est de l&#039;argent :)
Et il est en effet possible d&#039;utiliser une PropertyGrid à l&#039;aide du mécanisme de settings offert par défaut dans .Net.
Ça fonctionne car ce mécanisme est basé sur le principe d&#039;un ensemble de clef+valeur.

Néanmoins, on peut hiérarchiser des groupes de clef+valeur dans un objet plus haut niveau, comme par exemple: ApplicationSettings.UserSettings[&quot;user1&quot;].GridSettings.
On peut alors utiliser son propre mécanisme de sauvegarde (sérialisation XML par exemple).]]></description>
		<content:encoded><![CDATA[<p>Très juste, le temps c&#8217;est de l&#8217;argent <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Et il est en effet possible d&#8217;utiliser une PropertyGrid à l&#8217;aide du mécanisme de settings offert par défaut dans .Net.<br />
Ça fonctionne car ce mécanisme est basé sur le principe d&#8217;un ensemble de clef+valeur.</p>
<p>Néanmoins, on peut hiérarchiser des groupes de clef+valeur dans un objet plus haut niveau, comme par exemple: ApplicationSettings.UserSettings["user1"].GridSettings.<br />
On peut alors utiliser son propre mécanisme de sauvegarde (sérialisation XML par exemple).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : bamboo</title>
		<link>http://grozeille.com/2008/06/08/les-settings-en-net/#comment-54</link>
		<dc:creator><![CDATA[bamboo]]></dc:creator>
		<pubDate>Wed, 18 Jun 2008 16:19:09 +0000</pubDate>
		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=60#comment-54</guid>
		<description><![CDATA[Perso j&#039;utilise la méthode suivante :

1 classe de settings avec typage fort ET qui tape directement sur le .config

genre :
[code language=&#039;csharp&#039;]
public class Toto
{
	#region Routage
	[DescriptionAttribute(&quot;Variables routage&quot;),
	CategoryAttribute(&quot;Masques&quot;),
	DefaultValueAttribute(&quot;C:\\&quot;)]
	public string Routage
	{
	    get { return ConfigurationManager.AppSettings[&quot;Routage&quot;]; }
	    set
	    {
	        ConfigurationManager.AppSettings[&quot;Routage&quot;] = value;
	        Save();
	    }
	}
	#endregion
	
	// Save the settings.
	public void Save()
	{
	    // Get the configuration file.
	    System.Configuration.Configuration configuration =
	      ConfigurationManager.OpenExeConfiguration(
	        ConfigurationUserLevel.None);
	    // Get the public properties of the class.
	    PropertyInfo[] properties = GetType().GetProperties();
	    // Save each property setting.
	    foreach (PropertyInfo property in properties)
	    {
	        // Save if not an array type.
	        if (!property.PropertyType.IsArray)
	        {
	            // Remove the setting if it exists.
	            if (configuration.AppSettings.Settings[property.Name] != null)
	            {
	                configuration.AppSettings.Settings.Remove(property.Name);
	            }
	            // Add the setting.
	            configuration.AppSettings.Settings.Add(
	              property.Name,
	              property.GetValue(this, null).ToString());
	        }
	    }
	    // Save the configuration settings.
	    configuration.Save(ConfigurationSaveMode.Modified);
	    // Force a reload of the whole section.
	    ConfigurationManager.RefreshSection(&quot;appSettings&quot;);
	}
}
[/code]

(oui il n&#039;y a que 32 secondes de réflexion pour un truc aussi moche)

Inconvénient : c&#039;est pas très joli (la méthode Save() est à saupoudrer selon les goûts)
Avantage : implémentation supeeeer rapide, et on peut faire un joli property grid en 4 secondes et demi pour les settings de l&#039;appli. (oui c&#039;est la méthode &quot;je suis en SSII le temps c&#039;est des dollars&quot;)

Le programmeur malin verra vite qu&#039;on peut aussi gagner du temps pour aller plus tôt boire l&#039;apéro. C&#039;est pas négligeable.]]></description>
		<content:encoded><![CDATA[<p>Perso j&#8217;utilise la méthode suivante :</p>
<p>1 classe de settings avec typage fort ET qui tape directement sur le .config</p>
<p>genre :</p>
<pre class="brush: csharp;">
public class Toto
{
	#region Routage
	[DescriptionAttribute("Variables routage"),
	CategoryAttribute("Masques"),
	DefaultValueAttribute("C:\\")]
	public string Routage
	{
	    get { return ConfigurationManager.AppSettings["Routage"]; }
	    set
	    {
	        ConfigurationManager.AppSettings["Routage"] = value;
	        Save();
	    }
	}
	#endregion
	
	// Save the settings.
	public void Save()
	{
	    // Get the configuration file.
	    System.Configuration.Configuration configuration =
	      ConfigurationManager.OpenExeConfiguration(
	        ConfigurationUserLevel.None);
	    // Get the public properties of the class.
	    PropertyInfo[] properties = GetType().GetProperties();
	    // Save each property setting.
	    foreach (PropertyInfo property in properties)
	    {
	        // Save if not an array type.
	        if (!property.PropertyType.IsArray)
	        {
	            // Remove the setting if it exists.
	            if (configuration.AppSettings.Settings[property.Name] != null)
	            {
	                configuration.AppSettings.Settings.Remove(property.Name);
	            }
	            // Add the setting.
	            configuration.AppSettings.Settings.Add(
	              property.Name,
	              property.GetValue(this, null).ToString());
	        }
	    }
	    // Save the configuration settings.
	    configuration.Save(ConfigurationSaveMode.Modified);
	    // Force a reload of the whole section.
	    ConfigurationManager.RefreshSection("appSettings");
	}
}
</pre>
<p>(oui il n&#8217;y a que 32 secondes de réflexion pour un truc aussi moche)</p>
<p>Inconvénient : c&#8217;est pas très joli (la méthode Save() est à saupoudrer selon les goûts)<br />
Avantage : implémentation supeeeer rapide, et on peut faire un joli property grid en 4 secondes et demi pour les settings de l&#8217;appli. (oui c&#8217;est la méthode &#8220;je suis en SSII le temps c&#8217;est des dollars&#8221;)</p>
<p>Le programmeur malin verra vite qu&#8217;on peut aussi gagner du temps pour aller plus tôt boire l&#8217;apéro. C&#8217;est pas négligeable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : grozeille</title>
		<link>http://grozeille.com/2008/06/08/les-settings-en-net/#comment-53</link>
		<dc:creator><![CDATA[grozeille]]></dc:creator>
		<pubDate>Sun, 08 Jun 2008 21:28:03 +0000</pubDate>
		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=60#comment-53</guid>
		<description><![CDATA[J&#039;en profite pour énoncer une de tes idées: si l&#039;ont veut pas se fatiguer à mapper sa classe avec le modèle XML, on peut générer la classe C# avec &lt;code&gt;xsd.exe&lt;/code&gt;. Et si on souhaite ajouter des méthodes comme &lt;code&gt;GetProfileByUser()&lt;/code&gt; on peut judicieusement utiliser une classe &lt;code&gt;partial&lt;/code&gt;.
Merci de ton idée, car je n&#039;y pense jamais :)]]></description>
		<content:encoded><![CDATA[<p>J&#8217;en profite pour énoncer une de tes idées: si l&#8217;ont veut pas se fatiguer à mapper sa classe avec le modèle XML, on peut générer la classe C# avec <code>xsd.exe</code>. Et si on souhaite ajouter des méthodes comme <code>GetProfileByUser()</code> on peut judicieusement utiliser une classe <code>partial</code>.<br />
Merci de ton idée, car je n&#8217;y pense jamais <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Romain Verdier</title>
		<link>http://grozeille.com/2008/06/08/les-settings-en-net/#comment-52</link>
		<dc:creator><![CDATA[Romain Verdier]]></dc:creator>
		<pubDate>Sun, 08 Jun 2008 20:19:53 +0000</pubDate>
		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=60#comment-52</guid>
		<description><![CDATA[Bon résumé des différentes possibilités, et paragraphes très  intéressants sur Spring.

Je suis assez fan de la dernière solution, qui a pour avantage de permettre au code client de manipuler les settings comme un graphe d&#039;objets quelconque et de bénéficier ainsi du typage fort. 

Le modèle qui est directement serializable peut également encapsuler un certain nombre de traitements relatifs à la configuration de l&#039;application. Par exemple, si l&#039;objet représente les settings de plusieurs utilisateurs, on peut y imaginer une méthode &lt;code&gt;GetProfileByUser(string userName)&lt;/code&gt;, ou bien &lt;code&gt;CreateNewProfile(User user)&lt;/code&gt;, etc.]]></description>
		<content:encoded><![CDATA[<p>Bon résumé des différentes possibilités, et paragraphes très  intéressants sur Spring.</p>
<p>Je suis assez fan de la dernière solution, qui a pour avantage de permettre au code client de manipuler les settings comme un graphe d&#8217;objets quelconque et de bénéficier ainsi du typage fort. </p>
<p>Le modèle qui est directement serializable peut également encapsuler un certain nombre de traitements relatifs à la configuration de l&#8217;application. Par exemple, si l&#8217;objet représente les settings de plusieurs utilisateurs, on peut y imaginer une méthode <code>GetProfileByUser(string userName)</code>, ou bien <code>CreateNewProfile(User user)</code>, etc.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

