<?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/"
	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>The World is mine &#187; WPF</title>
	<atom:link href="http://grozeille.com/tag/wpf/feed/" rel="self" type="application/rss+xml" />
	<link>http://grozeille.com</link>
	<description>Just another Wordpress.com weblog</description>
	<lastBuildDate>Sat, 07 Jan 2012 12:00:31 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='grozeille.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The World is mine &#187; WPF</title>
		<link>http://grozeille.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://grozeille.com/osd.xml" title="The World is mine" />
	<atom:link rel='hub' href='http://grozeille.com/?pushpress=hub'/>
		<item>
		<title>Episode 7 : Mathias découvre Unity+WPF+MVVM aux Techdays 2010</title>
		<link>http://grozeille.com/2010/11/25/episode-7-mathias-decouvre-unitywpfmvvm-aux-techdays-2010/</link>
		<comments>http://grozeille.com/2010/11/25/episode-7-mathias-decouvre-unitywpfmvvm-aux-techdays-2010/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 21:07:07 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[DotNetServer]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[IOC]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[mvvm]]></category>
		<category><![CDATA[rcp]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://grozeille.com/?p=511</guid>
		<description><![CDATA[Je vous ai parlé de ma découverte de .Net dans l&#8217;épisode 6. J&#8217;ai constaté un gros contraste avec Java: j&#8217;avais l&#8217;impression que Java était compliqué (EJB et tout ça) et que .Net était simple. Cette simplicité n&#8217;est pas toujours positive, on peut même dire que Microsoft est &#8220;maudit&#8221; par ce fléau: rester attractif pour les développeurs débutants. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=511&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Je vous ai parlé de ma découverte de .Net dans l&#8217;<a href="http://grozeille.com/2010/11/13/episode-6-mathias-decouvre-net/">épisode 6</a>.<br />
J&#8217;ai constaté un gros contraste avec Java: j&#8217;avais l&#8217;impression que Java était compliqué (EJB et tout ça) et que .Net était simple.</p>
<p>Cette simplicité n&#8217;est pas toujours positive, on peut même dire que Microsoft est &#8220;maudit&#8221; par ce fléau: rester attractif pour les développeurs débutants.</p>
<p>En général, cela donne des frameworks &#8220;sales&#8221; avec un fort couplage du code métier avec les interfaces, impossible à tester unitairement bien sûr.</p>
<p>Pour pouvoir découpler tout cela, on distingue 3 couches:</p>
<ul>
<li>L&#8217;interface, appelée &#8220;view&#8221; ou &#8220;presenter&#8221;, c&#8217;est le moyen d&#8217;afficher l&#8217;information</li>
<li>La logique métier, appelée &#8220;model&#8221;, c&#8217;est ce que l&#8217;on va pouvoir tester à l&#8217;aide de tests unitaires</li>
<li>Les actions ou commandes, qui représente une action de l&#8217;interface par l&#8217;utilisateur qui va déclencher un traitement</li>
</ul>
<p>Mais quand on sépare les responsabilités en plusieurs objets, on se retrouve avec un nouveau problème : comment coupler les <span style="text-decoration:underline;">vues</span>, <span style="text-decoration:underline;">contrôleurs</span>, etc. ? Comment &#8220;broker&#8221; les <span style="text-decoration:underline;">actions </span>?</p>
<p>Il y a une solution à cela: l&#8217;<a href="http://en.wikipedia.org/wiki/Inversion_of_control">IOC</a>. On peut dire aussi que le<a href="http://msdn.microsoft.com/en-us/library/ms752347.aspx"> Databinding</a> en est une autre.<br />
Si Microsoft avait un train de retard sur les Framework IOC, ils connaissaient néanmoins déjà le problème depuis un moment, puisqu&#8217;ils l&#8217;avaient en partie résolu dans <a href="http://msdn.microsoft.com/en-us/library/ff648747.aspx">CAB</a>.<br />
C’est donc sans surprise que Microsoft nous livre son framework d’IOC &#8220;officiel&#8221; basé sur l’existant de CAB : <a href="http://unity.codeplex.com/">Unity</a>.</p>
<p>A la sortie d&#8217;Unity, j&#8217;étais déjà tellement convaincu par Spring.net que je n&#8217;ai jamais adopté le framework de Microsoft. De plus, les alternatives OpenSources étaient  bien présentes: <a href="http://www.castleproject.org/container/">Castle Windsor</a>, <a href="http://ninject.org/">Ninject</a>, <a href="http://code.google.com/p/autofac/">Autofac</a>, etc.</p>
<p>A noter que les framework tel que CAB/RCP rendent vos clients lourds &#8220;extensibles&#8221;, ce qui veut dire qu&#8217;un plugin va pouvoir greffer de &#8220;vues&#8221; dans l&#8217;interface, et s&#8217;abonner aux &#8220;commandes&#8221;: chose tout à fait faisable avec de l&#8217;IOC.</p>
<p>Mais les frameworks IOC ne font pas tout, et ne suffisent pas à fournir une véritable architecture MVC pour client lourd, même s&#8217;ils peuvent nous y aider (<a href="http://grozeille.com/2010/11/13/episode-6-mathias-decouvre-net/">voir mon poste précédent</a>).</p>
<p>Pour résoudre le fléau du couplage fort entre l&#8217;interface et le code métier, Microsoft a sortie quelque chose de révolutionnaire: WPF et Silverlight!<br />
Avec la venue de WPF et Silverlight, la communauté .Net OpenSource a commencé à se pencher alors sur le problème du MVC pour les applications lourdes. Divers frameworks apparaissent alors, comme Prism: <a href="http://compositewpf.codeplex.com/">http://compositewpf.codeplex.com/</a></p>
<p style="text-align:center;"><a href="http://grozeille.files.wordpress.com/2010/11/compositewpfapp1.png"><img class="aligncenter" title="CompositeWpfApp1" src="http://grozeille.files.wordpress.com/2010/11/compositewpfapp1.png?w=300&#038;h=221" alt="" width="300" height="221" /></a></p>
<p><a href="http://grozeille.files.wordpress.com/2010/11/compositewpfapp1.png"></a></p>
<p>Mais le MVC, comme on le connait dans le monde Web, ne s&#8217;applique pas bien aux clients lourds, surtout si on veut exploiter le Databinding et les événements.</p>
<p>Très franchement, je ne me suis jamais vraiment passionné pour WPF/Prism/etc. mais je voyais bien que quelque chose de gros était en train de venir&#8230;<br />
J&#8217;ai ensuite assisté aux <a href="http://www.microsoft.com/france/vision/mstechdays10/">Techdays 2010</a> et j&#8217;en ai profité pour me mettre à jours sur le sujet.<br />
Les sessions étaient d’ailleurs très accès sur Silverlight/WPF mais aussi sur le nouveau modèle <a href="http://en.wikipedia.org/wiki/Model_View_ViewModel">MVVM</a> (Model-View-ViewModel), et avec une bonne dose d’Unity bien sûr…<br />
J’ai alors été très agréablement surpris par ces présentations, surtout celle qui montre comment supprimer tout le « code behind » des interfaces XAML avec des ViewModel et des Commands.</p>
<p><strong>Pour mieux comprendre de quoi je parle, aller voir vite le <a href="http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=5740b16f-770a-459c-9a93-4a321f4e8059">screencast ici</a>!!!</strong></p>
<p>Bref, je ne sais pas si vous me suivez, mais l’IOC, le RCP, le MVC, la gestion de plugins, tout ça c’est intimement lié !</p>
<p>Petit à petit, .Net rattrape le retard vis-à-vis d’Eclipse RCP !<br />
On peut même dire que .Net a pris de l&#8217;avance avec Silverlight/WPF, puisque la rédaction des interfaces en XML n&#8217;est qu&#8217;au stade de proposition pour Eclipse 4: <a href="http://wiki.eclipse.org/images/a/ab/XWT.pdf">http://wiki.eclipse.org/images/a/ab/XWT.pdf</a></p>
<br /> Tagged: <a href='http://grozeille.com/tag/net/'>.Net</a>, <a href='http://grozeille.com/tag/eclipse/'>eclipse</a>, <a href='http://grozeille.com/tag/ioc/'>IOC</a>, <a href='http://grozeille.com/tag/mvc/'>mvc</a>, <a href='http://grozeille.com/tag/mvvm/'>mvvm</a>, <a href='http://grozeille.com/tag/rcp/'>rcp</a>, <a href='http://grozeille.com/tag/unity/'>unity</a>, <a href='http://grozeille.com/tag/wpf/'>WPF</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/511/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=511&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2010/11/25/episode-7-mathias-decouvre-unitywpfmvvm-aux-techdays-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>

		<media:content url="http://grozeille.files.wordpress.com/2010/11/compositewpfapp1.png?w=300" medium="image">
			<media:title type="html">CompositeWpfApp1</media:title>
		</media:content>
	</item>
		<item>
		<title>Winforms sous Linux</title>
		<link>http://grozeille.com/2008/05/14/winforms-sous-linux/</link>
		<comments>http://grozeille.com/2008/05/14/winforms-sous-linux/#comments</comments>
		<pubDate>Wed, 14 May 2008 21:50:20 +0000</pubDate>
		<dc:creator>Mathias Kluba</dc:creator>
				<category><![CDATA[Blabla]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[GTK]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://grozeille.wordpress.com/?p=57</guid>
		<description><![CDATA[Après 4 ans de développement, la communauté Mono est enfin parvenu à l&#8217;implémentation complète des Winforms : http://tirania.org/blog/archive/2008/May-13.html On peux se demander &#8220;oui, mais pourquoi faire?&#8221; et je ne trouve pas de réponse à la question. En effet, il arrive souvent qu&#8217;une application .Net possède du Legacy et donc des dépendances COM ou P/Invoke. Dans [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=57&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Après 4 ans de développement, la communauté Mono est enfin parvenu à l&#8217;implémentation complète des Winforms : <a href="http://tirania.org/blog/archive/2008/May-13.html">http://tirania.org/blog/archive/2008/May-13.html</a></p>
<p>On peux se demander &#8220;oui, mais pourquoi faire?&#8221; et je ne trouve pas de réponse à la question. En effet, il arrive souvent qu&#8217;une application .Net possède du Legacy et donc des dépendances COM ou P/Invoke. Dans ce cas, on ne peut pas la migrer (pour tester si une migration est possible: <a href="http://www.mono-project.com/Moma">http://www.mono-project.com/Moma</a>)</p>
<p>Mais comme je suis exigent en terme d&#8217;interface, je n&#8217;aime pas avoir une application &#8220;alien&#8221; qui ne ressemble pas à mon environnement Linux (GTK/QT). Certes, il est prévu d&#8217;avoir un meilleur support du moteur de thème lors du prochain <a href="http://en.wikipedia.org/wiki/Google_Summer_of_Code">GSoC</a>, donc <em>wait and see</em>.</p>
<p>Rappelons que les Winforms sont une sur-couche .Net de l&#8217;API WIN32. Cette dernière n&#8217;existant pas sous Linux et MacOS, j&#8217;en profite alors pour féliciter les équipes de Mono pour leur implémentation &#8220;from scratch&#8221;.</p>
<p>D&#8217;un autre coté, l&#8217;implémentation WPF chez Mono avance plutôt vite. D&#8217;ailleurs, la première release de <a href="http://tirania.org/blog/archive/2008/May-13-1.html">Moonlight vient de sortir</a>. Il n&#8217;y a pas de dépendance WIN32 dans ce cas, et je vois plus l&#8217;avenir des applications .Net dans ce sens. Mais l&#8217;approche WPF est d&#8217;avoir un thème propre à l&#8217;application, comme c&#8217;est le cas pour les sites Web, on obtient la même interface sous Linux et Windows (et MacOS). Mais finalement je trouve que ces interfaces ne s&#8217;intègrent à aucun des 3 environnements.</p>
<p><span id="more-57"></span>J&#8217;avais déjà rédigé un billet sur la guerre entre les technologies de &#8220;présentation&#8221; dans le domaine du Web (Ajax/Flash/etc.). Je ne vous l&#8217;apprend pas, le monde &#8220;Desktop&#8221; et &#8220;Web&#8221; convergent. L&#8217;idée est plutôt simple: aujourd&#8217;hui on doit exécuter un OS qui héberge des applications &#8220;Desktop&#8221;, et on doit exécuter un navigateur pour les applications Web. On obtient une certaines confusion entre la barre des tâches pour les application et les onglets pour les sites Web. Tout ceci est beaucoup mieux expliqué <a href="http://labs.mozilla.com/2007/10/prism/">sur ce blog</a>.</p>
<p>Mais de plus en plus, le navigateur ne sert qu&#8217;à exécuter un plugin (Silverlight/Flash/Java) qui lui charge l&#8217;application.<br />
L&#8217;objectif est de lancer une application Web comme une application &#8220;Dekstop&#8221;, en exécutant le dis plugin en <em>standalone</em>, ou de passer par un &#8220;mini navigateur&#8221; (qui ne sert que pour le rendu HTML+Ajax, sans navigation etc). C&#8217;est en tout cas ce que propose <a href="http://www.adobe.com/products/air/">Adobe Air</a> ou <a href="http://wiki.mozilla.org/Prism">Mozilla Prism</a>.</p>
<p>Il va donc être difficile de distinguer une application &#8220;Desktop&#8221; ou &#8220;Web&#8221;. Ceci me fait un peu penser aux Widgets du <a href="http://upload.wikimedia.org/wikipedia/en/7/72/Leopard_Dashboard_BIG.png">Dashboard</a> sous MacOS (ou autre plagia).</p>
<p>Au même titre que le Web se rapproche du Bureau, les applications &#8220;lourdes&#8221; copient les techniques du Web question apparence. Il y a des tentatives d&#8217;utilisation de <a href="http://blog.developpez.com/index.php?blog=119&amp;title=moteur_css_pour_swing_et_swt_1">CSS en Swing/SWT</a>, mais l&#8217;exemple le plus flagrant est la description de l&#8217;interface à l&#8217;aide de XML comme dans <a href="http://en.wikipedia.org/wiki/XAML">XAML</a>.</p>
<p>On obtient ainsi des applications &#8220;Desktop&#8221; ne copiant pas du tout le style standard de l&#8217;OS, mais <a href="http://music.aol.com/help/syndication/desktop-widgets?promoid=BTLNP">ayant son propre thème</a> telle un site Web.</p>
<p>Le résultat peut s&#8217;avérer très jolie, très ergonomique, mais très &#8220;inconsistant&#8221; avec les autres applications. Pourquoi devrais-je apprendre une nouvelle interface? Pourquoi ne pas utilise un standard? Pourquoi ne pas me laisser choisir mon thème dans l&#8217;OS plutôt que de me l&#8217;imposer pour une application donnée?</p>
<p>Personnellement, je ne suis pas fan de toutes ces interfaces différentes, <a href="http://arstechnica.com/articles/culture/microsoft-learn-from-apple-II.ars/4">et je ne suis pas le seul</a>.<br />
Pour revenir sur l&#8217;OS Linux, un grand effort est fourni pour rendre les interfaces homogènes. On peut par exemple citer le <a href="http://en.wikipedia.org/wiki/Portland_Project">projet Portland</a> allant dans cette direction. Je peux alors apprécier ces efforts puisqu&#8217;il m&#8217;est devenu difficile de distinguer une application QT dans mon environnement GTK (essayez <a href="http://www.skype.com/download/skype/linux/">Skype sous Linux </a>pour vous en convaincre).</p>
<p>Je voulais aussi citer Redhat comme, à mon humble avis, les pionniers en matières d&#8217;homogénéisation avec leur thème <a href="http://en.wikipedia.org/wiki/Bluecurve">Bluecurve</a> identique sous KDE est Gnome. D&#8217;autre projets ont suivis dans le même genre comme <a href="http://tango.freedesktop.org/Tango_Desktop_Project">Tango</a>.</p>
<p>Enfin, les interfaces graphiques sont en pleines évolutions ces derniers temps, avec l&#8217;exploitation des cartes graphiques récentes, offrant des &#8220;<a href="http://compiz.org/Home/Screenshots">eye candy</a>&#8221; très alléchants. Le monde GTK est en <a href="http://arstechnica.com/articles/culture/reinventing-gtk.ars">pleine réflexion</a> pour les futures versions, et les thèmes <a href="http://www.cimitan.com/blog/2007/12/12/gtk-rgba-transparent-widgets-with-the-murrine-engine/">supportent de plus en plus d&#8217;effet</a>.<br />
Je préfère de loin cette approche ou l&#8217;OS propose un système de thème avancé (avec des techniques <a href="http://ubuntuforums.org/showthread.php?t=377397">proches du CSS</a>) et l&#8217;applique à toutes les applications, rendant le tout homogène. Néanmoins, je distinguerai toujours les applications type &#8220;Widget&#8221; qui ressemblent plus à de &#8220;mini-site&#8221; ou &#8220;application Web&#8221; qui elle ont une apparence propre à elles.</p>
<p>Comment seront les interfaces des OS du futures? Va-t-on vers un gros bordel graphique, ou une homogénéisation? WPF va-t-il percer sous Linux? Quels vont être les applications Winforms qui vont être migré sous Linux?</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/grozeille.wordpress.com/57/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/grozeille.wordpress.com/57/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grozeille.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grozeille.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grozeille.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grozeille.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grozeille.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grozeille.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grozeille.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grozeille.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grozeille.com&amp;blog=173450&amp;post=57&amp;subd=grozeille&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grozeille.com/2008/05/14/winforms-sous-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fcf307a3a2899d162cabfd41241f17b9?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">grozeille</media:title>
		</media:content>
	</item>
	</channel>
</rss>
