<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>maonet technotes &#187; Repository</title>
	<atom:link href="http://maonet.wordpress.com/tag/repository/feed/" rel="self" type="application/rss+xml" />
	<link>http://maonet.wordpress.com</link>
	<description>IOC(SM):MOC(RM):TDD(NU):SCC(TFS):ORM(L2S):JSL(Jq):CIS(CC)</description>
	<lastBuildDate>Thu, 31 Dec 2009 17:16:53 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='maonet.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/27569a47b055d3d0ff1d52cf3b0ce0d7?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>maonet technotes &#187; Repository</title>
		<link>http://maonet.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://maonet.wordpress.com/osd.xml" title="maonet technotes" />
		<item>
		<title>IRepository</title>
		<link>http://maonet.wordpress.com/2009/02/11/irepository/</link>
		<comments>http://maonet.wordpress.com/2009/02/11/irepository/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 19:07:44 +0000</pubDate>
		<dc:creator>Frank Mao</dc:creator>
				<category><![CDATA[CSLA]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Repository]]></category>

		<guid isPermaLink="false">http://maonet.wordpress.com/?p=464</guid>
		<description><![CDATA[I was trying to write a similar post as Mike did. Because I&#8217;m currently using LINQ DynamicQuery, so my IRepository looks like this:


    public interface IDynamicQueryable&#60;T&#62;
    {
        IEnumerable&#60;T&#62; FindAllByCriteria(string criteria);
        IEnumerable&#60;T&#62; FindAllByCriteria(Func&#60;T, bool&#62; criteria);
    }

    // Most simple repository implement this one.
    public interface IRepository&#60;T&#62; 
    {       
         [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maonet.wordpress.com&blog=431779&post=464&subd=maonet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I was trying to write a <a href="http://mikehadlow.blogspot.com/2009/01/in-search-of-wild-repository.html">similar post as Mike did</a>. Because I&#8217;m currently using <a href="http://msdn2.microsoft.com/en-us/bb330936.aspx">LINQ DynamicQuery</a>, so my IRepository looks like this:</p>
<pre class="brush: csharp;">

    public interface IDynamicQueryable&lt;T&gt;
    {
        IEnumerable&lt;T&gt; FindAllByCriteria(string criteria);
        IEnumerable&lt;T&gt; FindAllByCriteria(Func&lt;T, bool&gt; criteria);
    }

    // Most simple repository implement this one.
    public interface IRepository&lt;T&gt; 
    {       
              T FindById(int id);
              T Insert(T data);
              T Update(T newData, T oldData);
              void Delete(T data);
     }

    // Some fancy entities implement this one instead.
    public interface IDynamicQueryableRepository&lt;T&gt; : IDynamicQueryable&lt;T&gt;, IRepository&lt;T&gt;{}
</pre>
<p>I spilt the dynamic part from IRepository, just trying not annoy developer create too many never used FindAll() method in their entities. And also I think this is closer to Interface segregation Principle (not really sure). But this indeed gave me flexibility to control the function diversity on different entities, e.g., some entities might never need list-editing/retrieval function.</p>
<p>I do like this LinqDynamicQuery very much and don&#8217;t mind to make my repository coupled to Func&lt;T, bool&gt; (what&#8217;s this indeed? And what&#8217; the difference than Expression&lt;Func&lt;T, bool&gt;&gt; shown in Fluent NHibernate&#8217;s IRepository?)  Here is a good example, if no DynamicQuery:</p>
<pre class="brush: csharp;">

    public interface ICityRepository : IDynamicQueryableRepository&lt;CityBO&gt;
    {
        IEnumerable&lt;CityBO&gt; FindAllByProvinceId(int provinceId);
        IEnumerable&lt;CityBO&gt; FindAllByCountryId(int countryId);
    }
</pre>
<p>By using DynamicQuery,</p>
<pre class="brush: csharp;">

    public class CityListFactory : BusinessListBaseServerFactory&lt;CityBOCollection, CityBO, ICityRepository&gt;, ICityListFactory
    {
        public CityBOCollection Fetch(CountryBO parent)
        {
            // Don't need FindAllByCountryId() any more.
            return Fetch(x =&gt; x.CountryId == parent.CountryId);
        }
        public CityBOCollection Fetch(ProvinceBO parent)
        {
            return Fetch(x =&gt; x.ProvinceId == parent.ProvinceId);
        }
    }
</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/maonet.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/maonet.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/maonet.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/maonet.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/maonet.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/maonet.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/maonet.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/maonet.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/maonet.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/maonet.wordpress.com/464/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=maonet.wordpress.com&blog=431779&post=464&subd=maonet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://maonet.wordpress.com/2009/02/11/irepository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d41c3a25ca01f1e979e2bc86b8c4ed38?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">FMao</media:title>
		</media:content>
	</item>
	</channel>
</rss>