<?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"
	>

<channel>
	<title>while true do;</title>
	<atom:link href="http://www.danieleteti.it/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.danieleteti.it</link>
	<description>Daniele Teti's programming blog</description>
	<pubDate>Wed, 01 Sep 2010 08:19:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Sneak preview about DORM, The Delphi ORM</title>
		<link>http://www.danieleteti.it/?p=250</link>
		<comments>http://www.danieleteti.it/?p=250#comments</comments>
		<pubDate>Wed, 01 Sep 2010 08:17:04 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Design Patterns]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[RTTI]]></category>

		<category><![CDATA[Delphi]]></category>

		<category><![CDATA[DORM]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=250</guid>
		<description><![CDATA[My yesterday post about this busy time, have raised some interest about DORM, the Delphi ORM.
So, also if I still haven&#8217;t released any files, wish to expose some internals about DORM.
DORM is an implementation of the DataMapper design pattern written having Hibernate in mind.
It&#8217;s completely unit tested and have the following features:

External file mapping. (JSON [...]]]></description>
			<content:encoded><![CDATA[<p>My yesterday post about this busy time, have raised some interest about DORM, the Delphi ORM.</p>
<p>So, also if I still haven&#8217;t released any files, wish to expose some internals about DORM.</p>
<p>DORM is an implementation of the <a href="http://martinfowler.com/eaaCatalog/dataMapper.html">DataMapper</a> design pattern written having <a href="http://hibernate.org/">Hibernate</a> in mind.</p>
<p>It&#8217;s completely unit tested and have the following features:</p>
<ul>
<li>External file mapping. (JSON format)
<li>Persistence ignorance (every TObject can be persisted)
<li>Support for One-One and One-Many relations (still no many-many)
<li>Support for LazyLoading (you can enable§/disable lazyloading by file or by code by per-basis needs)
<li> Support for IdentityMap
<li> Support for custom &#8220;finder&#8221; (you can still use complex SQL if you want)
<li> Complete support for CRUD
<li> Transactions
<li> Built in logging system to log *EVERY* sql or action performed by the framework
<li> Opened to multiple data access strategies (interfaced based, not inheritance based) for use with different database (now I&#8217;ve developed the firebird one using DBX)
<li> Caching for RTTI (the TSession object have a single TRttiContext holding ALL metadata)
</ul>
<p>Code is still under heavely development.</p>
<p>Those are 2 test-method to show the use of DORM:</p>
<div class="geshi no delphi">
<ol>
<li class="li1">
<div class="de1">TPerson <span class="sy3">=</span> <span class="kw1">class</span><span class="br0">&#40;</span><span class="kw4">TObject</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy1">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">property</span> Phones<span class="sy1">:</span> TdormCollection<span class="sy1">&#8230;.</span> <span class="co1">//implements IList</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">TPhone <span class="sy3">=</span> classs<span class="br0">&#40;</span><span class="kw4">TObject</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy1">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//and now the unit tests</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">procedure</span> TTestDORMHasMany<span class="sy1">.</span><span class="me1">Setup</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session <span class="sy1">:</span><span class="sy3">=</span> TSession<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">Configure</span><span class="br0">&#40;</span>TStreamReader<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="st0">&#39;dorm.conf&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">procedure</span> TTestDORMHasMany<span class="sy1">.</span><span class="me1">TearDown</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">procedure</span> TTestDORMHasMany<span class="sy1">.</span><span class="me1">TestHasManyLazyLoad</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">var</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p<span class="sy1">:</span> TPerson<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; t<span class="sy1">:</span> TPhone<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; guid<span class="sy1">:</span> <span class="kw4">string</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p <span class="sy1">:</span><span class="sy3">=</span> TPerson<span class="sy1">.</span><span class="me1">NewPersona</span><span class="sy1">;</span> &nbsp;<span class="co1">//static method. Return a fully populated TPerson object</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t <span class="sy1">:</span><span class="sy3">=</span> TPhone<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; p<span class="sy1">.</span><span class="me1">Phones</span><span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span>t<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Save</span><span class="br0">&#40;</span>p<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; guid <span class="sy1">:</span><span class="sy3">=</span> p<span class="sy1">.</span><span class="me1">guid</span><span class="sy1">;</span> &nbsp;<span class="co1">//GUIDs, or other PK types, are generated automagically by DORM. Obviously there is a specific class loaded to do this specified in the dorm.conf file)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Commit</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">StartTransaction</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Test with lazy load ON</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">SetLazyLoadFor</span><span class="br0">&#40;</span><span class="kw3">TypeInfo</span><span class="br0">&#40;</span>TPerson<span class="br0">&#41;</span><span class="sy1">,</span> <span class="st0">&#39;Phones&#39;</span><span class="sy1">,</span> <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p <span class="sy1">:</span><span class="sy3">=</span> Session<span class="sy1">.</span><span class="me1">Load</span><span class="br0">&#40;</span><span class="kw3">TypeInfo</span><span class="br0">&#40;</span>TPerson<span class="br0">&#41;</span><span class="sy1">,</span> guid<span class="br0">&#41;</span> <span class="kw1">as</span> TPerson<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CheckEquals<span class="br0">&#40;</span><span class="nu0">0</span><span class="sy1">,</span> p<span class="sy1">.</span><span class="me1">Phones</span><span class="sy1">.</span><span class="me1">Count</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Commit</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">StartTransaction</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Test with lazy load OFF</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">SetLazyLoadFor</span><span class="br0">&#40;</span><span class="kw3">TypeInfo</span><span class="br0">&#40;</span>TPerson<span class="br0">&#41;</span><span class="sy1">,</span> <span class="st0">&#39;Phones&#39;</span><span class="sy1">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p <span class="sy1">:</span><span class="sy3">=</span> Session<span class="sy1">.</span><span class="me1">Load</span><span class="br0">&#40;</span><span class="kw3">TypeInfo</span><span class="br0">&#40;</span>TPerson<span class="br0">&#41;</span><span class="sy1">,</span> guid<span class="br0">&#41;</span> <span class="kw1">as</span> TPerson<span class="sy1">;</span> <span class="co1">// Without commit, AV becouse IdentityMap doesn&#39;t work properly</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CheckEquals<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy1">,</span> p<span class="sy1">.</span><span class="me1">Phones</span><span class="sy1">.</span><span class="me1">Count</span><span class="br0">&#41;</span><span class="sy1">;</span> <span class="co1">// Child objects are loaded</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Commit</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">procedure</span> TTestDORMHasMany<span class="sy1">.</span><span class="me1">TestLoadHasMany</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">var</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; list<span class="sy1">:</span> IList<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; t<span class="sy1">,</span> t1<span class="sy1">:</span> TPhone<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p<span class="sy1">:</span> TPerson<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; guid<span class="sy1">:</span> <span class="kw4">string</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p <span class="sy1">:</span><span class="sy3">=</span> TPerson<span class="sy1">.</span><span class="me1">NewPersona</span><span class="sy1">;</span> &nbsp;<span class="co1">//static method. Return a fully populated TPerson object</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t <span class="sy1">:</span><span class="sy3">=</span> TPhone<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t<span class="sy1">.</span><span class="me1">Numero</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#39;555-7765123&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t<span class="sy1">.</span><span class="me1">Kind</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#39;Casa&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; p<span class="sy1">.</span><span class="me1">Phones</span><span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span>t<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t1 <span class="sy1">:</span><span class="sy3">=</span> TPhone<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t1<span class="sy1">.</span><span class="me1">Number</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#39;555-7765123&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; t1<span class="sy1">.</span><span class="me1">Kind</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#39;Casa&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; p<span class="sy1">.</span><span class="me1">Phones</span><span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span>t1<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Save</span><span class="br0">&#40;</span>p<span class="br0">&#41;</span><span class="sy1">;</span> <span class="co1">// save Person and Phones</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; guid <span class="sy1">:</span><span class="sy3">=</span> p<span class="sy1">.</span><span class="me1">guid</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Commit</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Session<span class="sy1">.</span><span class="me1">StartTransaction</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; p <span class="sy1">:</span><span class="sy3">=</span> Session<span class="sy1">.</span><span class="me1">Load</span><span class="br0">&#40;</span><span class="kw3">TypeInfo</span><span class="br0">&#40;</span>TPerson<span class="br0">&#41;</span><span class="sy1">,</span> guid<span class="br0">&#41;</span> <span class="kw1">as</span> TPerson<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CheckEquals<span class="br0">&#40;</span><span class="nu0">2</span><span class="sy1">,</span> p<span class="sy1">.</span><span class="me1">Phones</span><span class="sy1">.</span><span class="me1">Count</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Session<span class="sy1">.</span><span class="me1">Commit</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
</ol>
</div>
<p>Mapping, contained in a file called &#8220;dorm.conf&#8221;, is similar to the following:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;persistence&quot;</span>: <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;database_adapter&quot;</span>: <span class="st0">&quot;dorm.adapter.Firebird.TFirebirdPersistStrategy&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;database_connection_string&quot;</span>:<span class="st0">&quot;127.0.0.1:C:<span class="es0">\\</span>MyProjects<span class="es0">\\</span>DORM<span class="es0">\\</span>experiments<span class="es0">\\</span>dorm.fdb&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;username&quot;</span>: <span class="st0">&quot;sysdba&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;password&quot;</span>:<span class="st0">&quot;masterkey&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;config&quot;</span>: <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;package&quot;</span>: <span class="st0">&quot;dorm.bo.Person&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;logger_class_name&quot;</span>: <span class="st0">&quot;dorm.loggers.FileLog.TdormFileLog&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>, &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;mapping&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;TPerson&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;table&quot;</span>: <span class="st0">&quot;people&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;id&quot;</span>: <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;guid&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;guid&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span>, <span class="st0">&quot;default_value&quot;</span>: <span class="st0">&quot;&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fields&quot;</span>:<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;firstname&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;first_name&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;lastname&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;last_name&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;age&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;age&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;integer&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;borndate&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;born_date&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;date&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;has_many&quot;</span>:<span class="br0">&#91;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;name&quot;</span>: <span class="st0">&quot;Phones&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;class_name&quot;</span>:<span class="st0">&quot;TPhone&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;child_field_name&quot;</span>:<span class="st0">&quot;guid_person&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;lazy_load&quot;</span>: <span class="kw2">false</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;has_one&quot;</span>: <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;name&quot;</span>: <span class="st0">&quot;car&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;class_name&quot;</span>:<span class="st0">&quot;TCar&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;child_field_name&quot;</span>:<span class="st0">&quot;guid_person&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="st0">&quot;TPhone&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;table&quot;</span>: <span class="st0">&quot;phones&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;id&quot;</span>: <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;guid&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;guid&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span>, <span class="st0">&quot;default_value&quot;</span>: <span class="st0">&quot;&quot;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fields&quot;</span>:<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;number&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;number&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;kind&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;kind&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;name&quot;</span>:<span class="st0">&quot;guid_person&quot;</span>, <span class="st0">&quot;field&quot;</span>:<span class="st0">&quot;guid_person&quot;</span>, <span class="st0">&quot;field_type&quot;</span>:<span class="st0">&quot;string&quot;</span>, <span class="st0">&quot;size&quot;</span>: <span class="nu0">100</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The PODO (Plain Old Delphi Objects) can be binded to the VCL controls with a set of MediatingView (Model-GUI-Mediator Pattern) with an Observer mechanism to mantain things in synch.</p>
<p>Any comments? Someone interested?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=250</wfw:commentRss>
		</item>
		<item>
		<title>*VERY* busy time! RADSTUDIO XE, ITDevCon and other stuff</title>
		<link>http://www.danieleteti.it/?p=244</link>
		<comments>http://www.danieleteti.it/?p=244#comments</comments>
		<pubDate>Tue, 31 Aug 2010 07:45:56 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Embarcadero]]></category>

		<category><![CDATA[Events]]></category>

		<category><![CDATA[RAD STUDIO XE]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bit Time Software]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=244</guid>
		<description><![CDATA[This is a very busy time.
Some news:

RAD STUDIO XE is out
The ITDevCon time table will be published ASAP. This year I&#8217;m working to create a Time Table even more interesting than the last year (not simple!). The speakers will talk about DELPHI XE, RADPHP XE and a*LOT* of DataSnap. Complete list of topic are available [...]]]></description>
			<content:encoded><![CDATA[<p>This is a <strong>very</strong> busy time.</p>
<p>Some news:</p>
<ul>
<li>RAD STUDIO XE is <a href="http://www.embarcadero.com/rad-studio-xe-preview">out</a></li>
<li>The <a href="http://www.itdevcon.it">ITDevCon</a> time table will be published ASAP. This year I&#8217;m working to create a Time Table even more interesting than the last year (not simple!). The speakers will talk about DELPHI XE, RADPHP XE and a*LOT* of DataSnap. Complete list of topic are available in the conference web site home page.
</li>
<li>The italian RADSTUDIO XE events will be held in September, Tuesday 21 ROME and Wednesday 22 MILAN</li>
<li>Busy time also for this blog&#8230; I&#8217;m planning some really interesting stuff that I working on:
<ul>
<li>Nice stuff with the Delphi Language</li>
<li>MVC framework with scripting engine for web development in Delphi</li>
<li>DORM, the Delphi ORM</li>
<li>Some real-world samples for the new RAD STUDIO XE</li>
</ul>
</li>
</ul>
<p>What other to say?</p>
<p>Stay tuned</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=244</wfw:commentRss>
		</item>
		<item>
		<title>Delphi Day 2010</title>
		<link>http://www.danieleteti.it/?p=237</link>
		<comments>http://www.danieleteti.it/?p=237#comments</comments>
		<pubDate>Sat, 12 Jun 2010 14:02:57 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Continuous Integration]]></category>

		<category><![CDATA[Delphi 2010]]></category>

		<category><![CDATA[Events]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[bit Time Software]]></category>

		<category><![CDATA[Delphi Day]]></category>

		<category><![CDATA[Metologies]]></category>

		<category><![CDATA[Unit Tests]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=237</guid>
		<description><![CDATA[Also this year I was at Delphi Day with many others bit Time co-workers.
This year I did a speech about Continuous Integration and Unit Test with Delphi.
I showed some of the methodologies and tools that we used in bitTime for long and for whom we also offer training.
Many Delphi programmers and companies should consider adoption [...]]]></description>
			<content:encoded><![CDATA[<p>Also this year I was at Delphi Day with many others bit Time co-workers.<br />
This year I did a speech about <a href="http://en.wikipedia.org/wiki/Continuous_integration">Continuous Integration</a> and <a href="http://www.extremeprogramming.org/rules/unittests.html">Unit Test</a> with Delphi.</p>
<p>I showed some of the methodologies and tools that we used in <a href="http://www.bittime.it">bitTime</a> for long and for whom we also offer <a href="http://www.bittime.it/corsi.html">training</a>.</p>
<p>Many Delphi programmers and companies should consider adoption of this tecnique for  do more and better with the same effort (and the same money).</p>
<p>The event was interesting and was also an opportunity to meet some of the Italian Delphi programmers with which to meet and exchange ideas.</p>
<p>Marco wrote a nice <a href="http://blog.marcocantu.com/blog/delphi_day_2010_summary.html">summary of the event</a> in his blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=237</wfw:commentRss>
		</item>
		<item>
		<title>My interview at PHP Day 2010 has been published</title>
		<link>http://www.danieleteti.it/?p=234</link>
		<comments>http://www.danieleteti.it/?p=234#comments</comments>
		<pubDate>Mon, 17 May 2010 21:04:02 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Continuous Integration]]></category>

		<category><![CDATA[Programming]]></category>

		<category><![CDATA[bit Time Software]]></category>

		<category><![CDATA[interview]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[php-day]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=234</guid>
		<description><![CDATA[My interview at PHP Day 2010 has been published on php.html.it.
This is the link to the article.
This is the video on youtube.
The interview is only in italian language.
]]></description>
			<content:encoded><![CDATA[<p>My interview at PHP Day 2010 has been published on php.html.it.</p>
<p><a href="http://php.html.it/articoli/leggi/3383/continuous-integration-conversazione-con-daniele-teti/6/">This</a> is the link to the article.</p>
<p><a href="http://www.youtube.com/watch?v=9halA2EbADE">This</a> is the video on youtube.</p>
<p>The interview is only in italian language.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=234</wfw:commentRss>
		</item>
		<item>
		<title>My speech at “PHP Day 2010″</title>
		<link>http://www.danieleteti.it/?p=231</link>
		<comments>http://www.danieleteti.it/?p=231#comments</comments>
		<pubDate>Thu, 13 May 2010 12:54:13 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Continuous Integration]]></category>

		<category><![CDATA[Events]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=231</guid>
		<description><![CDATA[This time a very fast post&#8230;
For the third year in a row, I will talk at the PHP Day in Italy organized, as usual,  by the friends of GRUSP.
My speech will be about Continuous Integration and PHP, with a little introduction to Hudson.
This is the main conference website.
This is my speaker/speech page.
Enough fast?  [...]]]></description>
			<content:encoded><![CDATA[<p>This time a very fast post&#8230;<br />
For the third year in a row, I will talk at the PHP Day in Italy organized, as usual,  by the friends of <a href="http://www.grusp.it/">GRUSP</a>.</p>
<p>My speech will be about <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a> and PHP, with a little introduction to <a href="http://hudson-ci.org/">Hudson</a>.</p>
<p><a href="http://www.phpday.it/">This</a> is the main conference website.<br />
<a href="http://www.phpday.it/speaker/daniele-teti">This</a> is my speaker/speech page.</p>
<p>Enough fast? <img src='http://www.danieleteti.it/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=231</wfw:commentRss>
		</item>
		<item>
		<title>A Simple start with MVP in Delphi for Win32, Part 2</title>
		<link>http://www.danieleteti.it/?p=221</link>
		<comments>http://www.danieleteti.it/?p=221#comments</comments>
		<pubDate>Wed, 05 May 2010 23:22:20 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Delphi 2010]]></category>

		<category><![CDATA[Delphi Dependency Injection]]></category>

		<category><![CDATA[Design Patterns]]></category>

		<category><![CDATA[MVC]]></category>

		<category><![CDATA[MVP]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Passive View]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=221</guid>
		<description><![CDATA[Some month ago I wrote a simple article about an MVP variant called PassiveView.
That example was very simple. Now I&#8217;ll present a more &#8220;advanced&#8221; version of that example.
The main problem with first example was the following method:



procedure TfrmCalculatorView.FormCreate&#40;Sender: TObject&#41;;


begin


&#160; //Link controls with related interface


&#160; IFirstOperand := TGUIEdit.Create&#40;EditFirstOp&#41;;


&#160; ISecondOperand := TGUIEdit.Create&#40;EditSecondOp&#41;;


&#160; ICalcResult := TGUIEdit.Create&#40;EditResult&#41;;


&#160; IOperators := [...]]]></description>
			<content:encoded><![CDATA[<p>Some month ago I wrote a simple article about an MVP variant called PassiveView.<br />
That example was very simple. Now I&#8217;ll present a more &#8220;advanced&#8221; version of that example.</p>
<p>The main problem with first example was the following method:</p>
<div class="geshi no delphi">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">procedure</span> TfrmCalculatorView<span class="sy1">.</span><span class="me1">FormCreate</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> <span class="kw4">TObject</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//Link controls with related interface</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; IFirstOperand <span class="sy1">:</span><span class="sy3">=</span> TGUIEdit<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>EditFirstOp<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ISecondOperand <span class="sy1">:</span><span class="sy3">=</span> TGUIEdit<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>EditSecondOp<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ICalcResult <span class="sy1">:</span><span class="sy3">=</span> TGUIEdit<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>EditResult<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; IOperators <span class="sy1">:</span><span class="sy3">=</span> TGUISelectableList<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>ComboOperators<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; IError <span class="sy1">:</span><span class="sy3">=</span> TGUIEdit<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>EditError<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//link view and presenter</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; FPresenter <span class="sy1">:</span><span class="sy3">=</span> TCalculatorPresenter<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="kw2">Self</span><span class="br0">&#41;</span><span class="sy1">;</span> <span class="co1">//&lt;&lt;&#8211; THIS IS THE BAD LINE</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
</ol>
</div>
<p>The &#8220;BAD&#8221; line links the View with the Presenter but it&#8217;s in the view code, so this is meaning that View KNOWS the presenter&#8230; and this is not a good thing becouse the view is not so &#8220;passive&#8221;.</p>
<p>In a more advanced (and complex) version the View should be completely ignorant about the class that implement the presenter and the service.</p>
<p>In the main dpr file now the code now looks like the following.</p>
<div class="geshi no delphi">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">var</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; MainPresenter<span class="sy1">:</span> ICalculatorPresenter<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; CalculatorView<span class="sy1">:</span> TForm<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Application<span class="sy1">.</span><span class="kw3">Initialize</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Application<span class="sy1">.</span><span class="me1">MainFormOnTaskbar</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="kw2">True</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//SETUP THE MAIN APPLICATION FORM FOR VCL PURPOSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Application<span class="sy1">.</span><span class="me1">CreateForm</span><span class="br0">&#40;</span>TfrmCalculatorView<span class="sy1">,</span> CalculatorView<span class="br0">&#41;</span><span class="sy1">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//SETUP ALL THE LINKS BETWEEN THE MVP TRIAD</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; MainPresenter <span class="sy1">:</span><span class="sy3">=</span> TCalculatorPresenter<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>CalculatorView <span class="kw1">as</span> ICalculatorView<span class="sy1">,</span> TCalculatorService<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//LETS START!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Application<span class="sy1">.</span><span class="me1">Run</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">.</span></div>
</li>
</ol>
</div>
<p>Now the presenter take care about all links between the MVP triad.</p>
<div class="geshi no delphi">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">constructor</span> TCalculatorPresenter<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>CalculatorView<span class="sy1">:</span> ICalculatorView<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; CalculatorService<span class="sy1">:</span> ICalculatorService<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">inherited</span> Create<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; FCalculatorService <span class="sy1">:</span><span class="sy3">=</span> CalculatorService<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; FCalculatorView <span class="sy1">:</span><span class="sy3">=</span> CalculatorView<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; FCalculatorView<span class="sy1">.</span><span class="me1">SetPresenter</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; InitView<span class="sy1">;</span> &nbsp;<span class="co1">//does the links</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">;</span></div>
</li>
</ol>
</div>
<p>There is another addition to the previous example. Now there is only one constructor in the presenter, and using dependency injection take 2 interface for the view and the service.</p>
<div class="geshi no delphi">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">constructor</span> Create<span class="br0">&#40;</span>CalculatorView<span class="sy1">:</span> ICalculatorView<span class="sy1">;</span> CalculatorService<span class="sy1">:</span> ICalculatorService<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
</ol>
</div>
<p>Another plus is the possibility to open the same form a number of times without change the code for create it.</p>
<p>This is the GUI for this simple application.<br />
<div id="attachment_225" class="wp-caption alignnone" style="width: 310px"><a href="http://www.danieleteti.it/wp-content/uploads/2010/05/3mvpform.png"><img src="http://www.danieleteti.it/wp-content/uploads/2010/05/3mvpform-300x175.png" alt="3 instance of the same view with different presenter and service" title="3 instance of the same view with different presenter and service" width="300" height="175" class="size-medium wp-image-225" /></a><p class="wp-caption-text">3 instance of the same view with different presenter and service</p></div></p>
<p>As bonus, unit tests and mock object arent changed.</p>
<p>As usual the source code is <a href='http://www.danieleteti.it/wp-content/uploads/2010/05/passive-view-simple2.zip'>here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=221</wfw:commentRss>
		</item>
		<item>
		<title>Delphi Stomp Client (with FreePascal support)</title>
		<link>http://www.danieleteti.it/?p=219</link>
		<comments>http://www.danieleteti.it/?p=219#comments</comments>
		<pubDate>Sun, 18 Apr 2010 19:14:47 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Delphi 2010]]></category>

		<category><![CDATA[Message Oriented Middleware]]></category>

		<category><![CDATA[STOMP]]></category>

		<category><![CDATA[ActiveMQ]]></category>

		<category><![CDATA[DelphiStompClient]]></category>

		<category><![CDATA[MoM]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=219</guid>
		<description><![CDATA[Yes, I&#8217;ve just committed last version of DelphiStompClient, a STOMP client for Delphi 2010 (should works in 2007 and 2009 too) and FreePascal 2.4.
DelphiStompClient has been tested with Apache ActiveMQ 5.2 and 5.3 but should works with every STOMP compliant server.
You can find the code here, but if you need more info with example and [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I&#8217;ve just committed last version of DelphiStompClient, a STOMP client for Delphi 2010 (should works in 2007 and 2009 too) and FreePascal 2.4.</p>
<p>DelphiStompClient has been tested with Apache ActiveMQ 5.2 and 5.3 but should works with every STOMP compliant server.</p>
<p>You can find the code <a target="_blank" href="http://code.google.com/p/delphistompclient/">here</a>, but if you need more info with example and other stuff, <a href="http://www.danieleteti.it/?page_id=214">read entire article</a>.</p>
<p>The FreePascal version is mantained by Daniel Gaspary.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=219</wfw:commentRss>
		</item>
		<item>
		<title>New beta version for DataSnap Filters Compendium</title>
		<link>http://www.danieleteti.it/?p=209</link>
		<comments>http://www.danieleteti.it/?p=209#comments</comments>
		<pubDate>Thu, 08 Apr 2010 16:11:39 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[DataSnap Filters Compendium]]></category>

		<category><![CDATA[Delphi 2010]]></category>

		<category><![CDATA[DataSnap]]></category>

		<category><![CDATA[DSFC]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=209</guid>
		<description><![CDATA[I&#8217;ve  been very busy lately with some Delphi related events here in Italy

Delphi &#8220;Porte Aperte&#8221; (organized by Marco Cantù and bit Time Software)
Ready for the change? IT happens (organized by bit Time Software)

so I havent too much time for my personal open source project. But now I&#8217;ve released new beta version for DSFC.
This release [...]]]></description>
			<content:encoded><![CDATA[<p><span id="result_box" class="short_text"><span style="background-color: #ffffff;" title="Sono stato molto impegnato ultimamente">I&#8217;ve  been very busy lately with some Delphi related events here in Italy</span></span></p>
<ul>
<li><span id="result_box" class="short_text"><span style="background-color: #ffffff;" title="Sono stato molto impegnato ultimamente"><a href="http://www.wintech-italia.it/eventi/delphiporteaperte2010.htm" target="_blank">Delphi &#8220;Porte Aperte&#8221;</a> (organized by Marco Cantù and bit Time Software)</span></span></li>
<li><a href="http://www.bittime.it/index.php?page=33&amp;evento=45" target="_blank">Ready for the change? IT happens</a> (organized by bit Time Software)</li>
</ul>
<p>so I havent too much time for my personal open source project. But now I&#8217;ve released new beta version for DSFC.</p>
<p>This release address a problem with the cypher filters.</p>
<p>Cypher filters arent completely compatible with the previuous version, so you need to rebuild the server and the client if you want to use this new version of DSFC.</p>
<p>There are one known issue:</p>
<ul>
<li>Cannot have multiple connections in a client with the same filters but different cipher keys connecting to different servers.</li>
</ul>
<p>Some users asked to me a little tutorial to setup a demo application with the cypher filters. Now there is a project group illustrating how do it.</p>
<p>There is also a new net speed test.</p>
<p>I&#8217;m waiting for some testers feedback comment before of 1.1 version.</p>
<p>As usual you can find the source code in the GoogleCode SVN repository</p>
<p><a href="http://dsfc.googlecode.com" target="_blank">http://dsfc.googlecode.com</a></p>
<p>Happy testing!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=209</wfw:commentRss>
		</item>
		<item>
		<title>A simple Dependency Injection Container for Delphi</title>
		<link>http://www.danieleteti.it/?p=199</link>
		<comments>http://www.danieleteti.it/?p=199#comments</comments>
		<pubDate>Wed, 06 Jan 2010 20:20:29 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[Delphi 2010]]></category>

		<category><![CDATA[Delphi Dependency Injection]]></category>

		<category><![CDATA[Design Patterns]]></category>

		<category><![CDATA[delphidicontainer]]></category>

		<category><![CDATA[Dependency Injection]]></category>

		<category><![CDATA[Martin Fowler]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=199</guid>
		<description><![CDATA[As wikipedia says:
&#8220;Dependency injection (DI) in computer programming refers to the process of supplying an external dependency to a software component. It is a specific form of inversion of control where the concern being inverted is the process of obtaining the needed dependency. The term was first coined by Martin Fowler to describe the mechanism [...]]]></description>
			<content:encoded><![CDATA[<p>As wikipedia says:</p>
<p>&#8220;Dependency injection (DI) in computer programming refers to the process of supplying an external dependency to a <span class="mw-redirect">software component</span>. It is a specific form of inversion of control where the concern being inverted is the process of obtaining the needed dependency. The term was first coined by Martin Fowler to describe the mechanism more clearly.<sup id="cite_ref-0" class="reference"><a href="http://en.wikipedia.org/wiki/Dependency_injection#cite_note-0"></a></sup>&#8221;</p>
<p>Many of us have already read <a href="http://martinfowler.com/articles/injection.html" target="_blank">this historical article</a> from Martin Fowler about dependency injection pattern, but actually there isn&#8217;t a real framework for implement dependency injection in Delphi.</p>
<p>There are already the following implementation for DI in Delphi</p>
<ul>
<li><a href="http://code.google.com/p/emballo/" target="_blank">Emballo</a> (work with pre-D2010 too, but the implementation require changes in the service classes. I really hate it)<a href="http://code.google.com/p/emballo/" target="_blank"><br />
</a></li>
<li><a href="http://code.google.com/p/delphi-spring-framework/" target="_blank">Delphi Spring Framework</a> (very nice, but still not realeased)<a href="http://code.google.com/p/delphi-spring-framework/" target="_blank"><br />
</a></li>
</ul>
<p>So, I decided to write my own simple DI framework.</p>
<p>You can find the code at google code project here: <a href="http://code.google.com/p/delphidicontainer/" target="_blank">http://code.google.com/p/delphidicontainer/</a></p>
<p>This is the first public version and come with sample, documentation and unit tests.</p>
<p>Folow some sample code.</p>
<div class="geshi no delphi">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">program</span> Test01<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">{$APPTYPE CONSOLE}</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">uses</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; SysUtils<span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; DIContainer <span class="kw1">in</span> <span class="st0">&#39;..\..\src\DIContainer.pas&#39;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ServiceTestObjectsU <span class="kw1">in</span> <span class="st0">&#39;..\..\UnitTest\ServiceTestObjectsU.pas&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">var</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; DIContainer<span class="sy1">:</span> TDIContainer<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s1<span class="sy1">:</span> TService1<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s2<span class="sy1">:</span> TService2<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s3<span class="sy1">:</span> TService3<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s6<span class="sy1">:</span> TService6<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; s7<span class="sy1">:</span> TService7<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; DIContainer <span class="sy1">:</span><span class="sy3">=</span> TDIContainer<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">try</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// AddComponent with TClass with and &nbsp; InitType = Singleton</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DIContainer<span class="sy1">.</span><span class="me1">AddComponent</span><span class="br0">&#40;</span>TService1<span class="sy1">,</span> TDIContainerInitType<span class="sy1">.</span><span class="me1">Singleton</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// AddComponent with QualifiedName and InitType = Singleton</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DIContainer<span class="sy1">.</span><span class="me1">AddComponent</span><span class="br0">&#40;</span><span class="st0">&#39;ServiceTestObjectsU.TService2&#39;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TDIContainerInitType<span class="sy1">.</span><span class="me1">Singleton</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// AddComponent with QualifiedName and InitType = CreateNewInstance</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DIContainer<span class="sy1">.</span><span class="me1">AddComponent</span><span class="br0">&#40;</span><span class="st0">&#39;ServiceTestObjectsU.TService3&#39;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TDIContainerInitType<span class="sy1">.</span><span class="me1">CreateNewInstance</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// GetComponent with QualifiedName</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s1 <span class="sy1">:</span><span class="sy3">=</span> DIContainer<span class="sy1">.</span><span class="me1">GetComponent</span><span class="br0">&#40;</span><span class="st0">&#39;ServiceTestObjectsU.TService1&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">as</span> TService1<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s1<span class="sy1">.</span><span class="me1">Message</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#39;I&#39;</span><span class="st0">&#39;m the first message&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>s1<span class="sy1">.</span><span class="me1">Message</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// GetComponent with TClass</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s2 <span class="sy1">:</span><span class="sy3">=</span> DIContainer<span class="sy1">.</span><span class="me1">GetComponent</span><span class="br0">&#40;</span>TService2<span class="br0">&#41;</span> <span class="kw1">as</span> TService2<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s2<span class="sy1">.</span><span class="me1">Message</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#39;I&#39;</span><span class="st0">&#39;m the second message&#39;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>s2<span class="sy1">.</span><span class="me1">Message</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// GetComponent with a dependent service (TService3 depends upon TService1 and TService2)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s3 <span class="sy1">:</span><span class="sy3">=</span> DIContainer<span class="sy1">.</span><span class="me1">GetComponent</span><span class="br0">&#40;</span><span class="st0">&#39;ServiceTestObjectsU.TService3&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">as</span> TService3<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>s3<span class="sy1">.</span><span class="me1">GetCompoundMessage</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// s3 is not created as Singleton, so after use it I must free it</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s3<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// AddComponent with QualifiedClassName, a custom initializer, an alias.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Component will be created as singleton (single instance managed by Container)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DIContainer<span class="sy1">.</span><span class="me1">AddComponent</span><span class="br0">&#40;</span>DIContainerUtils<span class="sy1">.</span><span class="me1">GetQualifiedClassName</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>TService6<span class="br0">&#41;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">function</span><span class="sy1">:</span> <span class="kw4">TObject</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result <span class="sy1">:</span><span class="sy3">=</span> TService6<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span>TService1<span class="br0">&#41;</span> <span class="kw1">as</span> TService1<span class="sy1">,</span>DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span>TService1<span class="br0">&#41;</span> <span class="kw1">as</span> TService1<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;srv6&#39;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TDIContainerInitType<span class="sy1">.</span><span class="me1">Singleton</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s6 <span class="sy1">:</span><span class="sy3">=</span> DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span><span class="st0">&#39;srv6&#39;</span><span class="br0">&#41;</span> <span class="kw1">as</span> TService6<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>s6<span class="sy1">.</span><span class="me1">ToString</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s6 <span class="sy1">:</span><span class="sy3">=</span> DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span><span class="st0">&#39;srv6&#39;</span><span class="br0">&#41;</span> <span class="kw1">as</span> TService6<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>s6<span class="sy1">.</span><span class="me1">ToString</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// AddComponent with QualifiedClassName, a custom initializer, an alias.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Component will be created as singleton (single instance managed by Container)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DIContainer<span class="sy1">.</span><span class="me1">AddComponent</span><span class="br0">&#40;</span>DIContainerUtils<span class="sy1">.</span><span class="me1">GetQualifiedClassName</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>TService7<span class="br0">&#41;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">function</span><span class="sy1">:</span> <span class="kw4">TObject</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result <span class="sy1">:</span><span class="sy3">=</span> TService7<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span>TService1<span class="br0">&#41;</span> <span class="kw1">as</span> TService1<span class="sy1">,</span>DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span>TService1<span class="br0">&#41;</span> <span class="kw1">as</span> TService1<span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;srv7intf&#39;</span><span class="sy1">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TDIContainerInitType<span class="sy1">.</span><span class="me1">Singleton</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; s7 <span class="sy1">:</span><span class="sy3">=</span> DIContainer<span class="sy1">.</span><span class="me1">Get</span><span class="br0">&#40;</span><span class="st0">&#39;srv7intf&#39;</span><span class="br0">&#41;</span> <span class="kw1">as</span> TService7<span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>s7<span class="sy1">.</span><span class="me1">ToString</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">finally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DIContainer<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">except</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">on</span> E<span class="sy1">:</span> Exception <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>E<span class="sy1">.</span><span class="me1">ClassName</span><span class="sy1">,</span> E<span class="sy1">.</span><span class="me1">Message</span><span class="br0">&#41;</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">end</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">readln</span><span class="sy1">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span><span class="sy1">.</span></div>
</li>
</ol>
</div>
<p>DelphiDIContainer also handle constructor injection with automatic dependency resolution for service.</p>
<p>Enjoy and stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=199</wfw:commentRss>
		</item>
		<item>
		<title>News and small fixes for DataSnap Filters compendium</title>
		<link>http://www.danieleteti.it/?p=195</link>
		<comments>http://www.danieleteti.it/?p=195#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:14:41 +0000</pubDate>
		<dc:creator>Daniele Teti</dc:creator>
		
		<category><![CDATA[DataSnap Filters Compendium]]></category>

		<category><![CDATA[DataSnap]]></category>

		<category><![CDATA[Delphi 2010]]></category>

		<category><![CDATA[DSFC]]></category>

		<guid isPermaLink="false">http://www.danieleteti.it/?p=195</guid>
		<description><![CDATA[DataSnap Filters Compendium has been used by many users so far. I&#8217;m planning to do some change in hash filters (that do not will affect already written code) but until new version will ready I have 3 nice news about DSFC:
1. Now the project is on Google Code.
2. Franco Perana, the first contributor to the [...]]]></description>
			<content:encoded><![CDATA[<p>DataSnap Filters Compendium has been used by many users so far. I&#8217;m planning to do some change in hash filters (that do not will affect already written code) but until new version will ready I have 3 nice news about DSFC:</p>
<p>1. Now the project is on <a title="Google Code" href="http://code.google.com/p/dsfc/" target="_blank">Google Code</a>.</p>
<p>2. Franco Perana, the first contributor to the project, has fixed and optimized the LZO filter.</p>
<p>3. Have you used DSFC and do you want to see your application listed in the &#8220;Application Using DSFC&#8221;? If yes, leave a comment on this post with some details of your application amd I&#8217;ll add it in the proper list.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danieleteti.it/?feed=rss2&amp;p=195</wfw:commentRss>
		</item>
	</channel>
</rss>
