Meant to send this message to everyone.....What do you guys think?<br><br>Carlus<br><br>---------- Forwarded message ----------<br><span class="gmail_quote">From: <b class="gmail_sendername">Carlus Henry</b> &lt;<a href="mailto:carlushenry@sagetech-llc.com">
carlushenry@sagetech-llc.com</a>&gt;<br>Date: Jul 12, 2007 10:06 AM<br>Subject: Re: [grand-rapids-pm-list] Model View Presenter<br>To: Jason Porritt &lt;<a href="mailto:jasonmtu@yahoo.com">jasonmtu@yahoo.com</a>&gt;<br><br>
</span>Hey bud....<br><br>In your work with MVP, does when the presenter delegates to the model, who owns the transactions when doing commits?&nbsp; I am thinking that the model should own the commits....but what happens if the work that needs to be done is happening across two seperate model calls.&nbsp; When the second model operation fails it should roll back the first.&nbsp; But you are not able to do this unless the transaction is being controlled at the presenter level, which just feels awkward.
<br><br>What have you done?<br><br>Thanks<br><span class="sg">Carlus</span><div><span class="e" id="q_113bac03d6d17139_2"><br><br><div><span class="gmail_quote">On 7/11/07, <b class="gmail_sendername">Jason Porritt</b> &lt;
<a href="mailto:jasonmtu@yahoo.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">jasonmtu@yahoo.com</a>&gt; wrote:
</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">

<div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">Thanks for the follow-up, Carlus.&nbsp; Atomic Object&#39;s Presenter First pattern is indeed very interesting, and I kind of wish we had jumped into that during the MVP discussion but we probably would have run out of time for the Perl testing section.&nbsp; Here are a few other links related to the meeting I meant to share with the group at the end:
<br><br><span style="font-weight: bold;">UI Design Patterns (Martin Fowler)</span><br>&nbsp;&nbsp;&nbsp; <a href="http://www.martinfowler.com/eaaDev/uiArchs.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">GUI Architectures
</a><br>&nbsp;&nbsp;&nbsp; <a href="http://www.martinfowler.com/articles/injection.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Inversion of Control Containers and the Dependency Injection pattern</a><br>

<br><span style="font-weight: bold;">Perl
 Testing</span><br>&nbsp;&nbsp;&nbsp; <a href="http://search.cpan.org/%7Emschwern/Test-Simple-0.70/lib/Test/More.pm%20" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Test::More</a><br>&nbsp;&nbsp;&nbsp; <a href="http://search.cpan.org/%7Echromatic/Test-MockObject-1.08/lib/Test/MockObject.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

Test::MockObject</a><br><br>And to answer one of Carlus&#39; other questions about IoC (Inversion of Control) containers for perl I did find two that look interesting:<br>&nbsp;&nbsp;&nbsp; <a href="http://search.cpan.org/%7Estevan/IOC-0.29/lib/IOC.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

IOC</a><br>&nbsp;&nbsp;&nbsp; <a href="http://search.cpan.org/%7Erhundt/Peco-1.0/lib/Peco/Container.pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Peco::Container</a><br><br>My initial impression is that Peco::Container is a bit simpler than IOC.&nbsp; I haven&#39;t used either of them yet so I don&#39;t have much but the documentation to base that on.&nbsp; Neither of them do anything other than IoC, so a fair comparison may be between these two and Java&#39;s 
<a href="http://www.picocontainer.org/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">PicoContainer</a> instead of Spring which
 is a full application framework in addition to an IoC container.<br><br>Thanks,<br>Jason Porritt<br><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><div><span>
----- Original Message ----<br>From: Carlus Henry &lt;<a href="mailto:carlushenry@sagetech-llc.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">carlushenry@sagetech-llc.com</a>&gt;<br>To: <a href="mailto:grand-rapids-pm-list@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

