<?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>butaji</title>
	<atom:link href="https://butaji.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://butaji.wordpress.com</link>
	<description>the story of my tech.life</description>
	<lastBuildDate>Wed, 28 Jul 2010 07:33:55 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">4404897</site><cloud domain='butaji.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>butaji</title>
		<link>https://butaji.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://butaji.wordpress.com/osd.xml" title="butaji" />
	<atom:link rel='hub' href='https://butaji.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Generate SharePoint project constants with T4 by feature definitions</title>
		<link>https://butaji.wordpress.com/2010/07/25/generate-sharepoint-project-constants-with-t4-by-feature-definitions/</link>
					<comments>https://butaji.wordpress.com/2010/07/25/generate-sharepoint-project-constants-with-t4-by-feature-definitions/#comments</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Sat, 24 Jul 2010 21:52:51 +0000</pubDate>
				<category><![CDATA[sharepoint]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/?p=836</guid>

					<description><![CDATA[Problem Usually the main problem of SharePoint development is accessing SPListItem fields values by theirs internal names of field ids. For example: The output file will be like that: But in some scenarios fieldId doesn&#8217;t help me for get values, such as get it in item event receivers. In this case I need to know [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Problem</h2>
<p>Usually the main problem of SharePoint development is accessing SPListItem fields values by theirs internal names of field ids. For example:</p>
<pre class="brush: csharp; title: ; notranslate">

SPListItem listItem = GetLIstItem();
// I prefer to use field ids for speed and garanteed way extract values
listItem[SPBuiltInFieldId.Title]

</pre>
<p>The output file will be like that:</p>
<pre class="brush: csharp; title: ; notranslate">
</pre>
<p>But in some scenarios fieldId doesn&#8217;t help me for get values, such as get it in <a href="http://msdn.microsoft.com/en-us/library/ff648923.aspx">item event receivers</a>. In this case I need to know the field internal name.</p>
<pre class="brush: csharp; title: ; notranslate">

public override void ItemAdding(SPItemEventProperties properties)
        {
            string toolTipFieldInternalName = &quot;&quot;;
            //oops, this place have some perfomance overhead
            using (SPWeb web = properties.OpenWeb())
            {
                toolTipFieldInternalName = web.Lists[properties.ListId].Fields[toolTipFieldId].InternalName;
 
            }
 
            string urlVal = properties.AfterProperties[&quot;URL&quot;].ToString();
            SPFieldUrlValue val = new SPFieldUrlValue(urlVal);
            string desc = val.Description;
            properties.AfterProperties[toolTipFieldInternalName] = desc;
        }

</pre>
<blockquote><p>For best experience you may install <a href="http://www.visualt4.com/">Visual T4 Editor </a> </p></blockquote>
<p>There is a simple way to extract and generate usefull constants for field ids and internal names from features definition files in your project with T4 mechanism built-in into visual studio:</p>
<p>Constants.tt (this code works fine only in Visual Studio 2010)</p>
<pre class="brush: csharp; title: ; notranslate">
&lt;#@ template inherits=&quot;Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation&quot; language=&quot;C#&quot; debug=&quot;true&quot; hostSpecific=&quot;true&quot; #&gt;
&lt;#@ assembly name=&quot;Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll&quot;#&gt;

&lt;#@ output extension=&quot;.cs&quot; #&gt;
&lt;#@ Assembly Name=&quot;System.Core.dll&quot; #&gt;
&lt;#@ Assembly Name=&quot;System.Xml.dll&quot; #&gt;
&lt;#@ Assembly Name=&quot;System.Xml.Linq.dll&quot; #&gt;
&lt;#@ Assembly Name=&quot;System.Windows.Forms.dll&quot; #&gt;
&lt;#@ Assembly Name=&quot;EnvDTE&quot; #&gt;
&lt;#@ import namespace=&quot;System&quot; #&gt;
&lt;#@ import namespace=&quot;System.IO&quot; #&gt;
&lt;#@ import namespace=&quot;System.Diagnostics&quot; #&gt;
&lt;#@ import namespace=&quot;System.Linq&quot; #&gt;
&lt;#@ import namespace=&quot;System.Xml.Linq&quot; #&gt;
&lt;#@ import namespace=&quot;System.Collections&quot; #&gt;
&lt;#@ import namespace=&quot;System.Reflection&quot; #&gt;
&lt;#@ import namespace=&quot;System.Collections.Generic&quot; #&gt; 
&lt;#@ import namespace=&quot;EnvDTE&quot; #&gt;
&lt;#@ import namespace=&quot;Microsoft.VisualStudio.TextTemplating&quot; #&gt;
&lt;# 
var currentDirectory = Path.GetDirectoryName(Host.TemplateFile);
var xmlFiles = Directory.GetFiles(currentDirectory, &quot;*.xml&quot;, SearchOption.AllDirectories);
var fieldQualifier = XName.Get(&quot;Field&quot;, &quot;http://schemas.microsoft.com/sharepoint/&quot;);
var listdQualifier = XName.Get(&quot;ListInstance&quot;, &quot;http://schemas.microsoft.com/sharepoint/&quot;);
#&gt;using System;	

namespace &lt;#= System.Runtime.Remoting.Messaging.CallContext.LogicalGetData(&quot;NamespaceHint&quot;) #&gt;
{
    public static partial class Constants 
    {
        public static class Fields
        {
&lt;#  
		var fields = xmlFiles
					.Select(XDocument.Load)
					.Select(d =&gt; d.Descendants(fieldQualifier))
					.SelectMany(x =&gt; x)
					.Where(i =&gt; i != null)
					.Select(i =&gt; new KeyValuePair&lt;string, string&gt;(
							i.Attribute(&quot;ID&quot;) != null ? i.Attribute(&quot;ID&quot;).Value : null,
							i.Attribute(&quot;Name&quot;) != null ? i.Attribute(&quot;Name&quot;).Value : null))
					.Where(i =&gt; !string.IsNullOrEmpty(i.Key) &amp;&amp; !string.IsNullOrEmpty(i.Value))
					.Distinct();
            foreach (var field in fields)
            {
			#&gt;
            public static string &lt;#= field.Value #&gt;_InternalName = &quot;&lt;#= field.Value #&gt;&quot;;
            public static Guid &lt;#= field.Value #&gt;_Id = new Guid(&quot;&lt;#= field.Key #&gt;&quot;);
			
&lt;#
			}
		   #&gt;

		}

        public static class Lists
        {
		}
    }
} 

</pre>
<p>The output file will be like follow:</p>
<pre class="brush: csharp; title: ; notranslate">


 
using System;	

namespace MyProjectNameSpace.Project1
{
    public static partial class Constants 
    {
        public static class Fields
        {
            public static string DocKind_InternalName = &quot;DocKind&quot;;
            public static Guid DocKind_Id = new Guid(&quot;{b4fc3e5e-7573-4e39-9417-81d85f25ed73}&quot;);
			
            public static string RegDate_InternalName = &quot;RegDate&quot;;
            public static Guid RegDate_Id = new Guid(&quot;{e453a0ee-7797-4d90-941c-0ea9a775f48d}&quot;);
			
            public static string RegUser_InternalName = &quot;RegUser&quot;;
            public static Guid RegUser_Id = new Guid(&quot;{616997f5-6cf2-4795-b625-d7b7f4681a2e}&quot;);
        }

       public static class Lists
       {
       }
    }
} 
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/07/25/generate-sharepoint-project-constants-with-t4-by-feature-definitions/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">836</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>
	</item>
		<item>
		<title>Пишем клиента для OData на Python</title>
		<link>https://butaji.wordpress.com/2010/06/27/%d0%bf%d0%b8%d1%88%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-odata-%d0%bd%d0%b0-python/</link>
					<comments>https://butaji.wordpress.com/2010/06/27/%d0%bf%d0%b8%d1%88%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-odata-%d0%bd%d0%b0-python/#respond</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Sun, 27 Jun 2010 20:16:28 +0000</pubDate>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[oData]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Netflix]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/?p=816</guid>

					<description><![CDATA[Open Data Protocol Что это такое и для чего создан очень хорошо рассказано в этом видео: http://www.msteched.com/2010/NorthAmerica/DEV208 Python Одним из аргументов в пользу OData звучит то, что данный протокол не зависит от платформы, и это очевидно (AtomPub), а так же не привязан к конкретному вендору. Но всё же я решил набросать небольшой пример, в котором [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Open Data Protocol</strong></p>
<p><a href="http://www.odata.org/"><img class="alignright" style="color:white;background:white;" title="OData" src="https://i0.wp.com/www.odata.org/images/OData_logo_MS_small.png" alt="" width="280" height="34" /></a>Что это такое и для чего создан очень хорошо рассказано в этом видео: <a href="http://www.msteched.com/2010/NorthAmerica/DEV208">http://www.msteched.com/2010/NorthAmerica/DEV208</a></p>
<p><strong>Python</strong></p>
<p>Одним из аргументов в пользу OData звучит то, что данный протокол не зависит от платформы, и это очевидно (<a href="http://atompub.org/">AtomPub</a>), а так же не привязан к <a href="http://www.odata.org/producers">конкретному вендору</a>. Но всё же я решил набросать небольшой пример, в котором эмулировать привычный .NET API для работы с OData</p>
<p><strong>Lets code it</strong></p>
<pre class="brush: python; title: ; notranslate">
import odata

url = &quot;http://odata.netflix.com/Catalog/&quot;

service = odata.service(url)

service.Languages

languages = service.execute()

print languages
</pre>
<p>Давайте разбираться, что же написано выше.</p>
<pre><a href="http://odata.netflix.com/Catalog/">http://odata.netflix.com/Catalog/</a> - netflix является одним из официальных <a href="http://www.odata.org/producers">поставщиков OData</a></pre>
<p>Итак, мы импортируем наш модуль OData, который мы реализуем чуть позже, далее создаем сервис, для получения данных и читаем какие языки будет предоставлять нам <a href="http://www.netflix.com/">netflix</a>.</p>
<p><em>odata.py</em></p>
<pre class="brush: python; title: ; notranslate">
import urllib2
import feedparser

version = '0.1'
</pre>
<p><a href="http://code.google.com/p/feedparser/">feedparser</a> &#8212; не входит в набор стандартных библиотек python, поэтому её надо будет скачать и установить, как видно из нахвания библиотека предоставляет гибкий API для доступа к различным лентам данных, а следовательно отлично подходит для нашей будущей реализации</p>
<pre class="brush: python; title: ; notranslate">
class service(interceptor):
    def __init__(self, url):
        self.url = url
</pre>
<p>Реализация класса service (фактически data-<a href="http://en.wikipedia.org/wiki/Proxy_pattern">proxy</a>), который будет основной точкой доступа для работы с данными.</p>
<p>Очевидно, что для запроса Languages, это свойство должно присутствовать в нашей реализации, но так же не менее очевидно, что каждая реализация OData ленты может предоставлять свои собственные данные, в связи с этим мы реализуем некоторый механизм формирования запросов на основе полученных от пользователя вызовах.</p>
<p>Внимательный читатель мог заметить, что <em>service </em>наследует от некоторого класса <em>interceptor</em>, вот он:</p>
<pre class="brush: python; title: ; notranslate">
class interceptor(object):
    def __getattribute__(self, name):
        try:
            return object.__getattribute__(self, name)
        except:
            self.property = name
</pre>
<p>Из реализации видно, что наш класс занимается тем, что отлавливает вызов несуществующих свойств, к примеру наш <em>Languages </em>и записывает последний в поле <em>property.</em></p>
<p>Следующей итерацией необходимо имплементировать вызов метода получения данных <em>execute()</em></p>
<pre class="brush: python; title: ; notranslate">
class service(interceptor):
    def __init__(self, url):
        self.url = url

    def execute(self):
        proc_url = self.url + &quot;/&quot; + self.property
        result = feedparser.parse(proc_url)
        for entry in result.entries: print entry.title
</pre>
<p>В данном методе мы формируем url-строку для запроса ленты данных, в последствии пробегаемся по результату и выводим значения клиенту.</p>
<p>Это лишь начальная стадия реализации, многие вопросы не учтены (фильтрация данных, построение запросов и прочее), однако данный пример наглядно указывает на общеупотребимость Open Data Protocol в повседневных нуждах разработки.</p>
<p><strong>Что почитать</strong></p>
<p>Adventures in Meta programming in Python: im_class, __import__, __getattribute__ <a href="http://www.lostechies.com/blogs/rssvihla/archive/2010/01/08/adventures-in-meta-programming-in-python-im-class-import-getattribute.aspx">http://www.lostechies.com/blogs/rssvihla/archive/2010/01/08/adventures-in-meta-programming-in-python-im-class-import-getattribute.aspx</a></p>
<p><span style="font-weight:normal;">Introducing a Ruby OData Client Library <a href="http://blogs.visoftinc.com/archive/2010/06/12/Introducing-a-Ruby-OData-Client-Library.aspx">http://blogs.visoftinc.com/archive/2010/06/12/Introducing-a-Ruby-OData-Client-Library.aspx</a></span></p>
<p>LINQPad теперь тоже понимает OData <a href="http://www.linqpad.net/Beta.aspx">http://www.linqpad.net/Beta.aspx</a></p>
<p><span style="font-weight:normal;">Создание OData API для StackOverflow включая XML и JSON за 30 минут <a href="http://blog.zzlab.ru/perevod/sozdanie-odata-api-dlya-stackoverflow-vklyuchaya-xml-i-json-za-30-minut.html">http://blog.zzlab.ru/perevod/sozdanie-odata-api-dlya-stackoverflow-vklyuchaya-xml-i-json-za-30-minut.html</a></span></p>
<p>Что такое API данных Google? <a href="http://code.google.com/intl/ru-RU/apis/gdata/">http://code.google.com/intl/ru-RU/apis/gdata/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/06/27/%d0%bf%d0%b8%d1%88%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-odata-%d0%bd%d0%b0-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">816</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="http://www.odata.org/images/OData_logo_MS_small.png" medium="image">
			<media:title type="html">OData</media:title>
		</media:content>
	</item>
		<item>
		<title>Презентации с выступлений на прошлой неделе</title>
		<link>https://butaji.wordpress.com/2010/05/24/%d0%bf%d1%80%d0%b5%d0%b7%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d0%b8-%d1%81-%d0%b2%d1%8b%d1%81%d1%82%d1%83%d0%bf%d0%bb%d0%b5%d0%bd%d0%b8%d0%b9-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d1%88%d0%bb%d0%be%d0%b9/</link>
					<comments>https://butaji.wordpress.com/2010/05/24/%d0%bf%d1%80%d0%b5%d0%b7%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d0%b8-%d1%81-%d0%b2%d1%8b%d1%81%d1%82%d1%83%d0%bf%d0%bb%d0%b5%d0%bd%d0%b8%d0%b9-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d1%88%d0%bb%d0%be%d0%b9/#respond</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Mon, 24 May 2010 19:35:28 +0000</pubDate>
				<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/?p=803</guid>

					<description><![CDATA[На прошлой неделе состоялось 2 очень значимых для меня мероприятия: SPConf &#8212; SharePoint Conference Russia 2010 http://rusug.net/spconf. ReMIX &#8212; ReMIX http://remix.ru. На обоих мероприятиях мне посчастливилось выступать. Очень доволен как организацией, так и новыми знакомствами. Если кому-то интересно, выкладываю здесь свои материалы (пока только слайды, чуть позже будут ещё и видео) с обоих выступлений.]]></description>
										<content:encoded><![CDATA[<p>На прошлой неделе состоялось 2 очень значимых для меня мероприятия:</p>
<ul>
<li><strong>SPConf </strong>&#8212; SharePoint Conference Russia 2010 <a href="http://rusug.net/spconf">http://rusug.net/spconf</a>.</li>
<li><strong>ReMIX</strong> &#8212; ReMIX <a href="http://remix.ru">http://remix.ru</a>.</li>
</ul>
<p>На обоих мероприятиях мне посчастливилось выступать. Очень доволен как организацией, так и новыми знакомствами. Если кому-то интересно, выкладываю здесь свои материалы (пока только слайды, чуть позже будут ещё и видео) с обоих выступлений.</p>
<p><iframe src='https://www.slideshare.net/slideshow/embed_code/4151626' width='590' height='484' sandbox="allow-popups allow-scripts allow-same-origin allow-presentation" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe><br />
<iframe src='https://www.slideshare.net/slideshow/embed_code/4271173' width='590' height='484' sandbox="allow-popups allow-scripts allow-same-origin allow-presentation" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></p>
<p><div class="embed-vimeo" style="text-align: center;"><iframe src="https://player.vimeo.com/video/12043860" width="590" height="332" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div><br />
<div class="embed-vimeo" style="text-align: center;"><iframe src="https://player.vimeo.com/video/12044157" width="590" height="332" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div><br />
<div class="embed-vimeo" style="text-align: center;"><iframe src="https://player.vimeo.com/video/12154473" width="590" height="332" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div></p>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/05/24/%d0%bf%d1%80%d0%b5%d0%b7%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d0%b8-%d1%81-%d0%b2%d1%8b%d1%81%d1%82%d1%83%d0%bf%d0%bb%d0%b5%d0%bd%d0%b8%d0%b9-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d1%88%d0%bb%d0%be%d0%b9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">803</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint and oData</title>
		<link>https://butaji.wordpress.com/2010/04/11/sharepoint-and-odata/</link>
					<comments>https://butaji.wordpress.com/2010/04/11/sharepoint-and-odata/#comments</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Sun, 11 Apr 2010 12:48:31 +0000</pubDate>
				<category><![CDATA[oData]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/2010/04/11/sharepoint-and-odata/</guid>

					<description><![CDATA[В SharePoint 2010 многое сделано для открытости доступа к данным, в том числе поддержка oData. Клиентская модель построена поверх этих возможностей. Для того, чтобы опробовать возможности SharePoint oData в действии вам достаточно вызвать сервис ListData: http://[serverName]/_vti_bin/ListData.svc Если в результате получите ошибку 404, то скорее всего у вас не стоит ADO.NET Data Services v1.5 CTP2 Далее [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>В SharePoint 2010 многое сделано для открытости доступа к данным, в том числе поддержка <a href="http://www.odata.org/">oData</a>. Клиентская модель построена поверх этих возможностей.</p>
<p>Для того, чтобы опробовать возможности SharePoint oData в действии вам достаточно вызвать сервис ListData:</p>
<p><a href="http://[serverName]/_vti_bin/ListData.svc">http://[serverName]/_vti_bin/ListData.svc</a></p>
<blockquote><p>Если в результате получите ошибку 404, то скорее всего у вас не стоит <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a71060eb-454e-4475-81a6-e9552b1034fc&amp;displaylang=en">ADO.NET Data Services v1.5 CTP2</a></p></blockquote>
<p>Далее можно попробовать воспользоваться Visual Studio</p>
<p><a href="https://butaji.wordpress.com/wp-content/uploads/2010/04/image.png"><img style="display:inline;border:0;" title="image" src="https://butaji.wordpress.com/wp-content/uploads/2010/04/image_thumb.png?w=398&#038;h=326" border="0" alt="image" width="398" height="326" /></a></p>
<p>В результате получить довольно-таки <span style="text-decoration:line-through;">неоднозначные в связи с локалью</span> богатые возможности:</p>
<pre class="brush: csharp; title: ; notranslate">
  class Program
  {
    static void Main(string[] args)
    {
      var context = new ClientDataContext(new Uri(&quot;http://localhost/_vti_bin/ListData.svc&quot;));
      context.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
      var результат = context.ДокументыПроекта.Где(x =&gt; x.Имя != null).ToList();
    }
  }

  public static class Расширения
  {
    public static IEnumerable&lt;T&gt; Где&lt;T&gt;(this IEnumerable&lt;T&gt; source, Func&lt;T, bool&gt; predicate)
    {
      return source.Where(predicate);
    }
  }
</pre>
<p>Ну или просто возможность работы из браузера:</p>
<p><a href="https://butaji.wordpress.com/wp-content/uploads/2010/04/image1.png"><img style="display:inline;border:0;" title="image" src="https://butaji.wordpress.com/wp-content/uploads/2010/04/image_thumb1.png?w=436&#038;h=346" border="0" alt="image" width="436" height="346" /></a></p>
<p>А так же из Excel, благодаря <a href="http://www.powerpivot.com/">PowerPivot</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/04/11/sharepoint-and-odata/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">797</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="https://butaji.wordpress.com/wp-content/uploads/2010/04/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="https://butaji.wordpress.com/wp-content/uploads/2010/04/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint Business Connectivity Services: Новые возможности</title>
		<link>https://butaji.wordpress.com/2010/03/23/sharepoint-business-connectivity-services-%d0%bd%d0%be%d0%b2%d1%8b%d0%b5-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8/</link>
					<comments>https://butaji.wordpress.com/2010/03/23/sharepoint-business-connectivity-services-%d0%bd%d0%be%d0%b2%d1%8b%d0%b5-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8/#comments</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Tue, 23 Mar 2010 11:21:11 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BCS]]></category>
		<category><![CDATA[BDC]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[SharePoint Designer]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[WCF]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/?p=791</guid>

					<description><![CDATA[Записал скринкаст по Business Connectivity Services. Принципы построения интеграционных решений на SharePoint Работа с внешними данными Демонстрация возможностей SharePoint BCS. Обсуждение принципов работы, дистрибуции и потенциала платформы. Демонстрация примеров работы с сервисом.]]></description>
										<content:encoded><![CDATA[<div class="embed-vimeo" style="text-align: center;"><iframe src="https://player.vimeo.com/video/10373112" width="590" height="332" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>
<p>Записал скринкаст по Business Connectivity Services. </p>
<ul>
<li>Принципы построения интеграционных решений на SharePoint</li>
<li>Работа с внешними данными</li>
<li>Демонстрация возможностей SharePoint BCS. </li>
<li>Обсуждение принципов работы, дистрибуции и потенциала платформы. </li>
<li>Демонстрация примеров работы с сервисом.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/03/23/sharepoint-business-connectivity-services-%d0%bd%d0%be%d0%b2%d1%8b%d0%b5-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">791</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>
	</item>
		<item>
		<title>7й подкаст Петербургской группы ALT.NET</title>
		<link>https://butaji.wordpress.com/2010/03/22/7%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</link>
					<comments>https://butaji.wordpress.com/2010/03/22/7%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/#respond</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Sun, 21 Mar 2010 22:21:28 +0000</pubDate>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[Domain-Driven Design]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/2010/03/22/7%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</guid>

					<description><![CDATA[Domain-Driven Design и CQRS Ведущий: butaji Наши гости: frozen_space и chaliy Содержание: Что значат все эти буквы, стоит ли изучать? Список литературы Applying Domain-Driven Design and Patterns: With Examples in C# and .NET http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202 Yahoo group Domain-Driven Design http://tech.groups.yahoo.com/group/domaindrivendesign/ http://www.infoq.com/minibooks/domain-driven-design-quickly http://www.domaindrivendesign.org/ CQRS à la Greg Young http://blog.fohjin.com/blog/2009/11/12/CQRS_a_la_Greg_Young Насколько DDD реально имеет место в проектах? Действительно [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4>Domain-Driven Design и CQRS</h4>
<p><img style="display:inline;margin-left:0;margin-right:0;" src="https://i0.wp.com/sharparchitecture.net/images/sharparch-large.png" alt="" width="222" height="98" align="right" /></p>
<p>Ведущий: <a href="http://twitter.com/butaji">butaji</a></p>
<p>Наши гости: <a href="http://twitter.com/frozen_space">frozen_space</a> и <a href="http://twitter.com/chaliy">chaliy</a></p>
<p>Содержание:</p>
<ul>
<li>Что значат все эти буквы, стоит ли изучать?</li>
<li>Список литературы</li>
</ul>
<blockquote><p>Applying Domain-Driven Design and Patterns: With Examples in C# and .NET <a title="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202" href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202">http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202</a></p>
<p>Yahoo group Domain-Driven Design <a title="http://tech.groups.yahoo.com/group/domaindrivendesign/" href="http://tech.groups.yahoo.com/group/domaindrivendesign/">http://tech.groups.yahoo.com/group/domaindrivendesign/</a></p>
<p><a title="http://www.infoq.com/minibooks/domain-driven-design-quickly" href="http://www.infoq.com/minibooks/domain-driven-design-quickly">http://www.infoq.com/minibooks/domain-driven-design-quickly</a></p>
<p><a title="http://www.domaindrivendesign.org/" href="http://www.domaindrivendesign.org/">http://www.domaindrivendesign.org/</a></p>
<p>CQRS à la Greg Young <a href="http://blog.fohjin.com/blog/2009/11/12/CQRS_a_la_Greg_Young">http://blog.fohjin.com/blog/2009/11/12/CQRS_a_la_Greg_Young</a></p></blockquote>
<ul>
<li>Насколько DDD реально имеет место в проектах?</li>
<li>Действительно ли DDD помогает управлять сложностью?</li>
<li>Сколько паттернов вы запомнили из книги Ивенса?</li>
<li>CQRS &#8212; недостаAтки и преимущества</li>
<li>OpenSource примеры</li>
</ul>
<blockquote><p>DDDSample <a title="http://dddsample.sourceforge.net/" href="http://dddsample.sourceforge.net/">http://dddsample.sourceforge.net/</a></p>
<p>S#arp Architecture <a title="http://code.google.com/p/sharp-architecture/" href="http://code.google.com/p/sharp-architecture/">http://code.google.com/p/sharp-architecture/</a></p>
<p><a title="http://www.codeplex.com/dddpds" href="http://www.codeplex.com/dddpds">http://www.codeplex.com/dddpds</a></p>
<p><a href="http://www.habanerolabs.com/">http://www.habanerolabs.com/</a></p></blockquote>
<audio class="wp-audio-shortcode" id="audio-788-1" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet7.mp3?_=1" /><a href="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet7.mp3">http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet7.mp3</a></audio>
<p><a href="http://spbaltnet.rpod.ru/rss.xml">RSS-поток подкастов</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/03/22/7%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet7.mp3" length="60515627" type="audio/mpeg" />

		<post-id xmlns="com-wordpress:feed-additions:1">788</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="http://sharparchitecture.net/images/sharparch-large.png" medium="image" />

		<media:content url="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet7.mp3" medium="audio" />
	</item>
		<item>
		<title>6й подкаст Петербургской группы ALT.NET</title>
		<link>https://butaji.wordpress.com/2010/03/16/6%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</link>
					<comments>https://butaji.wordpress.com/2010/03/16/6%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/#comments</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Tue, 16 Mar 2010 20:23:54 +0000</pubDate>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[ineta]]></category>
		<category><![CDATA[сообщество]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/2010/03/16/6%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</guid>

					<description><![CDATA[Сообщества Разработчиков Ведущие: Дмитрий Нестерук и Виталий Баум Наши гости: Владимир Юнев и Евгений Жарков Сообщества в рунете Хабрахабр, блог .Net GotDotNet SQL.RU RSDN INETA Петербургская Группа Alt.Net За пределами рунета CodeProject CodeBetter Подкасты Петерубргской Группы Alt.Net Подкасты о разработке в среде .Net. Ключевые слова: C#, F#, Boo, Visual Studio, .Net, PostSharp, Asp.Net личная подкаст-лента [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4>Сообщества Разработчиков</h4>
<p><img align="right" src="https://preparednesspro.files.wordpress.com/2009/10/community-contribute.jpg?w=213&#038;h=163" width="213" height="163" /></p>
<p>Ведущие: <a href="http://nesteruk.wordpress.com">Дмитрий Нестерук</a> <a href="http://twitter.com/dnesteruk"><img alt="twitter" src="https://i0.wp.com/squawq.com/assets/images/twitter_icon.gif" /></a> и <a href="http://butaji.ru">Виталий Баум</a> <a href="http://twitter.com/butaji"><img alt="twitter" src="https://i0.wp.com/squawq.com/assets/images/twitter_icon.gif" /></a></p>
<p>Наши гости: <a href="http://xaoccps.habrahabr.ru/">Владимир Юнев</a> и <a href="http://jeje.habrahabr.ru/">Евгений Жарков</a></p>
<p>Сообщества в рунете</p>
<ul>
<li><a href="http://habrahabr.ru/blogs/net">Хабрахабр, блог .Net</a></li>
<li><a href="http://www.gotdotnet.ru">GotDotNet</a></li>
<li><a href="http://sql.ru">SQL.RU</a></li>
<li><a href="http://rsdn.ru">RSDN</a></li>
<li><a href="http://ineta.ru">INETA</a></li>
<li><a href="http://spbalt.net">Петербургская Группа Alt.Net</a></li>
</ul>
<p>За пределами рунета</p>
<ul>
<li><a href="http://codeproject.com">CodeProject</a></li>
<li><a href="http://codebetter.com">CodeBetter</a></li>
</ul>
<audio class="wp-audio-shortcode" id="audio-783-2" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="http://rpod.ru/personal/storage/00/00/02/55/75/spbalt.net.6.mp3?_=2" /><a href="http://rpod.ru/personal/storage/00/00/02/55/75/spbalt.net.6.mp3">http://rpod.ru/personal/storage/00/00/02/55/75/spbalt.net.6.mp3</a></audio>
<table border="0" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr>
<td valign="top" width="1%"><a href="http://spbaltnet.rpod.ru/"><img style="margin-left:10px;margin-right:10px;" title="Подкасты Петерубргской Группы Alt.Net" border="0" alt="Подкасты Петерубргской Группы Alt.Net" src="https://i0.wp.com/rpod.ru/personal/feeds_avatars/00/00/00/90/72/ava_ava_small_1262888178.jpg" width="50" height="50" /></a></td>
<td valign="middle" align="left">
<h3><a href="http://spbaltnet.rpod.ru/">Подкасты Петерубргской Группы Alt.Net</a></h3>
<p> Подкасты о разработке в среде .Net. Ключевые слова: C#, F#, Boo, Visual Studio, .Net, PostSharp, Asp.Net личная подкаст-лента <a href="http://altnet.rpod.ru/"><img border="0" hspace="2" alt="Петербургская Группа Alt.Net" align="absMiddle" src="https://i0.wp.com/rpod.ru/i/podcaster_small.gif" width="11" height="11" />Петербургская Группа Alt.Net</a> (<a href="http://spbaltnet.rpod.ru/profile/">подробнее</a>, <a href="http://spbaltnet.rpod.ru/rss.xml">RSS-поток</a>)</td>
</tr>
</tbody>
</table>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/03/16/6%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		<enclosure url="http://rpod.ru/personal/storage/00/00/02/55/75/spbalt.net.6.mp3" length="74774014" type="audio/mpeg" />

		<post-id xmlns="com-wordpress:feed-additions:1">783</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="http://preparednesspro.files.wordpress.com/2009/10/community-contribute.jpg" medium="image" />

		<media:content url="http://squawq.com/assets/images/twitter_icon.gif" medium="image">
			<media:title type="html">twitter</media:title>
		</media:content>

		<media:content url="http://squawq.com/assets/images/twitter_icon.gif" medium="image">
			<media:title type="html">twitter</media:title>
		</media:content>

		<media:content url="http://rpod.ru/personal/feeds_avatars/00/00/00/90/72/ava_ava_small_1262888178.jpg" medium="image">
			<media:title type="html">Подкасты Петерубргской Группы Alt.Net</media:title>
		</media:content>

		<media:content url="http://rpod.ru/i/podcaster_small.gif" medium="image">
			<media:title type="html">Петербургская Группа Alt.Net</media:title>
		</media:content>

		<media:content url="http://rpod.ru/personal/storage/00/00/02/55/75/spbalt.net.6.mp3" medium="audio" />
	</item>
		<item>
		<title>5й подкаст Петербургской группы ALT.NET</title>
		<link>https://butaji.wordpress.com/2010/02/28/5%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</link>
					<comments>https://butaji.wordpress.com/2010/02/28/5%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/#respond</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Sun, 28 Feb 2010 18:22:18 +0000</pubDate>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[S.O.L.I.D.]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[xp]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/2010/02/28/5%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</guid>

					<description><![CDATA[SOLID &#38; TDD и прочие показатели качества кода Ведущие: dnesteruk &#38; butaji Наши гости: Alexander Byndyu и Vitaly Stakhov SCRUM &#38; XP http://ru.wikipedia.org/wiki/Scrum http://ru.wikipedia.org/wiki/Экстремальное_программирование http://www.infoq.com/minibooks/scrum-xp-from-the-trenches OOD: Best practicies SOLID Single Responsibility Principle Open/Closed Principles Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle TDD: Best Practicies Mocks aren&#8217;t stubs xUnit.NET, NUnit, MbUnit, и та утилита, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img style="display:inline;margin-left:0;margin-right:0;" align="right" src="https://i0.wp.com/www.codinghorror.com/blog/images/coding-horror-official-logo-small.png" />   </p>
<h4>SOLID &amp; TDD и прочие показатели качества кода </h4>
<p>Ведущие: <a href="http://twitter.com/dnesteruk">dnesteruk</a> &amp; <a href="http://twitter.com/butaji">butaji</a></p>
<p>Наши гости: <a href="http://www.byndyu.ru/">Alexander Byndyu</a> и <a href="http://twitter.com/VitalyStakhov/">Vitaly Stakhov</a></p>
<p><strong>SCRUM &amp; XP</strong></p>
<ul>
<li><a href="http://ru.wikipedia.org/wiki/Scrum">http://ru.wikipedia.org/wiki/Scrum</a> </li>
<li><a href="http://ru.wikipedia.org/wiki/Экстремальное_программирование">http://ru.wikipedia.org/wiki/Экстремальное_программирование</a> </li>
<li><a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches">http://www.infoq.com/minibooks/scrum-xp-from-the-trenches</a> </li>
</ul>
<p><strong>OOD: Best practicies</strong></p>
<p><a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID</a></p>
<ul>
<li>Single Responsibility Principle </li>
<li>Open/Closed Principles </li>
<li>Liskov Substitution Principle </li>
<li>Interface Segregation Principle </li>
<li>Dependency Inversion Principle </li>
</ul>
<p><strong>TDD: Best Practicies</strong></p>
<ul>
<li><a href="http://martinfowler.com/articles/mocksArentStubs.html">Mocks aren&#8217;t stubs</a> </li>
<li><a href="http://habrahabr.ru/blogs/net/79748/">xUnit.NET, NUnit, MbUnit, и та утилита, от Microsoft, которую не смог вспомнить Александр</a> </li>
</ul>
<p><strong>Ещё говорили о</strong></p>
<p><a href="http://codebetter.com/blogs/jeffrey.palermo/archive/2008/02/11/pain-driven-development-uncovering-the-motivation.aspx">Pain-Driven Development</a></p>
<p><a href="http://www.infoq.com/news/2009/02/spolsky-vs-uncle-bob">Spolsky vs Uncle Bob</a></p>
<p><a href="http://sourceforge.net/projects/nhibernate/files/">NHibernate Sources</a>, <a href="http://nant.sourceforge.net/">NAnt</a></p>
<audio class="wp-audio-shortcode" id="audio-780-3" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet5.mp3?_=3" /><a href="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet5.mp3">http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet5.mp3</a></audio>
<p>&#160;</p>
<table border="0" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr>
<td valign="top" width="1%"><a href="http://spbaltnet.rpod.ru/"><img style="margin-left:10px;margin-right:10px;" title="Подкасты Петерубргской Группы Alt.Net" border="0" alt="Подкасты Петерубргской Группы Alt.Net" src="https://i0.wp.com/rpod.ru/personal/feeds_avatars/00/00/00/90/72/ava_ava_small_1262888178.jpg" width="50" height="50" /></a></td>
<td valign="middle" align="left">
<h3><a href="http://spbaltnet.rpod.ru/">Подкасты Петерубргской Группы Alt.Net</a></h3>
<p> Подкасты о разработке в среде .Net. Ключевые слова: C#, F#, Boo, Visual Studio, .Net, PostSharp, Asp.Net личная подкаст-лента <a href="http://altnet.rpod.ru/"><img border="0" hspace="2" alt="Петербургская Группа Alt.Net" align="absMiddle" src="https://i0.wp.com/rpod.ru/i/podcaster_small.gif" width="11" height="11" />Петербургская Группа Alt.Net</a> (<a href="http://spbaltnet.rpod.ru/profile/">подробнее</a>, <a href="http://spbaltnet.rpod.ru/rss.xml">RSS-поток</a>)</td>
</tr>
</tbody>
</table>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/02/28/5%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet5.mp3" length="65508134" type="audio/mpeg" />

		<post-id xmlns="com-wordpress:feed-additions:1">780</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="http://www.codinghorror.com/blog/images/coding-horror-official-logo-small.png" medium="image" />

		<media:content url="http://rpod.ru/personal/feeds_avatars/00/00/00/90/72/ava_ava_small_1262888178.jpg" medium="image">
			<media:title type="html">Подкасты Петерубргской Группы Alt.Net</media:title>
		</media:content>

		<media:content url="http://rpod.ru/i/podcaster_small.gif" medium="image">
			<media:title type="html">Петербургская Группа Alt.Net</media:title>
		</media:content>

		<media:content url="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet5.mp3" medium="audio" />
	</item>
		<item>
		<title>4й подкаст Петербургской группы ALT.NET</title>
		<link>https://butaji.wordpress.com/2010/02/20/4%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</link>
					<comments>https://butaji.wordpress.com/2010/02/20/4%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/#comments</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Sat, 20 Feb 2010 17:12:10 +0000</pubDate>
				<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[FubuMVC]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javafx]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[spbalt.net]]></category>
		<category><![CDATA[visual studio]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/2010/02/20/4%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/</guid>

					<description><![CDATA[Всё, что вы хотели узнать о ASP.NET Участники: dnesteruk &#38; butaji Что нового в ASP.NET MVC2. Асинхронные контроллеры Зоны (areas) Валидация через data annotation Строго-типизированные хелперы Хелпер-темплейты, параметры по-умолчанию Альтернативные view engines Spark VE Удобен ли Visual Studio для веб-разработки #Develop FubuMVC Новое понимание MVC. Другой контроллер. Конвенции. Почему я уйду на Ruby on Rails [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img style="display:inline;margin-left:0;margin-right:0;" align="right" src="https://i0.wp.com/www.kylirhorton.com/images/aspnetLogo.jpg" width="253" height="60" /></p>
<h4>Всё, что вы хотели узнать о ASP.NET </h4>
<p>Участники: <a href="http://twitter.com/dnesteruk">dnesteruk</a> &amp; <a href="http://twitter.com/butaji">butaji</a></p>
<p><strong>Что нового в </strong><a href="http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2.aspx"><strong>ASP.NET MVC2</strong></a><strong>.</strong></p>
<ul>
<li>Асинхронные контроллеры </li>
<li>Зоны (areas) </li>
<li>Валидация через data annotation </li>
<li>Строго-типизированные хелперы </li>
<li>Хелпер-темплейты, параметры по-умолчанию </li>
</ul>
<p><strong>Альтернативные view engines</strong></p>
<ul>
<li><a href="http://sparkviewengine.com/">Spark VE</a> </li>
</ul>
<p><strong>Удобен ли </strong><a href="http://wakoopa.com/categories/development/text-editors-ides"><strong>Visual Studio</strong></a><strong> для веб-разработки</strong></p>
<ul>
<li><a href="http://spbaltnet.rpod.ru/www.icsharpcode.net/OpenSource/SD/">#Develop</a> </li>
</ul>
<p><a href="http://fubumvc.com/"><strong>FubuMVC</strong></a></p>
<ul>
<li>Новое понимание MVC. Другой контроллер. Конвенции. </li>
</ul>
<p><strong>Почему я уйду на Ruby on Rails / Django</strong></p>
<p><strong>Как хорошо работать с </strong><a href="http://Asp.Net"><strong>Asp.Net</strong></a><strong> AJAX и jQuery</strong></p>
<p><strong>HTML5 + CSS3 (</strong><a href="http://www.css3.info/preview/web-fonts-with-font-face/"><strong>@font-face</strong></a><strong>)</strong></p>
<ul>
<li>font-face на js &#8212; cufon <a href="http://wiki.github.com/sorccu/cufon/about">http://wiki.github.com/</a><a href="http://wiki.github.com/sorccu/cufon/about">sorccu</a><a href="http://wiki.github.com/sorccu/cufon/about">/cufon/about</a> </li>
</ul>
<p><strong>RIA</strong></p>
<ul>
<li><a href="http://www.vancouver2010.com/olympic-medals/geo-view/">Олимпиада 2010</a>, Silverlight, <a href="http://www.windowsphone7series.com/">Windows 7 Phone</a>, <a href="http://javafx.com/">JavaFX</a> </li>
</ul>
<p><strong>Создавать ли View для iPhone</strong></p>
<ul>
<li><a href="http://www.jqtouch.com/">http://www.</a><a href="http://www.jqtouch.com/">jqtouch</a><a href="http://www.jqtouch.com/">.com/</a> </li>
</ul>
<audio class="wp-audio-shortcode" id="audio-777-4" preload="none" style="width: 100%;" controls="controls"><source type="audio/mpeg" src="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet4.mp3?_=4" /><a href="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet4.mp3">http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet4.mp3</a></audio>
<table border="0" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr>
<td width="1%" valign="top"><a href="http://spbaltnet.rpod.ru/"><img style="margin-left:10px;margin-right:10px;" title="Подкасты Петерубргской Группы Alt.Net" src="https://i0.wp.com/rpod.ru/personal/feeds_avatars/00/00/00/90/72/ava_ava_small_1262888178.jpg" border="0" alt="Подкасты Петерубргской Группы Alt.Net" width="50" height="50" /></a></td>
<td align="left" valign="middle">
<h3><a href="http://spbaltnet.rpod.ru/">Подкасты Петерубргской Группы Alt.Net</a></h3>
<p>Подкасты о разработке в среде .Net. Ключевые слова: C#, F#, Boo, Visual Studio, .Net, PostSharp, Asp.Net<br />
личная подкаст-лента <a href="http://altnet.rpod.ru/"><img src="https://i0.wp.com/rpod.ru/i/podcaster_small.gif" border="0" alt="Петербургская Группа Alt.Net" hspace="2" width="11" height="11" align="absmiddle" />Петербургская Группа Alt.Net</a> (<a href="http://spbaltnet.rpod.ru/profile/">подробнее</a>, <a href="http://spbaltnet.rpod.ru/rss.xml">RSS-поток</a>)</td>
</tr>
</tbody>
</table>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/02/20/4%d0%b9-%d0%bf%d0%be%d0%b4%d0%ba%d0%b0%d1%81%d1%82-%d0%bf%d0%b5%d1%82%d0%b5%d1%80%d0%b1%d1%83%d1%80%d0%b3%d1%81%d0%ba%d0%be%d0%b9-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d1%8b-alt-net/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet4.mp3" length="56914693" type="audio/mpeg" />

		<post-id xmlns="com-wordpress:feed-additions:1">777</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="http://www.kylirhorton.com/images/aspnetLogo.jpg" medium="image" />

		<media:content url="http://rpod.ru/personal/feeds_avatars/00/00/00/90/72/ava_ava_small_1262888178.jpg" medium="image">
			<media:title type="html">Подкасты Петерубргской Группы Alt.Net</media:title>
		</media:content>

		<media:content url="http://rpod.ru/i/podcaster_small.gif" medium="image">
			<media:title type="html">Петербургская Группа Alt.Net</media:title>
		</media:content>

		<media:content url="http://rpod.ru/personal/storage/00/00/02/55/75/spbaltnet4.mp3" medium="audio" />
	</item>
		<item>
		<title>Альтернативный MVC Framework на ASP.NET: FubuMVC</title>
		<link>https://butaji.wordpress.com/2010/02/16/%d0%b0%d0%bb%d1%8c%d1%82%d0%b5%d1%80%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%b9-mvc-framework-%d0%bd%d0%b0-asp-net-fubumvc/</link>
					<comments>https://butaji.wordpress.com/2010/02/16/%d0%b0%d0%bb%d1%8c%d1%82%d0%b5%d1%80%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%b9-mvc-framework-%d0%bd%d0%b0-asp-net-fubumvc/#comments</comments>
		
		<dc:creator><![CDATA[butaji]]></dc:creator>
		<pubDate>Mon, 15 Feb 2010 21:43:18 +0000</pubDate>
				<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[FubuMVC]]></category>
		<category><![CDATA[IoC]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[SoC]]></category>
		<category><![CDATA[Spark]]></category>
		<category><![CDATA[StructureMap]]></category>
		<category><![CDATA[ViewEngine]]></category>
		<guid isPermaLink="false">http://butaji.wordpress.com/?p=762</guid>

					<description><![CDATA[Введение Почему же альтернативный? Всё просто, данный framework пишется силами выдающихся участников ALT.NET community, а именно: Jeremy Miller, Chad Myers, Mark Nijhof, Ryan Kelley, и Joshua Flanagan. FubuMVC не имеет никакого отношения к ASP.NET MVC Framework, кроме того, что так же построен поверх ASP.NET и реализует паттерн Front-Controller. Название FubuMVC строится из акронима “For us [&#8230;]]]></description>
										<content:encoded><![CDATA[<h4>Введение</h4>
<p><a href="http://fubumvc.com/"><img style="display:inline;margin-left:0;margin-right:0;" src="https://i0.wp.com/fubumvc.googlecode.com/svn/branches/fubumvcv1/doc/logo/FubuMVC_Logo_Medium.jpg" alt="" align="right" /></a>Почему же альтернативный? Всё просто, данный framework пишется силами выдающихся участников ALT.NET community, а именно:</p>
<p><a href="http://codebetter.com/blogs/jeremy.miller/">Jeremy Miller</a>, <a href="http://chadmyers.lostechies.com/">Chad Myers</a>, <a href="http://elegantcode.com/about/mark-nijhof/">Mark Nijhof</a>, <a href="http://www.techfocus2.com/">Ryan Kelley</a>, и <a href="http://joshuaflanagan.lostechies.com/">Joshua Flanagan</a>.</p>
<p><a href="http://fubumvc.com/">FubuMVC</a> не имеет никакого отношения к <a href="http://www.asp.net/mvc/">ASP.NET MVC Framework,</a> кроме того, что так же построен поверх ASP.NET и реализует паттерн <a href="http://www.martinfowler.com/eaaCatalog/frontController.html">Front-Controller</a>. Название FubuMVC строится из акронима “For us by us” и аббривеатуры MVC (кто ещё не знает, что это значит Model-View-Controller ?). Проект был инициирован по причине недовольства вышеперечисленных личностей архитектурными решениями, принятыми в ASP.NET MVC. Сказать, по правде, по прошествии года, после старта проекта, он не утратил своей элегантности и простоты в подходах.</p>
<p>FubuMVC вносит несколько непривычное понимание Controller’а. Теперь это не просто некоторый класс, теперь это больше логическая связность некоторых методов. Это раскрывает более широкие возможности для настройки специфичного поведения Controller’а, к примеру, обработки ошибок, реализации правил кэширования, определения типа возвращаемых значений. К тому же возможность динамического объединения вызовов Action’ов уже является удобным механизмом к расширению. Далее мы более подробно поговорим об особенностях этой реализации в FubuMVC.</p>
<p>В качестве View Engine (в данном случае является лишь определением и не имеет отношения к ASP.NET MVC View Engine) используется механизм рендринга WebForms (проще говоря FubuPage, которая является View в FubuMVC, наследует от <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.page.aspx">System.Web.UI.Page</a>), но имеется возможность в подключении всех существующих в ASP.NET MVC ViewEngine’ов, примером тому может быть реализация <a href="http://sparkviewengine.com/">SparkViewEngine</a>.</p>
<p>Конечно же уместным будет вопрос, а зачем же нужен “другой” MVC Framework, с меньшим количеством участников проекта, с меньшим вниманием со стороны разработчиков, с меньшим количеством тестеров и прочими атрибутами mainstream проектов.</p>
<p>В основу проекта FubuMVC его создатели заложили больше возможностей для кастомизации проекта под прикладные нужды, а так же конвенциям (соглашениям) относительно настройки и расширяемости. Причём конвенции должны покрывать основные и типичные нужды приложения, коих в разработки решений достаточно большое количество. Какие-либо дополнительные разработки будут инициировать собой появление дополнительных модулей.</p>
<blockquote><p><img style="display:inline;border-width:0;margin:0;" src="https://i0.wp.com/rubyonrails.org/images/pages/overview/screencasts2.png" border="0" alt="Screencasts" align="right" />Аналогичные конвенции (соглашения) существую в известном всем MVC Framework на Ruby: <a href="http://rubyonrails.org/">Ruby On Rails</a>. На своей практике разработки под Ruby On Rails я неоднократно убеждался, что данные конвенции действительно позволяют снизить сложность и количество написанного кода. Примером тому может служить ORM Active Record с его соглашениями касательно преобразования объектов в таблицы реляционной базы данных, а так же соглашение, относительно хранения конфигурации в формате <a href="https://butaji.wordpress.com/2009/12/22/net-ft-yaml/">YAML</a>.</p></blockquote>
<p>Официальный сайт проекта: <a href="http://fubumvc.com/">http://fubumvc.com/</a></p>
<p>FubuMVC на GitHub: <a href="http://github.com/darthfubumvc/fubumvc">http://github.com/darthfubumvc/fubumvc</a></p>
<h4>Первое погружение</h4>
<p>Начнём с конвенций именования и структуры проекта. Вся работа с настройкой приложения FubuMVC ведётся через некоторый DSL, стиль конфигурирования очень близок к работе с <a href="http://fluentnhibernate.org/">FluentNhibernate</a>.</p>
<pre class="brush: csharp; title: ; notranslate">
public class HelloWorldFubuRegistry : FubuRegistry
{
    public HelloWorldFubuRegistry()
    {
        IncludeDiagnostics(true);

        Applies.ToThisAssembly();

        Actions
            .IncludeTypesNamed(x =&gt; x.EndsWith(&quot;Controller&quot;));

        Routes
            .IgnoreControllerNamespaceEntirely()
            .ConstrainToHttpMethod(action =&gt; action.Method.Name.EndsWith(&quot;Command&quot;), &quot;POST&quot;)
            .ConstrainToHttpMethod(action =&gt; action.Method.Name.StartsWith(&quot;Query&quot;), &quot;GET&quot;);

        Views
            .TryToAttach(x=&gt;
            {
                x.to_spark_view_by_action_namespace_and_name(GetType().Namespace);
                x.by_ViewModel_and_Namespace_and_MethodName();
                x.by_ViewModel_and_Namespace();
                x.by_ViewModel();
            });

        Output.ToJson.WhenCallMatches(action =&gt; action.Returns&lt;AjaxResponse&gt;());

        HomeIs&lt;HomeInputModel&gt;();
    }
}

</pre>
<p>Исходя из данной конфигурации IoC-container’а нетрудно догадаться о следующем:</p>
<ul>
<li>Все классы, оканчивающиеся на “Controller” будут зарегистрированны в качестве Controller</li>
<li>Все запросы, оканчивающиеся на “Command” должны будут приниматься POST’ом, а начинающиеся на “Query” GET’ом</li>
<li>Все View будут заполняться соответствующими по именованию ViewModel</li>
<li>Весь вывод, возвращающий тип AjaxResponse будет серилизоваться в JSON</li>
</ul>
<blockquote><p>В качестве IoC-container’а в FubuMVC выбран <a href="http://structuremap.sourceforge.net/Default.htm">StructureMap</a>. Выбор не случаен, т.к. фактически StructureMap является старейшим IoC/DI-container’ом. Начало разработки датировано июнем 2004ого года и велось <a href="mailto:jeremydmiller@yahoo.com?subject=StructureMap">Jeremy D. Miller</a>, так же и участником проекта FubuMVC.</p></blockquote>
<h4>Второе погружение</h4>
<p>Давайте рассмотрим несколько примеров приложений на FubuMVC</p>
<p>Первое из них <a href="http://github.com/DarthFubuMVC/fubumvc-examples/tree/master/src/Actions/ControllerActionStyle/">http://github.com/DarthFubuMVC/fubumvc-examples/tree/master/src/Actions/ControllerActionStyle/</a></p>
<p>Начнём, с того, что проверим его работоспособность:</p>
<p><a href="https://butaji.wordpress.com/wp-content/uploads/2010/02/image4.png"><img style="display:inline;border:0;" title="image" src="https://butaji.wordpress.com/wp-content/uploads/2010/02/image_thumb2.png?w=491&#038;h=399" border="0" alt="image" width="491" height="399" /></a></p>
<p>В namespace’е SimpleWebsite.Core определена наша модель предметной области, а именно Movies, работе с которыми и просвещенно приложение.</p>
<p>В SimpleWebsite.Controllers определен единственный Controller и View, работу которых мы и видим на рисунке выше.</p>
<p>Давайте разберемся с MoviesController. Судя по его конструктору нетрудно догадаться, что DependencyInjection мы получаем out-of-box <a href="http://www.pnpguidance.net/Screencast/UnityDependencyInjectionIoCScreencast.aspx">без каких-либо переопределений Controller Factory</a>:</p>
<pre class="brush: csharp; title: ; notranslate">

private readonly IRepository _repository;

public MoviesController(IRepository repository)
{
    _repository = repository;
}

</pre>
<p>Метод List() является “списочным” и предоставляет нам доступ к <a href="http://blogs.msdn.com/dphill/archive/2009/01/31/the-viewmodel-pattern.aspx">ViewModel</a></p>
<pre class="brush: csharp; title: ; notranslate">

public ListMoviesViewModel List()
{
    return new ListMoviesViewModel {Movies = _repository.Query&lt;Movie&gt;()};
}

</pre>
<p>Стоит обратить внимание на конвенцию именования в данном случае. Под ViewModel (читается так же как PresentationModel) понимается адаптированная для представления модель, что подчеркивает <a href="http://c2.com/cgi/wiki?SeparationOfConcerns">SoC</a> в реализации FubuMVC. View в данном случае будет строго типизировано на  этот тип:</p>
<pre class="brush: csharp; title: ; notranslate"> public class List : FubuPage&amp;lt;ListMoviesViewModel&amp;gt;   &lt;br /&gt;{}</pre>
<p>Метод Add() попадает под правило обработки AjaxResponse, следовательно вернется на страницу в виде JSON, где будет радужно встречен jQuery обработчиком.</p>
<p><a href="https://butaji.wordpress.com/wp-content/uploads/2010/02/image5.png"><img style="display:inline;border:0;" title="image" src="https://butaji.wordpress.com/wp-content/uploads/2010/02/image_thumb3.png?w=454&#038;h=376" border="0" alt="image" width="454" height="376" /></a></p>
<p>Аналогичная ситуация с методом Remove().</p>
<p>Стоит обратить внимание на конвенцию именования принимаемых данными методами типов:</p>
<p>AddMovieInput, RemoveMovieInput</p>
<p>Наименования данных классов указывают на направление данных, т.е. их ввод с запросом. С помощью этих типов на View мы определяем Url для обработки соответствующих Action’ов Controller’а:</p>
<pre class="brush: csharp; title: ; notranslate">
&lt;%= Get&lt;IUrlRegistry&gt;().UrlFor(new AddMovieInput()) %&gt;
</pre>
<blockquote><p><strong>FubuMVC реализует 3 модели обработки запросов:</strong></p>
<ol>
<li><strong>Controller / Action </strong>Привычный для ASP.NET MVC Framework способ. Определяется некоторый тип &#8212; Controller, который содержит в себе соответствующие методы &#8212; Action’ы. Данный пример был рассмотрен выше.</li>
<li><strong>Controller-less Actions (<a href="http://github.com/DarthFubuMVC/fubumvc-examples/tree/db3770dfe028e09f10a0867a33b361130f590b0d/src/Actions/HandlerStyle">HandlerStyle</a>) </strong>Данный способ подразумевает под собой “обезличенные” Action’ы. т.е. без привязки к какому-либо Controller’у. Правила нахождения Action’ов описываются Policy, которые можно описывать и добавлять в коде.</li>
<li><strong>REST-like (</strong><a href="http://github.com/DarthFubuMVC/fubumvc-examples/tree/db3770dfe028e09f10a0867a33b361130f590b0d/src/Actions/EndPointStyle"><strong>EndPointStyle</strong></a><strong>) </strong>Этот<strong> </strong>способ близок к предыдущему, однако, в отличии от него реализует не только метод Execute, а все методы, необходимые для REST взаимодействия, каждый метод Get(), Post(), Put(), Head() в дальнейшем будет соответствовать типу HTTP запроса:</li>
</ol>
<pre>var httpVerbs = new HashSet&lt;string&gt;(StringComparer.InvariantCultureIgnoreCase)
    {"GET", "POST", "PUT", "HEAD"};</pre>
</blockquote>
<h4>Погружаемся далее</h4>
<p>Как вы уже догадались, FubuMVC славится своими возможностями для расширения. Предлагаю ознакомиться с ещё одним примером: <a href="http://github.com/DarthFubuMVC/fubumvc-examples/tree/7c4b2165aedb6754a01538aee956e29d4060654c/src/Outputs/VaryByAcceptHeader">http://github.com/DarthFubuMVC/fubumvc-examples/tree/7c4b2165aedb6754a01538aee956e29d4060654c/src/Outputs/VaryByAcceptHeader</a></p>
<p>В данном примере рассматривается вариативность формата возвращаемых данных от параметра запроса, причём вы можете с легкостью добавить новый формат данных.</p>
<p>Этот пример практически ни чем не отличается от рассматриваемого, раннее, за тем лишь исключением, что в классе</p>
<pre class="brush: csharp; title: ; notranslate">
VariableOutputConvention : IConfigurationAction
</pre>
<p>мы регистрируем интересующие нас возвращаемые типы, а так же указываем дополнительный Behavior для рендринга страницы:</p>
<pre class="brush: csharp; title: ; notranslate">
RenderVariableOutput : BasicBehavior
</pre>
<p>После чего достаточно только заполнить интересные вам Movies <a href="http://localhost:59187/movies/list">http://localhost:59187/movies/list</a> и попросить вернуть их в JSON <a title="http://localhost:59187/movies/list?renderformat=json" href="http://localhost:59187/movies/list?renderformat=json">http://localhost:59187/movies/list?renderformat=json</a> или в XML <a title="http://localhost:59187/movies/list?renderformat=xml" href="http://localhost:59187/movies/list?renderformat=xml">http://localhost:59187/movies/list?renderformat=xml</a></p>
<p>Данный пример наглядно иллюстрирует точки расширения FubuMVC для любых нужд.</p>
<h4>Диагностика</h4>
<p>По адресу <a href="http://localhost:59187/_fubu">http://localhost:59187/_fubu</a> вас будет ждать небольшой сюрприз, а именно – диагностическая утилита для FubuMVC.<a href="https://butaji.wordpress.com/wp-content/uploads/2010/02/image6.png"><img style="display:inline;border:0;" title="image" src="https://butaji.wordpress.com/wp-content/uploads/2010/02/image_thumb4.png?w=505&#038;h=332" border="0" alt="image" width="505" height="332" /></a></p>
<p>C её помощью вы сможете просматривать все зарегистрированные в вашем приложении</p>
<ul>
<li><strong>Chains – </strong>цепочки поведения, так называются логические связи между маршрутами и Action’ами. О цепочках можно посмотреть все обертки и возвращаемые значения.</li>
<li><strong>Routes </strong>– показывает все зарегистрированные маршруты, и связанные с ними Action’ы, тип выводимых данных и цепочки поведения.</li>
<li><strong>Actions </strong>– зарегестрированные в приложении Action’ы, их маршруты и возвращаемые значения</li>
<li><strong>Inputs – </strong>возможные типы и способы ввода в вашем приложении со стороны запросов</li>
</ul>
<h4><strong>Заключение</strong></h4>
<p>При первом и поверхностном знакомстве проект FubuMVC не показался мне чем-то выдающимся. Однако в последнее время мой интерес к нему постоянно растёт. Я считаю, что FubuMVC является более удобным и гибким инструментом, по сравнению с ASP.NET MVC. Однако это ещё не значит, что я уже готов доверить данному проекту свои коммерческие проекты. Тот факт, что сообщество всё же поддерживает многообразие качественных решений для создания приложений на ASP.NET, может только радовать.</p>
<h4>Материалы</h4>
<p>FubuMVC Contrib <a href="http://code.google.com/p/fubumvc-contrib/">http://code.google.com/p/fubumvc-contrib/</a></p>
<p>Front Controller <a href="http://msdn.microsoft.com/en-us/library/ms978723.aspx">http://msdn.microsoft.com/en-us/library/ms978723.aspx</a></p>
<p>FubuMVC &#8212; Front Controller style framework  <a href="http://blog.fohjin.com/blog/2009/2/21/FubuMVC_Front_Controller_style_framework">http://blog.fohjin.com/blog/2009/2/21/FubuMVC_Front_Controller_style_framework</a></p>
<p>FubuMVC Google Group <a href="http://groups.google.com/group/fubumvc-devel?pli=1">http://groups.google.com/group/fubumvc-devel?pli=1</a></p>
<p>Ещё один MVC Framework на ASP.NET OpenRasta <a href="http://trac.caffeine-it.com/openrasta">http://trac.caffeine-it.com/openrasta</a></p>
<p>Соглашение относительно настройки <a href="http://msdn.microsoft.com/ru-ru/magazine/dd419655.aspx">http://msdn.microsoft.com/ru-ru/magazine/dd419655.aspx</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://butaji.wordpress.com/2010/02/16/%d0%b0%d0%bb%d1%8c%d1%82%d0%b5%d1%80%d0%bd%d0%b0%d1%82%d0%b8%d0%b2%d0%bd%d1%8b%d0%b9-mvc-framework-%d0%bd%d0%b0-asp-net-fubumvc/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">762</post-id>
		<media:content url="https://2.gravatar.com/avatar/e19552bb1a8f4ede6ac679c4d245889c2f6ecb1cdad93ee3b8833061a6208b86?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">butaji</media:title>
		</media:content>

		<media:content url="http://fubumvc.googlecode.com/svn/branches/fubumvcv1/doc/logo/FubuMVC_Logo_Medium.jpg" medium="image" />

		<media:content url="http://rubyonrails.org/images/pages/overview/screencasts2.png" medium="image">
			<media:title type="html">Screencasts</media:title>
		</media:content>

		<media:content url="https://butaji.wordpress.com/wp-content/uploads/2010/02/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="https://butaji.wordpress.com/wp-content/uploads/2010/02/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="https://butaji.wordpress.com/wp-content/uploads/2010/02/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
	</channel>
</rss>
