<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>M-V-VM Reference Application</title><link>http://mvvmref.codeplex.com/project/feeds/rss</link><description>Community created reference application for M-V-VM frameworks to use for demonstration purposes, similar in concept to Pet Shop for web frameworks.</description><item><title>Source code checked in, #70298</title><link>http://mvvmref.codeplex.com/SourceControl/changeset/changes/70298</link><description>Upgrade&amp;#58; New Version of LabDefaultTemplate.xaml. To upgrade your build definitions, please visit the following link&amp;#58; http&amp;#58;&amp;#47;&amp;#47;go.microsoft.com&amp;#47;fwlink&amp;#47;&amp;#63;LinkId&amp;#61;254563</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 21:36:45 GMT</pubDate><guid isPermaLink="false">Source code checked in, #70298 20121001093645P</guid></item><item><title>Source code checked in, #70297</title><link>http://mvvmref.codeplex.com/SourceControl/changeset/changes/70297</link><description>Checked in by server upgrade</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 21:31:58 GMT</pubDate><guid isPermaLink="false">Source code checked in, #70297 20121001093158P</guid></item><item><title>Source code checked in, #48188</title><link>http://mvvmref.codeplex.com/SourceControl/changeset/changes/48188</link><description>Checked in by server upgrade</description><author>_TFSSERVICE</author><pubDate>Thu, 08 Jul 2010 20:15:13 GMT</pubDate><guid isPermaLink="false">Source code checked in, #48188 20100708081513P</guid></item><item><title>New Post: What should we build?</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=53904</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I like the idea of the SCRUM management tool.&lt;/p&gt;
&lt;p&gt;Another&amp;nbsp;Idea: A personal health record client based on either MS HealthVault or Google Health.&lt;/p&gt;&lt;/div&gt;</description><author>emi_oasis</author><pubDate>Mon, 21 Sep 2009 04:54:56 GMT</pubDate><guid isPermaLink="false">New Post: What should we build? 20090921045456A</guid></item><item><title>New Post: What should we build?</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=53904</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;Things seem kinda quiet here.&lt;/p&gt;
&lt;p&gt;*tumbleweed*&lt;/p&gt;
&lt;p&gt;I just did a writeup on a blog editor sample app: &lt;a title="MVVM and Linq to SQL the easy way" href="http://adventuresinsoftware.com/blog/?p=413"&gt;MVVM and Linq to SQL the easy way&lt;/a&gt;. It's in the spirit of Windows Live Writer. Maybe this would be a better reference application than a recipe DB, because we can use standard blog APIs for the client/server demonstration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blogger API&lt;/li&gt;
&lt;li&gt;Wordpress API&lt;/li&gt;
&lt;li&gt;MetaWeblog API&lt;/li&gt;
&lt;li&gt;Atom Publishing Protocol&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since anyone can set up a blog, we don't need to fake out the C/S communication. Thoughts?&lt;/p&gt;&lt;/div&gt;</description><author>MichaelLPerry1971</author><pubDate>Sun, 09 Aug 2009 23:47:37 GMT</pubDate><guid isPermaLink="false">New Post: What should we build? 20090809114737P</guid></item><item><title>New Post: Online Recipe Database Webservice</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=63682</link><description>&lt;div style="line-height: normal;"&gt;&lt;div&gt;Just found this in a search...&lt;a href="http://www.bigoven.com/recipe-api-interest.aspx"&gt;http://www.bigoven.com/recipe-api-interest.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I submitted their form to find out more info. Hopefully something pops up soon.&lt;/div&gt;&lt;/div&gt;</description><author>mbrownbh</author><pubDate>Mon, 27 Jul 2009 21:20:20 GMT</pubDate><guid isPermaLink="false">New Post: Online Recipe Database Webservice 20090727092020P</guid></item><item><title>New Post: Home Kitchen Management Use Cases</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=59066</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I realize that we are building a reference application, and many of these use cases will be pared back or dropped altogether. But here's a list of use cases that (I think) covers the whole problem space:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enter a recipe&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:Symbol"&gt;&lt;/span&gt;Import a recipe from a file/URL (REML, MealMaster, etc.) 
&lt;ul&gt;
&lt;li&gt;Search the web for a recipe&lt;/li&gt;
&lt;li&gt;Import from email&lt;/li&gt;
&lt;li&gt;Load file&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Export a recipe to a file/service 
&lt;ul&gt;
&lt;li&gt;Send email&lt;/li&gt;
&lt;li&gt;Post to a forum&lt;/li&gt;
&lt;li&gt;Save to a file&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Display a recipe 
&lt;ul&gt;
&lt;li&gt;Scale ingredients&lt;/li&gt;
&lt;li&gt;Display nutrition information&lt;/li&gt;
&lt;li&gt;Preview&lt;/li&gt;
&lt;li&gt;Print&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Take pantry inventory&lt;/li&gt;
&lt;li&gt;Search for a recipe 
&lt;ul&gt;
&lt;li&gt;By inventory&lt;/li&gt;
&lt;li&gt;By ingredient&lt;/li&gt;
&lt;li&gt;By name&lt;/li&gt;
&lt;li&gt;Cross reference results with inventory&lt;/li&gt;
&lt;li&gt;Show nutrition information in results&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Create a meal plan&lt;/li&gt;
&lt;li&gt;Generate a shopping list&lt;/li&gt;
&lt;li&gt;Update inventory from shopping list (after shopping) 
&lt;ul&gt;
&lt;li&gt;Check items on shopping list that were purchased&lt;/li&gt;
&lt;li&gt;Add items not on shopping list&lt;/li&gt;
&lt;li&gt;Edit items purchased in different quantities&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Update inventory from recipe (after cooking)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</description><author>MichaelLPerry1971</author><pubDate>Wed, 10 Jun 2009 13:36:09 GMT</pubDate><guid isPermaLink="false">New Post: Home Kitchen Management Use Cases 20090610013609P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;&lt;strong&gt;[mbrownbh] &lt;/strong&gt;I've never seen an instance where PM and MVP are used together.&lt;/p&gt;
&lt;p&gt;For the record - the PM/MVP&amp;nbsp;is not my design :)&amp;nbsp; It was written by the Prism P&amp;amp;P Team.&amp;nbsp; Back when I was just learning the CompositeWPF Prism I downloaded &lt;a href="http://compositewpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=20206"&gt;PrismV2 - Drop 7&lt;/a&gt; (specifically the QuickStarts \ Visual composition \ TopDown \ TopDownUIComposition solution) and adopted the patterns I've been describing.&amp;nbsp; I built entire frameworks around it (multiple applications) and since it met my purposes I never reviewed future samples (I assumed they would be similiar and I didn't have the time).&lt;/p&gt;
&lt;p&gt;Below is the EmployeesDetailPresenter from their sample:&lt;/p&gt;
&lt;p&gt;//===================================================================================&lt;br&gt;// Microsoft patterns &amp;amp; practices&lt;br&gt;// Composite Application Guidance for Windows Presentation Foundation and Silverlight&lt;br&gt;//===================================================================================&lt;br&gt;// Copyright (c) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;// THIS CODE AND INFORMATION IS PROVIDED &amp;quot;AS IS&amp;quot; WITHOUT WARRANTY&lt;br&gt;// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT&lt;br&gt;// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND&lt;br&gt;// FITNESS FOR A PARTICULAR PURPOSE.&lt;br&gt;//===================================================================================&lt;br&gt;// The example companies, organizations, products, domain names,&lt;br&gt;// e-mail addresses, logos, people, places, and events depicted&lt;br&gt;// herein are fictitious.&amp;nbsp; No association with any real company,&lt;br&gt;// organization, product, domain name, email address, logo, person,&lt;br&gt;// places, or events is intended or should be inferred.&lt;br&gt;//===================================================================================&lt;br&gt;using UIComposition.Modules.Employee.PresentationModels;&lt;/p&gt;
&lt;p&gt;namespace UIComposition.Modules.Employee&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class EmployeesDetailsPresenter : IEmployeesDetailsPresenter&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public EmployeesDetailsPresenter(IEmployeesDetailsView view)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.View = view;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IEmployeesDetailsView View { get; set; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void SetSelectedEmployee(BusinessEntities.Employee employee)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EmployeesDetailsPresentationModel model = new EmployeesDetailsPresentationModel();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; model.SelectedEmployee = employee;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.View.Model = model;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</description><author>Billkrat</author><pubDate>Tue, 26 May 2009 23:27:44 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090526112744P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;&lt;strong&gt;[mbrownbh]&lt;/strong&gt; Correct me if I'm wrong in my understanding. But it appears that you have a global presentation model that is shared across views so the views can share state with each other. There is another pattern that would remove this complexity for you called Event Broker (the Prism guidance has a section discussing it and an implementation within the CAL). The idea is that when an event is fired, the broker notifies all interested parties of said event.&lt;br&gt;&amp;nbsp;&lt;br&gt;Agreed.&amp;nbsp; Excerpt from first message follows:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;For example my presenter base will subscribe to the default model's OnPropertyChanged event and call a virtual method so developers can either use the &lt;strong&gt;EventAggregator&lt;/strong&gt; or override this method to be notified on data changes.&amp;nbsp; &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I'd like to add that the EventAggregator is a significant part of our infrastructure.&amp;nbsp; Primarily because the EventArgument can contain information only available in the publishing presenter and , unlike parameters, can grow without affecting existing business logic (Microsoft's spin on the &amp;quot;Observer Pattern&amp;quot; - the Event Pattern - is brilliant).&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;strong&gt;[mbrownbh]&lt;/strong&gt; Usually, when we talk about Presentation Model (or View Model) there is a 1:1 ratio between the Presentation Model and the View. Josh Smith has an excellent article he wrote for MSDN magazine on MVVM (another name for the Presentation Model pattern). I've never seen an instance where PM and MVP are used together. The primary goal of PM is to make the logic driving your UI fully separated from the UI framework itself.&lt;/p&gt;
&lt;p&gt;I'm a Microsoft Crony when it comes to P&amp;amp;P, code and tools.&amp;nbsp; When it comes to Architecture I am a Fowler crony and turn to Microsoft (as I am now) for bleeding edge guidance - I generally don't read other works unless Fowler references them (i.e., Potel paper, &amp;quot;Twisting the Triad&amp;quot;, etc).&amp;nbsp;&amp;nbsp; Why?&amp;nbsp; how many of us have heard that in MVP the view doesn't communicate with the model (and this is the distinction between MVC and MVP)?&amp;nbsp; I suspect this stemed from the fact that Fowler split MVP in 2006 and folks saw Passive MVP to be the rule more than the exception where in fact he clearly states that if databinding is present - it isn't Passive MVP.&amp;nbsp;&amp;nbsp; Anywhos...&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Martin Fowler says the following about the Presentation Model: &lt;a href="http://www.martinfowler.com/eaaDev/PresentationModel.html"&gt;http://www.martinfowler.com/eaaDev/PresentationModel.html&lt;/a&gt;:&lt;br&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Instead it is easier to consider Presentation Model as an abstract of the view that is not dependent on a specific GUI framework. &lt;strong&gt;&lt;span style="text-decoration:underline"&gt;While several views can utilize the same Presentation Model&lt;/span&gt;&lt;/strong&gt;, each view should require only one Presentation Model. In the case of composition a Presentation Model may contain one or many child Presentation Model instances, but each child control will also have only one Presentation Model.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Thus my infrastructure is based on guidance by Fowler, Microsoft P&amp;amp;P and information provided by Dino Esposito and Andrea Saltarello in &amp;quot;Microsoft.NET Architecting Applications for the Enterprise&amp;quot;.&amp;nbsp;&amp;nbsp; As for data I see John Papa as an authoritative source and I have his book on Data-Driven Services with Silverlight 2 (I read his MSDN articles).&amp;nbsp; &lt;br&gt;There is a consistency among all of them - what is lacking is the complete picture using bleeding edge technologies which forces us to think outside of the box while following existing patterns;&amp;nbsp; my position is that Patterns should be used as tools to meet an objective - if the objective is met then they served their purpose.&amp;nbsp; So the question isn't so much - did I do it right; in the spirit of teamwork if you put 10 programmers in different rooms and assign them the same task it will come out 10 different ways and they will all be right (if they meet the requirement).&lt;/p&gt;
&lt;p&gt;Why I rely so heavily on Microsoft P&amp;amp;P is because I don't see what the guru's see; the frameworks ensure my clients are not limited by my architectural knowledge.&amp;nbsp;&amp;nbsp; Sometimes I don't &amp;quot;get it&amp;quot; until it's done (it is very hard to keep up but I'm hanging in there thanks to many patient Microsoft olks like Glenn Block and Chris Taveres).&amp;nbsp; &lt;br&gt;I think I get it - but now all the rules are changing - we have a fat-client sitting inside of a browser and I'm pushing (and selling) the bleeding edge with no published guidance...&lt;/p&gt;
&lt;p&gt;If there is a better way - I'll be introducing it to the team; in the absence of a better way...&lt;/p&gt;&lt;/div&gt;</description><author>Billkrat</author><pubDate>Fri, 22 May 2009 21:47:28 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522094728P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;div&gt;Correct me if I'm wrong in my understanding. But it appears that you have a global presentation model that is shared across views so the views can share state with each other. There is another pattern that would remove this complexity for you called Event Broker (the Prism guidance has a section discussing it and an implementation within the CAL). The idea is that when an event is fired, the broker notifies all interested parties of said event.&lt;/div&gt;

&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Usually, when we talk about Presentation Model (or View Model) there is a 1:1 ratio between the Presentation Model and the View. Josh Smith has an excellent article he wrote for MSDN magazine on MVVM (another name for the Presentation Model pattern). I've never seen an instance where PM and MVP are used together. The primary goal of PM is to make the logic driving your UI fully separated from the UI framework itself. If that is indeed your goal, I'd suggest looking at Josh's article and moving in that direction (if it's not too late to do so).&lt;br&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div&gt;On Fri, May 22, 2009 at 3:31 PM, Billkrat &lt;span dir=ltr&gt;&amp;lt;&lt;a href="mailto:notifications@codeplex.com"&gt;notifications@codeplex.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex"&gt;
&lt;div&gt;
&lt;p&gt;From: Billkrat&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;[mbrownbh] There's no reason for the PM to have complex business logic, that's the reason we have a business logic layer. You're saying that you use a presenter AND a presentation model. what's the dependency order? Does the presenter know about the PM and update it appropriately? I guess it's difficult to fully provide advice and guidance on this without a full picture of the system.&lt;/p&gt;