grand-rapids-pm-list@pm.org</a><br>Sent: Thursday, July 5, 2007 8:48:30 AM<br>Subject: [grand-rapids-pm-list] Model View Presenter<br><br>For those of you that did not come to the last Perl User Group meeting, you missed a great presentation which prompted a wonderful discussion on the Model-View-Presenter Pattern (MVP).&nbsp; Primarily being a J2EE developer and with many years of experience with the Struts Framework, I am very familiar with the Model-View-Controller (MVC).&nbsp; I was very interested, however, in this MVP pattern.&nbsp; This is mostly due to the thick client application development that I have been doing lately.
<br><br>During the meeting, a lot of questions were raised regarding this pattern, and Jason Porrit was very patient with all of us (touche&#39;).&nbsp; After the meeting, I decided to do a little more investigation, and found the following:
<br><br><span style="font-weight: bold; text-decoration: underline;">Martin Fowler Retires Model View Presenter Pattern</span><br><br>Yes.&nbsp; Believe it or not, this <a rel="nofollow" href="http://www.martinfowler.com/eaaDev/ModelViewPresenter.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">


pattern has been retired</a>
 by Martin Fowler.&nbsp; Well, I don&#39;t know if retired is the correct &#39;r&#39;-word.&nbsp; Maybe it should say &#39;R&#39;efactored instead.&nbsp; He has split up the pattern into the <a rel="nofollow" href="http://www.martinfowler.com/eaaDev/SupervisingPresenter.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">



Supervising Controller</a> and the <a rel="nofollow" href="http://www.martinfowler.com/eaaDev/PassiveScreen.html" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Passive View</a>.&nbsp; After reading both of the patterns, they sound very similar in detail and in practice.&nbsp; In the Passive View you put all of the widget population logic into the Presenter.&nbsp; All logic is pushed on the Presenter including the population of text fields or any other widgets available on the View.&nbsp; In the Supervising Controller, you push most of the logic onto the Presenter, but leave some of the logic of populating widgets in the View.&nbsp; Martin states:
<br><br>&quot;...the essence of a good <i>Supervising Controller</i> is to do as
                little as possible. Let the view handle as much as possible and
                only step in when there&#39;s more complex logic involved.&quot;<br><br><span style="font-weight: bold; text-decoration: underline;">Atomic Object Presenter First</span><br>On a related note, <a rel="nofollow" href="http://atomicobject.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">


Atomic Object</a> also has their own variation of the MVP Design pattern called Presenter First (PF).&nbsp; After reading an article from Better Software magazine (referenced from their <a rel="nofollow" href="http://atomicobject.com/pages/Presenter+First" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">


PF resources</a>), I find this design pattern very attractive as well.&nbsp; What most attracts me is the concept of linking different PF triads in order to orchestrate behavior and a process.&nbsp; Please refer tot he Better Software article for more information on this.
<br><br>Overall, I owe a big thanks to Jason Porrit for inspiring me to learn more about this design pattern.&nbsp; I look forward to hearing him present in the future.<br></span></div><span>-- <br>Carlus Henry<br>SageTech 
L.L.C.<br><a rel="nofollow" href="http://www.sagetech-llc.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
www.sagetech-llc.com</a> | <a rel="nofollow" href="http://jdcarlflip.blogspot.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://jdcarlflip.blogspot.com/</a>
</span><div>_______________________________________________<br>grand-rapids-pm-list mailing list<br><a href="mailto:grand-rapids-pm-list@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">grand-rapids-pm-list@pm.org
</a><br><a href="http://mail.pm.org/mailman/listinfo/grand-rapids-pm-list" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.pm.org/mailman/listinfo/grand-rapids-pm-list</a></div></div><span>

<br></span></div></div><span><br>
      <hr size="1">Looking for a deal? <a href="http://us.rd.yahoo.com/evt=47094/*http://farechase.yahoo.com/;_ylc=X3oDMTFicDJoNDllBF9TAzk3NDA3NTg5BHBvcwMxMwRzZWMDZ3JvdXBzBHNsawNlbWFpbC1uY20-" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

Find great prices on flights and hotels</a> with Yahoo! FareChase.</span></div><br>_______________________________________________<br>grand-rapids-pm-list mailing list<br><a href="mailto:grand-rapids-pm-list@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

grand-rapids-pm-list@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/grand-rapids-pm-list" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.pm.org/mailman/listinfo/grand-rapids-pm-list
</a><br></blockquote></div><br><br clear="all"><br>-- <br>Carlus Henry<br>SageTech L.L.C.<br><a href="http://www.sagetech-llc.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">www.sagetech-llc.com
</a> | <a href="http://jdcarlflip.blogspot.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://jdcarlflip.blogspot.com/
</a>
</span></div><br clear="all"><br>-- <br>Carlus Henry<br>SageTech L.L.C.<br><a href="http://www.sagetech-llc.com">www.sagetech-llc.com</a> | <a href="http://jdcarlflip.blogspot.com/">http://jdcarlflip.blogspot.com/</a>