&lt;p&gt;[mbrownbh] The link you gave earlier, is that the source code for your system?&lt;/p&gt;
&lt;p&gt;It will be the open source repository for the ISO 15926 code; numerous engineering firms around the world have contributed developers to this project.  The &amp;quot;IRingFramework: project is based on Prism and the team has already made the decision to refactor the RDSWIPEditor to utilize this framework after the release.  The focus has been on the services (AdapterReference and ReferenceData RESTful services).  The MappingEditor (within the IRingFramework project) will be the focus for the last week now that the infrastructure is in place.   The UI components have been divided amoung team members and we'll be crunching next week to wrap it up for the News Release at the end of the month.   We try to keep the build intact but since we don't go public until after next week it so it could be in varying states.   The infrastructure and services are intact right now but everything else is conceptual (discussed heavily in developers meetings so we all know what remains to be done when we hit the ground running next week).&lt;/p&gt;

&lt;p&gt;The Presentation Model covers cross cutting concerns and is referenced by all of the views in the main InformationModel module.  Collectively there will probably be no more than 20 properties concerning both the Adapter and Reference Data entities.  It will be a complex search / mapping process on heirachries of data (recursive) where each view's process will be dependent on states set by other views - there is a strong separation so the only thing each view will be able to see is the model (and any events subscribed/published) .    Each Presenter will have the responsibility to respond to events and model changes to perform business logic for it's view requirements.  The shared Presentation Model removes a layer of code for maintaining state since the Presentation Model will always reflect the current state of all of the View's interdependent processing (multiple treeViews and property detail list).   A very complex problem that would have been a nightmare to handle without the power of the CompositeWPF, Unity and P&amp;P patterns.  &lt;/p&gt;

&lt;p&gt;As to the answer to your question in regards to dependency - the following is the wiring up that is done by the PresenterBase, I trust it will answer all of your questions (coupled with the code examples in the first message):&lt;/p&gt;

&lt;p&gt;&lt;br&gt;    public PresenterBase(&lt;br&gt;        IViewBase view,&lt;br&gt;        IPresentationModel model)&lt;br&gt;    {&lt;br&gt;      try&lt;br&gt;      {&lt;br&gt;        ModuleFullName = GetType().FullName;&lt;/p&gt;
&lt;p&gt;        this.View = (TView)view;&lt;/p&gt;
&lt;p&gt;        this.Model = model;&lt;br&gt;        this.View.Model = model;&lt;br&gt;        this.View.DataContext = model;&lt;/p&gt;
&lt;p&gt;        this.Model.PropertyChanged +=&lt;br&gt;            new PropertyChangedEventHandler(ModelPropertyChanged);&lt;br&gt;      }&lt;br&gt;      catch (Exception ex)&lt;br&gt;      {&lt;br&gt;        // Setter Injection doesn't happen until after Construction - lazy instantiation&lt;br&gt;
        // using default Error() class.&lt;br&gt;        Error.SetError(ex, string.Format(&amp;quot;{0}: Could not instantiate PresenterBase {1}{2}&amp;quot;,&lt;br&gt;            ModuleFullName, ex.Message, ex.StackTrace),&lt;br&gt;            Category.Exception, Priority.High);&lt;/p&gt;

&lt;p&gt;      }&lt;br&gt;    }&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Read the &lt;a href="http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188&amp;ANCHOR#Post193349"&gt;full discussion online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add a post to this discussion, reply to this email (&lt;a href="mailto:mvvmref@discussions.codeplex.com?subject=[mvvmref:57188]"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;To start a new discussion for this project, email &lt;a href="mailto:mvvmref@discussions.codeplex.com"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You are receiving this email because you subscribed to this discussion on CodePlex. You can &lt;a href="http://www.codeplex.com/site/discussions/project/unsubscribe/mvvmref"&gt;unsubscribe or change your settings&lt;/a&gt; on codePlex.com.&lt;/p&gt;

&lt;p&gt;Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;br&gt;&lt;/div&gt;</description><author>mbrownbh</author><pubDate>Fri, 22 May 2009 20:17:25 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522081725P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;[mbrownbh] The link you gave earlier, is that the source code for your system?&lt;/p&gt;
&lt;p&gt;It will be the open source repository for the ISO 15926 code; numerous engineering firms around the world have contributed developers&amp;nbsp;to this project.&amp;nbsp; The &amp;quot;IRingFramework&amp;quot; project is based on Prism and the team has already made the decision to&amp;nbsp;refactor the RDSWIPEditor to utilize this framework after the release.&amp;nbsp; The focus has been on the services (AdapterReference and ReferenceData RESTful services).&amp;nbsp; The MappingEditor (within the IRingFramework project) will be the focus for the last week now that the infrastructure is in place.&amp;nbsp;&amp;nbsp; The UI components have been divided amoung team members and we'll be crunching next week to wrap it up for the News Release at the end of the month.&amp;nbsp;&amp;nbsp; We try to keep the build&amp;nbsp;intact but since we don't go&amp;nbsp;public until after next week it&amp;nbsp;could be in varying states.&amp;nbsp;&amp;nbsp;&amp;nbsp;The infrastructure and services are intact&amp;nbsp;right now but everything else is conceptual (discussed heavily in developers meetings so we all know what remains to be done when we hit the ground running next week).&lt;/p&gt;
&lt;p&gt;[mbrownbh] There's no reason for the PM to have complex business logic, that's the reason we have a business logic layer. You're saying that you use a presenter AND a presentation model. what's the dependency order? Does the presenter know about the PM and update it appropriately? I guess it's difficult to fully provide advice and guidance on this without a full picture of the system.&lt;/p&gt;
&lt;p&gt;The Presentation Model covers cross cutting concerns and is referenced by all of the views in the main InformationModel module.&amp;nbsp; Collectively there will probably be no more than 20 properties concerning both the Adapter and Reference Data entities.&amp;nbsp; It will be a complex search / mapping process on heirachries of data (recursive) where each view's process&amp;nbsp;will be dependent on states&amp;nbsp;set by other views -&amp;nbsp;there is a strong separation so the only thing each view's presenter&amp;nbsp;will be able to see is the model, it's view and&amp;nbsp;any events subscribed/published&amp;nbsp;.&amp;nbsp;&amp;nbsp; Each Presenter will have the responsibility to&amp;nbsp;respond to events and model changes to perform business logic for it's view requirements.&amp;nbsp; The shared Presentation Model removes a layer of code for maintaining state since the Presentation Model will always reflect the current state of all of the View's interdependent processing (multiple treeViews and property detail list).&amp;nbsp;&amp;nbsp; A very complex problem that would have been a nightmare to handle without the power of the CompositeWPF, Unity and P&amp;amp;P patterns.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As to the answer to your question in regards to dependency - the following is the wiring up that is done by the PresenterBase, I trust it will answer all of your questions (coupled with the code examples in the first message):&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public PresenterBase(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IViewBase view,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IPresentationModel model)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModuleFullName = GetType().FullName;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.View = (TView)view;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Model = model;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.View.Model = model;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.View.DataContext = model;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.Model.PropertyChanged +=&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new PropertyChangedEventHandler(ModelPropertyChanged);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Setter Injection doesn't happen until after Construction - lazy instantiation&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // using default Error() class.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error.SetError(ex, string.Format(&amp;quot;{0}: Could not instantiate PresenterBase {1}{2}&amp;quot;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModuleFullName, ex.Message, ex.StackTrace),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Category.Exception, Priority.High);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;/div&gt;</description><author>Billkrat</author><pubDate>Fri, 22 May 2009 19:30:58 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522073058P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;div&gt;Okay now it makes a bit more sense to me. Essentially we're advocating the same design, you're just showing the details of the design more explicitly. I can dig it.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;There's no reason for the PM to have complex business logic, that's the reason we have a business logic layer. You're saying that you use a presenter AND a presentation model. what's the dependency order? Does the presenter know about the PM and update it appropriately? I guess it's difficult to fully provide advice and guidance on this without a full picture of the system. The link you gave earlier, is that the source code for your system?&lt;br&gt;
&lt;br&gt;&lt;/div&gt;
&lt;div&gt;On Fri, May 22, 2009 at 12:36 PM, Billkrat &lt;span dir=ltr&gt;&amp;lt;&lt;a href="mailto:notifications@codeplex.com"&gt;notifications@codeplex.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex"&gt;
&lt;div&gt;
&lt;p&gt;From: Billkrat&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;---------------&lt;br&gt;[mbrownbh] why not this instead              View -&amp;gt; Presentation Model -&amp;gt; BusinessLayer -&amp;gt; DataLayer -&amp;gt; Storage&lt;/p&gt;
&lt;p&gt;On the surface (without understanding the context of its usage).   I have a problem to solve with the above - can you shed some light?&lt;/p&gt;
&lt;p&gt;=&amp;gt; Who has the responsibility for updating the Presentation Model?   Consider that I use the model across multiple applications/modules so I can't pollute it with business rules   &lt;br&gt;&lt;br&gt;In my case the Presenter updates the Presentation Model (which my view(s) are bound to).  &lt;/p&gt;

&lt;p&gt;---------------&lt;br&gt;[mbrownbh] Note that I didn't make any mention in here of WCF or Service Layer. The fact that you're using WCF is an implementation detail that should be abstracted away.&lt;/p&gt;
&lt;p&gt;Agreed&lt;/p&gt;
&lt;p&gt;---------------&lt;br&gt;[mbrownbh] Your BusinessLayer would be an interface that can be injected by your container and based on conditions, would give you a local business layer (using a local datalayer and local storage) or a remote business layer that uses WCF to communicate with a remote businesslayer and dal.&lt;/p&gt;

&lt;p&gt;Agreed&lt;/p&gt;
&lt;p&gt;---------------&lt;br&gt;[mbrownbh] I think that is what the resistance was. You are essentially removing the benefit of using an IOC container by duplicating the layers on both sides.&lt;/p&gt;
&lt;p&gt;Not if you understand the context of it's usage.  I have encapsulated reusable components depending on the Business and Data Requirements.   For obvious reasons I don't want to tightly couple by BLL to it's DAL so my Silverlight application has to have both a BLL and DAL - configured as follows (picture says a thousand words):&lt;/p&gt;

&lt;p&gt;The following is an excerpt of a single module's configuration for two services residing in a shared project:&lt;/p&gt;
&lt;p&gt;    public override void RegisterViewsAndServices()&lt;br&gt;    {&lt;br&gt;      Container&lt;br&gt;          .RegisterType&amp;lt;ILoggerFacade, DebugLogger&amp;gt;()&lt;br&gt;          .RegisterType&amp;lt;IIMPresentationModel, IMPresentationModel&amp;gt;(&lt;br&gt;
              new ContainerControlledLifetimeManager())&lt;/p&gt;
&lt;p&gt;          .RegisterType&amp;lt;IAdapter, AdapterBLL&amp;gt;(&lt;br&gt;              new ContainerControlledLifetimeManager()) // Singleton&lt;br&gt;          .RegisterType&amp;lt;IAdapter, AdapterDAL&amp;gt;(&amp;quot;AdapterProxyDAL&amp;quot;,&lt;br&gt;              new ContainerControlledLifetimeManager()) // Singleton&lt;/p&gt;

&lt;p&gt;          .RegisterType&amp;lt;IReferenceData, ReferenceDataBLL&amp;gt;(&lt;br&gt;              new ContainerControlledLifetimeManager()) // Singleton&lt;br&gt;          .RegisterType&amp;lt;IReferenceData, ReferenceDataDAL&amp;gt;(&amp;quot;ReferenceDataDAL&amp;quot;,&lt;br&gt;
              new ContainerControlledLifetimeManager())  // Singleton&lt;/p&gt;
&lt;p&gt;          .RegisterType&amp;lt;IMappingEditorView, MappingEditorView&amp;gt;()&lt;/p&gt;
&lt;p&gt;There is a clear separation of concern - other applications and/or modules can use different implementations as P&amp;P suggest&lt;/p&gt;
&lt;p&gt;As for IOC in the service (  Service Layer -&amp;gt; BLL -&amp;gt; DAL -&amp;gt; Data Store)&lt;/p&gt;
&lt;p&gt;The following is an excerpt of a Service Provider (an implementation of what could be multiple providers) - it benefits from IOC for obvious reasons: &lt;/p&gt;
&lt;p&gt;    private IWebHttpClient adapterClient = null;&lt;/p&gt;
&lt;p&gt;    /// &amp;lt;summary&amp;gt;&lt;br&gt;    /// Gets or sets the error.&lt;br&gt;    /// &amp;lt;/summary&amp;gt;&lt;br&gt;    /// &amp;lt;value&amp;gt;The error.&amp;lt;/value&amp;gt;&lt;br&gt;    [Dependency]&lt;br&gt;    public IError Error { get; set; }&lt;/p&gt;
&lt;p&gt;    [Dependency]&lt;br&gt;    public ILoggerFacade Logger { get; set; }&lt;/p&gt;
&lt;p&gt;    /// &amp;lt;summary&amp;gt;&lt;br&gt;    /// Initializes a new instance of the &amp;lt;see cref=&amp;quot;AdapterProxyProvider&amp;quot;/&amp;gt; class.&lt;br&gt;    /// &amp;lt;/summary&amp;gt;&lt;br&gt;    /// &amp;lt;param name=&amp;quot;container&amp;quot;&amp;gt;The container.&amp;lt;/param&amp;gt;&lt;br&gt;
    public AdapterProxyProvider(IUnityContainer container)&lt;br&gt;    {&lt;br&gt;        this.adapterClient = container.Resolve&amp;lt;IWebHttpClient&amp;gt;(&amp;quot;AdapterClient&amp;quot;);&lt;br&gt;    }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I have a single point of configuration for both my application's module and my service (separate applications).   Either can be told to use different BLL / DAL as requirements dictate.   Anything less would have me tightly coupling.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Read the &lt;a href="http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188&amp;ANCHOR#Post193295"&gt;full discussion online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add a post to this discussion, reply to this email (&lt;a href="mailto:mvvmref@discussions.codeplex.com?subject=[mvvmref:57188]"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;To start a new discussion for this project, email &lt;a href="mailto:mvvmref@discussions.codeplex.com"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You are receiving this email because you subscribed to this discussion on CodePlex. You can &lt;a href="http://www.codeplex.com/site/discussions/project/unsubscribe/mvvmref"&gt;unsubscribe or change your settings&lt;/a&gt; on codePlex.com.&lt;/p&gt;

&lt;p&gt;Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;br&gt;&lt;/div&gt;</description><author>mbrownbh</author><pubDate>Fri, 22 May 2009 18:49:25 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522064925P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;---------------&lt;br&gt;[mbrownbh] why not this instead&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; View -&amp;gt; Presentation Model -&amp;gt; BusinessLayer -&amp;gt; DataLayer -&amp;gt; Storage&lt;/p&gt;
&lt;p&gt;On the surface (without understanding the context of its usage).&amp;nbsp;&amp;nbsp; I have a problem to solve with the above - can you shed some light?&lt;/p&gt;
&lt;p&gt;=&amp;gt;&amp;nbsp;Who has the responsibility for updating the Presentation&amp;nbsp;Model?&amp;nbsp;&amp;nbsp;&amp;nbsp;Consider that I use&amp;nbsp;the model&amp;nbsp;across multiple applications/modules so I can't pollute it with business rules&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;In my case the Presenter updates the Presentation Model (which my view(s) are bound to).&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;---------------&lt;br&gt;[mbrownbh] Note that I didn't make any mention in here of WCF or Service Layer. The fact that you're using WCF is an implementation detail that should be abstracted away.&lt;/p&gt;
&lt;p&gt;Agreed&lt;/p&gt;
&lt;p&gt;---------------&lt;br&gt;[mbrownbh]&amp;nbsp;Your BusinessLayer would be an interface that can be injected by your container and based on conditions, would give you a local business layer (using a local datalayer and local storage) or a remote business layer that uses WCF to communicate with a remote businesslayer and dal.&lt;/p&gt;
&lt;p&gt;Agreed&lt;/p&gt;
&lt;p&gt;---------------&lt;br&gt;[mbrownbh] I think that is what the resistance was. You are essentially removing the benefit of using an IOC container by duplicating the layers on both sides.&lt;/p&gt;
&lt;p&gt;Not if you understand the context of it's usage.&amp;nbsp; I have encapsulated reusable components depending on the Business and Data Requirements.&amp;nbsp;&amp;nbsp; For obvious reasons I don't want to tightly couple by BLL to it's DAL so my Silverlight application has to have both a BLL and DAL - configured as follows (picture says a thousand words):&lt;/p&gt;
&lt;p&gt;The following is an excerpt of a single module's configuration for two services residing in a shared project:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void RegisterViewsAndServices()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Container&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;ILoggerFacade, DebugLogger&amp;gt;()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;IIMPresentationModel, IMPresentationModel&amp;gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ContainerControlledLifetimeManager())&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;IAdapter, AdapterBLL&amp;gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ContainerControlledLifetimeManager()) // Singleton&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;IAdapter, AdapterDAL&amp;gt;(&amp;quot;AdapterProxyDAL&amp;quot;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ContainerControlledLifetimeManager()) // Singleton&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;IReferenceData, ReferenceDataBLL&amp;gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ContainerControlledLifetimeManager()) // Singleton&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;IReferenceData, ReferenceDataDAL&amp;gt;(&amp;quot;ReferenceDataDAL&amp;quot;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ContainerControlledLifetimeManager())&amp;nbsp; // Singleton&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .RegisterType&amp;lt;IMappingEditorView, MappingEditorView&amp;gt;()&lt;/p&gt;
&lt;p&gt;There is a clear separation of concern - other applications and/or modules can use different implementations as P&amp;amp;P suggest&lt;/p&gt;
&lt;p&gt;As for IOC in the service (&amp;nbsp; Service Layer -&amp;gt; BLL -&amp;gt; DAL -&amp;gt; Data Store)&lt;/p&gt;
&lt;p&gt;The following is an excerpt of a Service Provider (an implementation of what could be multiple providers)&amp;nbsp;- it benefits from IOC for obvious reasons:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private IWebHttpClient adapterClient = null;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Gets or sets the error.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;value&amp;gt;The error.&amp;lt;/value&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Dependency]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public IError Error { get; set; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Dependency]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ILoggerFacade Logger { get; set; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Initializes a new instance of the &amp;lt;see cref=&amp;quot;AdapterProxyProvider&amp;quot;/&amp;gt; class.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name=&amp;quot;container&amp;quot;&amp;gt;The container.&amp;lt;/param&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public AdapterProxyProvider(IUnityContainer container)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.adapterClient = container.Resolve&amp;lt;IWebHttpClient&amp;gt;(&amp;quot;AdapterClient&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have a single point of configuration for both my application's module and my service (separate applications).&amp;nbsp;&amp;nbsp; Either can be told to use different BLL / DAL as requirements dictate.&amp;nbsp;&amp;nbsp; Anything less would have me tightly coupling.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</description><author>Billkrat</author><pubDate>Fri, 22 May 2009 16:36:45 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522043645P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;MVP -&amp;gt; BLL -&amp;gt; DAL -&amp;gt;&amp;nbsp; WCF -&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Service Layer&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;&amp;nbsp; BLL -&amp;gt; DAL -&amp;gt; Data Store architecture.&lt;/p&gt;
&lt;p&gt;Why not this instead&lt;/p&gt;
&lt;p&gt;View -&amp;gt; Presentation Model -&amp;gt; BusinessLayer -&amp;gt; DataLayer -&amp;gt; Storage&lt;/p&gt;
&lt;p&gt;Note that I didn't make any mention in here of WCF or Service Layer. The fact that you're using WCF is an implementation detail that should be abstracted away. Your BusinessLayer would be an interface that can be injected by your container and based on conditions, would give you a local business layer (using a local datalayer and local storage) or a remote business layer that uses WCF to communicate with a remote businesslayer and dal.&lt;/p&gt;
&lt;p&gt;I think that is what the resistance was. You are essentially removing the benefit of using an IOC container by duplicating the layers on both sides.&lt;/p&gt;&lt;/div&gt;</description><author>mbrownbh</author><pubDate>Fri, 22 May 2009 15:30:52 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522033052P</guid></item><item><title>New Post: Patterns</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=57188</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I'm excited to see how this project evolves.&amp;nbsp; Because of my involvement on the ISO 15926 international development team (engineering companies -&amp;nbsp;I represent Zachry Engineering) I've had to pull out of the open source community (well sorta, kinda - it&amp;nbsp;will be&amp;nbsp;an &lt;a href="https://secure.ids-adi.org/repository/org/ids-adi/camelot/Code"&gt;open source project&lt;/a&gt;).&amp;nbsp;&amp;nbsp; The news release hits the airways May 30th so as projects go I trust you know where we (developers) are - crunching...&lt;/p&gt;
&lt;p&gt;I thought I'd approach the gurus on an architecture design that has evolved&amp;nbsp;from the things that the various P&amp;amp;P teams have taught me (SCSF, WCSF, CompositeWPF, Unity, etc) and ended up&amp;nbsp;in an infrastructure that combines patterns.&amp;nbsp;&amp;nbsp;&amp;nbsp; MVP, Separated Presentation and M-V-VM.&amp;nbsp;&amp;nbsp; Being on the bleeding edge meant&amp;nbsp;having no guidance (thus my excitement about this project) requiring me to do my best with available knowledge.&amp;nbsp;&amp;nbsp; e.g.,&amp;nbsp;I proposed (and we use) the following architecture:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MVP -&amp;gt; BLL -&amp;gt; DAL -&amp;gt;&amp;nbsp; WCF -&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Service Layer&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt;&amp;nbsp; BLL -&amp;gt; DAL -&amp;gt; Data Store architecture.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I always end up debating (various contract teams) the necessity for the Presentation&amp;nbsp;Tier's BLL-&amp;gt;DAL as SOA would have us go directly to the Service Layer.&amp;nbsp;&amp;nbsp; Two points that help me win this debate (in the absence of supporting guidance) is a couple of questions.&amp;nbsp; First, what happens when I want to switch to &amp;quot;Isolated storage&amp;quot;, after they ask me what this is I let them know that they have a hard drive to code against and could conceptually write a system that caches data.&amp;nbsp;&amp;nbsp;If the service goes offline the module, through DI, could use a IsolatedStorageDAL&amp;nbsp;class (implementing the same interface as the actual service).&amp;nbsp;&amp;nbsp; Second argument is if I have a shared Module (by many applications) I only have to update one assembly if a contract changes on the service.&amp;nbsp; Silverlight changed the rules because it is essentially a fat client but guidance hasn't kept up - perhaps this project??&lt;/p&gt;
&lt;p&gt;About the architecture...&lt;/p&gt;
&lt;p&gt;I had introduced the team to the CompositeWPF, Unity and Patterns (by Microsoft's definitions) and developed a prototype based on&amp;nbsp;a &amp;quot;Top Down Composition&amp;quot; sample provided in&amp;nbsp;an early drop&amp;nbsp;of the CompositeWPF.&amp;nbsp;&amp;nbsp;&amp;nbsp; Being not to far removed from my ignorance of Dependency Injection, Multi-targeting and separation of concerns, etc, etc, (we didn't have a lot of time - it had to be easy to use). &amp;nbsp;I abstracted much of the complexity into a ModuleLibrary and PrismContrib project (I wanted more projects for a clearer separation of concerns but after much debate I could only get away with these - combining concerns).&amp;nbsp;&amp;nbsp; I think what sold the team was when, during a live WebMeeting, I consumed a service by simply adding an Interface to my constructor, subscribed to the OnDataEvent and handled it - a few minutes work address a business requirement.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As far as project layout, uncomplicated - the primary IRingFramework project has only&amp;nbsp;MVP components&amp;nbsp;and&amp;nbsp;a InformationModelModule.cs.&amp;nbsp;&amp;nbsp; Although they are new to MVP (didn't understand the infrastructure) I was able to&amp;nbsp;quickly show them they need only be focused on the Presenter. &amp;nbsp;I showed off some of the event aggregation and databinding (PresentationModel) as well - powerful stuff.&amp;nbsp;&amp;nbsp; Even in the light of overwhelming time constraints, requirements and lack of experience with the patterns, CompositeWPF and Dependency Injection&amp;nbsp;- the team all agreed to go with it.&lt;/p&gt;
&lt;p&gt;My approach...&lt;/p&gt;
&lt;p&gt;With the PresentationModel being shared across numerous views (and potentially numerous applications) I found MVP to be very efficient in wiring up the infrastructure (Multi-Targeting)&amp;nbsp;and providing&amp;nbsp;a wealth of opportunities to use different patterns to access and pass data around.&amp;nbsp; For example&amp;nbsp;my presenter base&amp;nbsp;will subscribe to the default model's OnPropertyChanged event&amp;nbsp;and call a virtual method so developers can either use the EventAggregator or override this method to be notified on data changes,&amp;nbsp; they can use&amp;nbsp;either an interface or the Views FindName command to&amp;nbsp;gain references to the Views controls.&amp;nbsp; The shared PresentationModel removes a lot of code overhead having to manage state.&lt;/p&gt;
&lt;p&gt;I'd be interested in any thoughts from the Guru's - particularly those that will help streamline debates so we can get coding faster.&lt;/p&gt;
&lt;p&gt;With a reference to the CompositeWPF, Unity, ModuleLibrary and PrismContrib projects, the minimal infrastructure code required follows:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Those familiar with SCSF, WCSF and CompositeWPF will be right at home (Hi Glenn :)&amp;nbsp; without even seeing the baseclass code.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;-----------[ View ]---------------&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;System.Windows.Controls;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PrismContrib.Base;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; InformationModel.Views.MEPinnedRegion&lt;br&gt;{&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;partial&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PinnedView : UserControl, IPinnedView&lt;br&gt;{&lt;br&gt;　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PinnedView()&lt;br&gt;　　　　{&lt;br&gt;　　　　 InitializeComponent();&lt;br&gt;　　　　}&lt;br&gt;　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; IPresentationModel Model { &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; }&lt;br&gt;}&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="color:#000000"&gt;------[ Presenter ]-------&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; OntologyService.Interface.PresentationModels;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PrismContrib.Base;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; System.ComponentModel;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; System.Windows.Controls;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; InformationModel.Views.MEPinnedRegion&lt;br&gt;{&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PinnedPresenter: PresenterBase&amp;lt;IPinnedView&amp;gt;&lt;br&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PinnedPresenter(IPinnedView view, IIMPresentationModel model)&lt;br&gt;　　　　 :&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;base&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;(view,model)&lt;br&gt;　　　　{&lt;br&gt;&lt;br&gt;　　　　}&lt;br&gt;}&lt;br&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;
&lt;p&gt;&lt;span style="color:#000000"&gt;----------[ Interface ]------------&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PrismContrib.Base;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; InformationModel.Views.MEPinnedRegion&lt;br&gt;{&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;interface&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; IPinnedView : IViewBase&lt;br&gt;{&lt;br&gt;&lt;br&gt;}&lt;br&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="color:#000000"&gt;With the interface exposing the following:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;using&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; System.Windows.Threading;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;namespace&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; PrismContrib.Base&lt;br&gt;{&lt;br&gt;　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;interface&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; IViewBase&lt;br&gt;　　　　{&lt;br&gt;　　　　　　　　IPresentationModel Model { &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; }&lt;br&gt;　　　　　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; DataContext { &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; }&lt;br&gt;　　　　　　　　Dispatcher Dispatcher { &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; }&lt;br&gt;　　　　　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;object&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; FindName(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; name);&lt;br&gt;　　　　　　　　&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt; Name { &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;&lt;span style="font-family:Consolas;color:#0000ff;font-size:x-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;; }&lt;br&gt;　　　　}&lt;br&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;&lt;span style="font-family:Consolas;font-size:x-small"&gt;The interface provides a hook into the UI that let's me do helper (baseclass) functions as follows which provide alternatives to the code overhead of interfaces:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#2b91af;font-size:xx-small"&gt;&lt;span style="color:#2b91af;font-size:xx-small"&gt;Button&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt; btnSearch { &lt;/span&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt; ButtonCtrl(&lt;/span&gt;&lt;span style="color:#a31515;font-size:xx-small"&gt;&lt;span style="color:#a31515;font-size:xx-small"&gt;&amp;quot;btnSearch&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt;); } }&lt;br&gt;&lt;/span&gt;&lt;span style="color:#2b91af;font-size:xx-small"&gt;&lt;span style="color:#2b91af;font-size:xx-small"&gt;TextBox&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt; txtSearch { &lt;/span&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt; { &lt;/span&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;&lt;span style="color:#0000ff;font-size:xx-small"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt; TextCtrl(&lt;/span&gt;&lt;span style="color:#a31515;font-size:xx-small"&gt;&lt;span style="color:#a31515;font-size:xx-small"&gt;&amp;quot;txtSearch&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:xx-small"&gt;); } }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;</description><author>Billkrat</author><pubDate>Fri, 22 May 2009 14:25:03 GMT</pubDate><guid isPermaLink="false">New Post: Patterns 20090522022503P</guid></item><item><title>New Post: Recipe Program</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;That would seem fair. I'm going to download REML and have a scout round it.&lt;/p&gt;&lt;/div&gt;</description><author>ohanlonp</author><pubDate>Thu, 21 May 2009 18:52:34 GMT</pubDate><guid isPermaLink="false">New Post: Recipe Program 20090521065234P</guid></item><item><title>New Post: Recipe Program</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314</link><description>&lt;div style="line-height: normal;"&gt;Looking at the list of formats, REML seems to be the most feature complete at first glance. I think leveraging that as our model would allow us to support all the others with a few additions.&lt;br&gt;&lt;br&gt;
&lt;div&gt;On Thu, May 21, 2009 at 7:24 AM, ohanlonp &lt;span dir=ltr&gt;&amp;lt;&lt;a href="mailto:notifications@codeplex.com"&gt;notifications@codeplex.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex"&gt;
&lt;div&gt;
&lt;p&gt;From: ohanlonp&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;I'd be quite happy to mock up a WCF service to return data in different formats, if that would be any help.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Read the &lt;a href="http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314&amp;ANCHOR#Post192750"&gt;full discussion online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add a post to this discussion, reply to this email (&lt;a href="mailto:mvvmref@discussions.codeplex.com?subject=[mvvmref:56314]"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;To start a new discussion for this project, email &lt;a href="mailto:mvvmref@discussions.codeplex.com"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You are receiving this email because you subscribed to this discussion on CodePlex. You can &lt;a href="http://www.codeplex.com/site/discussions/project/unsubscribe/mvvmref"&gt;unsubscribe or change your settings&lt;/a&gt; on codePlex.com.&lt;/p&gt;

&lt;p&gt;Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;br&gt;&lt;/div&gt;</description><author>mbrownbh</author><pubDate>Thu, 21 May 2009 17:53:59 GMT</pubDate><guid isPermaLink="false">New Post: Recipe Program 20090521055359P</guid></item><item><title>New Post: Recipe Program</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;I'd be quite happy to mock up a WCF service to return data in different formats, if that would be any help.&lt;/p&gt;&lt;/div&gt;</description><author>ohanlonp</author><pubDate>Thu, 21 May 2009 11:24:42 GMT</pubDate><guid isPermaLink="false">New Post: Recipe Program 20090521112442A</guid></item><item><title>New Post: Recipe Program</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314</link><description>&lt;div style="line-height: normal;"&gt;You're right...I've gotta keep focused...hard to do when there's so many shiny objects glimmering around you.&lt;/div&gt;</description><author>mbrownbh</author><pubDate>Tue, 19 May 2009 20:53:59 GMT</pubDate><guid isPermaLink="false">New Post: Recipe Program 20090519085359P</guid></item><item><title>New Post: Recipe Program</title><link>http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314</link><description>&lt;div style="line-height: normal;"&gt;Yes, but not really relevant here, I don't think.  I'm reluctant to use any real web service, because it complicates what's necessary to run the application in many scenarios.  I think it's a much better idea to mock the web services.&lt;br&gt;
&lt;br&gt;
&lt;div&gt;On Tue, May 19, 2009 at 3:52 PM, mbrownbh &lt;span dir=ltr&gt;&amp;lt;&lt;a href="mailto:notifications@codeplex.com"&gt;notifications@codeplex.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex"&gt;
&lt;div&gt;
&lt;p&gt;From: mbrownbh&lt;/p&gt;
&lt;div&gt;Hmmm...that'd be interesting as an Azure app. 
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;br&gt;
&lt;div&gt;On Tue, May 19, 2009 at 11:40 AM, wekempf &lt;span dir=ltr&gt;&amp;lt;&lt;a href="mailto:notifications@codeplex.com"&gt;notifications@codeplex.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex"&gt;
&lt;div&gt;
&lt;p&gt;From: wekempf&lt;/p&gt;
&lt;div&gt;I'm not aware of any existing online services.  I imagined we'd mock a service (i.e. it wouldn't ever really hit the wire, and would instead just return canned data) to simulate asynchronous processing. 
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br&gt;&lt;br&gt;
&lt;div&gt;On Tue, May 19, 2009 at 11:18 AM, MichaelLPerry1971 &lt;span dir=ltr&gt;&amp;lt;&lt;a href="mailto:notifications@codeplex.com"&gt;notifications@codeplex.com&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;
&lt;blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex"&gt;
&lt;div&gt;
&lt;p&gt;From: MichaelLPerry1971&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;This being a client-side MVVM reference, the social features seem out-of-scope. But we do want to demonstrate asynchronous processing, so communication with an external service would be an excellent example.&lt;/p&gt;
&lt;p&gt;Are there any recipe-oriented services that already have an API? The MealMaster link seems promising. Is there already an instance running that we can use?&lt;/p&gt;
&lt;p&gt;I'm thinking that the MVVM reference application can be a smart-client for an online service. If we don't have to write the online service ourselves, then the RIs can focus on implementing the pattern.&lt;/p&gt;&lt;/div&gt;

&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Read the &lt;a href="http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314&amp;ANCHOR#Post191940"&gt;full discussion online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add a post to this discussion, reply to this email (&lt;a href="mailto:mvvmref@discussions.codeplex.com?subject=[mvvmref:56314]"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;To start a new discussion for this project, email &lt;a href="mailto:mvvmref@discussions.codeplex.com"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You are receiving this email because you subscribed to this discussion on CodePlex. You can &lt;a href="http://www.codeplex.com/site/discussions/project/unsubscribe/mvvmref"&gt;unsubscribe or change your settings&lt;/a&gt; on codePlex.com.&lt;/p&gt;

&lt;p&gt;Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;br&gt;&lt;br clear=all&gt;
&lt;div&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;-- &lt;br&gt;Quidquid latine dictum sit, altum sonatur.&lt;br&gt;- Whatever is said in Latin sounds profound.&lt;br&gt;&lt;br&gt;War is peace. Freedom is slavery.  Bugs are features.&lt;br&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Read the &lt;a href="http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314&amp;ANCHOR#Post191953"&gt;full discussion online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add a post to this discussion, reply to this email (&lt;a href="mailto:mvvmref@discussions.codeplex.com?subject=[mvvmref:56314]"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;To start a new discussion for this project, email &lt;a href="mailto:mvvmref@discussions.codeplex.com"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You are receiving this email because you subscribed to this discussion on CodePlex. You can &lt;a href="http://www.codeplex.com/site/discussions/project/unsubscribe/mvvmref"&gt;unsubscribe or change your settings&lt;/a&gt; on codePlex.com.&lt;/p&gt;

&lt;p&gt;Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Read the &lt;a href="http://mvvmref.codeplex.com/Thread/View.aspx?ThreadId=56314&amp;ANCHOR#Post192057"&gt;full discussion online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To add a post to this discussion, reply to this email (&lt;a href="mailto:mvvmref@discussions.codeplex.com?subject=[mvvmref:56314]"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;To start a new discussion for this project, email &lt;a href="mailto:mvvmref@discussions.codeplex.com"&gt;mvvmref@discussions.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You are receiving this email because you subscribed to this discussion on CodePlex. You can &lt;a href="http://www.codeplex.com/site/discussions/project/unsubscribe/mvvmref"&gt;unsubscribe or change your settings&lt;/a&gt; on codePlex.com.&lt;/p&gt;

&lt;p&gt;Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at &lt;a href="http://codeplex.com/"&gt;codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;&lt;br clear=all&gt;
&lt;div&gt;&lt;/div&gt;&lt;br&gt;-- &lt;br&gt;Quidquid latine dictum sit, altum sonatur.&lt;br&gt;- Whatever is said in Latin sounds profound.&lt;br&gt;&lt;br&gt;War is peace. Freedom is slavery.  Bugs are features.&lt;br&gt;&lt;/div&gt;</description><author>wekempf</author><pubDate>Tue, 19 May 2009 20:31:09 GMT</pubDate><guid isPermaLink="false">New Post: Recipe Program 20090519083109P</guid></item></channel></rss>