<?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>Trainee's Weblog &#187; WF</title>
	<atom:link href="http://gltrainee.wordpress.com/category/wf/feed/" rel="self" type="application/rss+xml" />
	<link>http://gltrainee.wordpress.com</link>
	<description>блог .NET разработчиков ... in .Net veritas ...</description>
	<lastBuildDate>Thu, 03 Jul 2008 14:50:21 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='gltrainee.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/4849b8cdccdb7cbe479254e464bcb906?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Trainee's Weblog &#187; WF</title>
		<link>http://gltrainee.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://gltrainee.wordpress.com/osd.xml" title="Trainee&#8217;s Weblog" />
		<item>
		<title>Windows Workflow Foundation (Intro &#8211; lesson 1)</title>
		<link>http://gltrainee.wordpress.com/2008/06/26/%d0%b2%d0%b2%d1%83%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-windows-workflow-foundation/</link>
		<comments>http://gltrainee.wordpress.com/2008/06/26/%d0%b2%d0%b2%d1%83%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-windows-workflow-foundation/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 17:25:03 +0000</pubDate>
		<dc:creator>whitenie</dc:creator>
				<category><![CDATA[WF]]></category>

		<guid isPermaLink="false">http://gltrainee.wordpress.com/?p=36</guid>
		<description><![CDATA[Как разработчиков наша задача состоит в том чтобы решать рельные бизнесс-задачи, но независимо от сложности задачи, даже комплексности, мы решаем их единообразно – большая зазача разбивается на более простые, те в свою очередь на еще более простые и т.д. &#8230; Врезультате мы получаем множество задач, но множество простых задач, которые гораздо легче осмыслить, выполнить и [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gltrainee.wordpress.com&blog=3911599&post=36&subd=gltrainee&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s6"></a><span>Как разработчиков наша задача состоит в том чтобы решать рельные бизнесс-задачи, но независимо от сложности задачи, даже комплексности, мы решаем их единообразно – большая зазача разбивается на более простые, те в свою очередь на еще более простые и т.д. &#8230; Врезультате мы получаем множество задач, но множество простых задач, которые гораздо легче осмыслить, выполнить и протестировать.</span><span id="more-36"></span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s60"></a><a name="q-s61"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s62"></a><span>В традиционной на данный момент модели программирования мы реализуем решение задачи жестко зашивая его в програмный код. Наш код определяет «что делать» вместе с тем «как это делать» (осуществлять контроль над тем что делать). Мы также жестко кодируем правила поведения кода базирующиеся на значениях какихто параметров, срабатывания событий и текущего состояния приложения.</span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s63"></a><a name="q-s64"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s65"></a><span>Workflow это просто упорядоченные серии шагов которые достигают некоторой предопределенной цели согласно некому набору правил &#8230; </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s66"></a><a name="q-s67"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s68"></a><span>Windows Workflow Foundation это платформа созданная компанией Microsoft для управления бизнесс-процессами – т.е. потоками работ. Фактически это же мы делаем ежедневно руками. Мы так же разбиваем задачи на более простые и решаем их по отлельности. В виде Workflow Foundation компания Microsoft предоставила програмную модель для автоматизации и декларизации этого непосильного ручного труда<a name="q-s69"></a><a name="q-s610"></a> </span><span style="font-family:Wingdings;"><span>J</span></span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.3pt;"><a name="q-s611"></a><span>WF предоставляет объектную модель и средства разработки приложений основанных на принципах рабочих потоков и может использоваться в самом широком спектре сценариев — от взаимодействия с пользователем до управления распределенными бизнес-процессами &#8230; </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s612"></a><a name="q-s613"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s614"></a><a name="q-s615"></a><span style="color:black;">Если посмотреть на данную схему<a name="q-s616"></a><a name="q-s617"></a><a name="q-s618"></a></span></p>
<p class="MsoBodyText" style="text-align:justify;"><a href="http://gltrainee.files.wordpress.com/2008/06/untitled.gif"><img class="alignnone size-medium wp-image-37" src="http://gltrainee.files.wordpress.com/2008/06/untitled.gif?w=300&#038;h=201" alt="" width="300" height="201" /></a></p>
<p class="MsoBodyText" style="text-align:center;" align="center"><span style="color:blue;"><!--[if gte vml 1]&gt;                     &lt;![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s620"></a><a name="q-s621"></a><a name="q-s622"></a><a name="q-s623"></a><span style="color:black;">можно увидеть, что </span><span>Workflow <span style="color:black;">не является приложением которое мы можем взять и запустить, жизнью и деятельностью </span>Workflow <span style="color:black;">управляет </span></span><a name="q-s624"></a><span style="color:black;">Workflow</span><span style="color:black;"> </span><a name="q-s625"></a><span style="color:black;">Runtime</span><span style="color:black;"> который умеет запускать, останавливать </span><span>Workflow <span style="color:black;">а также сообщать о событиях происходящих внутри </span>Workflow.</span></p>
<p class="MsoBodyText" style="text-align:justify;"><span style="color:black;">Для того чтобы воркфлоу всетаки заставить выполняться необходимо еще одно приложение которое служило бы ему хостом и через </span><a name="q-s626"></a><span style="color:black;">Workflow</span><span style="color:black;"> </span><a name="q-s627"></a><span style="color:black;">Runtime</span><span style="color:black;"> управляло бы безопасностью жизнедеятельности </span><span>Workflow<span style="color:black;">. </span></span><a name="q-s628"></a><span style="color:black;">Workflow</span><span style="color:black;"> </span><a name="q-s629"></a><span style="color:black;">Runtime</span><span style="color:black;"> отвечает за хранение состояния, загрузку и активацию </span><a name="q-s630"></a><span style="color:black;">Workflow</span><span style="color:black;">. В роли хост прилоежения могут служить все существующие на сегодня виды приложений.</span><a name="q-s631"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s633"></a><a name="q-s634"></a><span style="color:black;">Другими словами, </span><a name="q-s635"></a><span style="color:black;">Workflow</span><span style="color:black;"> </span><span style="color:black;">– это набор действий координирующих работу программы.</span></p>
<p class="MsoBodyText" style="text-align:justify;">
<p class="MsoBodyText" style="text-align:justify;"><span>Примеры действий:</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s639"></a><a name="q-s640"></a><a name="q-s641"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span>направить работу руководителю</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s642"></a><a name="q-s643"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span> ·<span> </span></span></span><!--[endif]--><span>переделать</span></p>
<p class="MsoBodyText" style="text-align:justify;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s644"></a><a name="q-s645"></a><a name="q-s646"></a><span style="color:black;">Workflow</span><span style="color:black;"> представляется в виде процесса:</span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s647"></a><a name="q-s648"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s649"></a><span>- как блоксхема (sequential workflow):</span><a href="http://gltrainee.files.wordpress.com/2008/06/untitled1.gif"><img class="aligncenter size-medium wp-image-38" src="http://gltrainee.files.wordpress.com/2008/06/untitled1.gif?w=172&#038;h=159" alt="" width="172" height="159" /></a></p>
<p class="MsoBodyText" align="center"><a name="q-s654"></a><span style="color:blue;"><!--[if gte vml 1]&gt;   &lt;![endif]--><!--[if !vml]--><!--[endif]--></span><a name="q-s655"></a><a name="q-s656"></a><a name="q-s657"></a><a name="q-s658"></a></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s660"></a><span lang="EN-US"> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s661"></a><span>- как диаграмма состояний (state machine workflow (конечный автомат)):</span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s662"></a><a name="q-s663"></a></p>
<p style="text-align:center;"><img class="size-medium wp-image-39 aligncenter" src="http://gltrainee.files.wordpress.com/2008/06/untitled235.gif?w=179&#038;h=142" alt="" width="179" height="142" /></p>
<p class="MsoBodyText" style="text-align:justify;"><span> </span></p>
<p class="MsoBodyText" style="text-align:center;" align="center"><a name="q-s664"></a><a name="q-s665"></a><a name="q-s666"></a><span style="color:blue;"><!--[if gte vml 1]&gt;   &lt;![endif]--><!--[if !vml]--><!--[endif]--></span><a name="q-s667"></a></p>
<p class="MsoBodyText" style="text-align:justify;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><a name="q-s670"></a><a href="http://gltrainee.files.wordpress.com/2008/06/untitled235.gif"></a><span>Рассмотрим виды workflow более подробно:</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s671"></a><a name="q-s672"></a><a name="q-s673"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span>Sequential Workflow (последовательній работопоток) имееет последователььную структуру которая и определяет его порядок исполнения «Шаг1-&gt;Шаг2-&gt;Шаг3». Такие сценарии имеют четко определенные начало и конец, но тем не менее не лишены и гибкости полнейшего зацикливания.</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s674"></a><a name="q-s675"></a><a name="q-s676"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span style="color:black;">State Machine Workflow (конечный астомат операций) имеет вид графа с иногда болтающимися вершинами, последовательностью выполнения управляют внешние события, вследствие чего система переходит из одного состояния в другое.</span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s677"></a><span>&#8230; выполнение и тех и других воркфлоу может регламентироваться небором правил «правило1 – шаг1, правило 2 – шаг2»</span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s678"></a><a name="q-s679"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s680"></a><span>Зачем же это все нужно ? &#8230; <a name="q-s681"></a><span style="color:black;">Workflow даёт нам ускорение в разработке в нескольно раз !</span></span></p>
<p class="MsoBodyText" style="text-align:justify;"><span style="color:black;"> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s682"></a><span>Workflow также имеет ряд дополнительной функциональности: </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s683"></a><a name="q-s684"></a><a name="q-s685"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><em><span style="text-decoration:underline;"><span>Поддержка длительных процессов с сохранением состояния</span></span></em><span style="text-decoration:underline;"><span>.</span></span><span> Т.е. если, к примеру, работа <a name="q-s686"></a><span style="color:black;">Workflow в определенный момент требует какого нить внешнего событися – то на время ожидания состояние Workflow может быть сохранено в базу данных а затем по наступлению этого желаемого события быть реактивировано для дальнейшего выполнения с восстановлением предъидущего состояния</span>.</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s687"></a><a name="q-s688"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><em><span style="text-decoration:underline;"><span>Гибкая и легко изменяемая последовательность шагов</span></span></em><em><span>.</span></em><span> Т.е. в <a name="q-s689"></a><span style="color:black;">Workflow состояшего из набора шагов эти шаги можно переставлять не меняя ни строчки кода</span>.</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s690"></a><a name="q-s691"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><em><span style="text-decoration:underline;"><span>Прозрачность исполнения</span></span></em><span>. – т.е. Workflow можно дебажить прямо в дизайнере, так же каждый шаг в Workflow может оповещать о ходе своего выполнения.</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s692"></a><a name="q-s693"></a><a name="q-s694"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><em><span style="text-decoration:underline;"><span style="color:black;">Инфраструктура для логов и трассировки</span></span></em><span style="color:black;">. Т.е. каждое действие в Workflow может быть залогировано и отслежено его выполнение в удобной для разработчика форме</span><span>.</span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:-14.15pt;"><a name="q-s695"></a><a name="q-s696"></a><a name="q-s697"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><em><span style="text-decoration:underline;"><span style="color:black;">Персистентность</span></span></em><span style="color:black;"> имеет родственность с пунктом первым, состоит в автоматическом сбрасывании состояния в базу данных и затем восстановления из нее когда нужно</span><span>.</span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="q-s698"></a><a name="q-s699"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><span>В результате можем сделать вывод о ключевых концепциях и составных частях </span><span lang="EN-US">Windows</span><span lang="EN-US"> </span><span lang="EN-US">Workflow</span><span lang="EN-US"> </span><span lang="EN-US">Foundation</span><span>.</span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><span>К основным концепциям относится то что </span><span lang="EN-US">Workflow</span><span> это набор действый, что </span><span lang="EN-US">Workflow</span><span>ы могут исполняться только в хост-процессе (любом приложении), а также то что разработчики, т.е. мы, можем создавать свои собственные библиотеки действий (</span><span lang="EN-US">custom</span><span lang="EN-US"> </span><span lang="EN-US">activities</span><span>).</span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><span>К основным компонентам </span><span lang="EN-US">Workflow</span><span> относятся: базовая библиотека действий, среда исполнения , сервисы (как стандартные так и кастом) &#8230; а также визуальный дизайнер являющийся одной из основных фиче </span><span lang="EN-US">Workflow</span><a name="ue-3"></a><a name="pl2j"></a><span>.</span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><span>Обработчики выполнения вызываемые планировциком &#8230; это просто методы операций &#8230; поэтому любой из них может возбудить исключение и если оно не обрабатывается то </span><span lang="EN-US">Workflow</span><span> просто заканчивает своё выполнение. Необработанное исключение не всплывает в хост приложение, однако вытащить его там всетаки можно через свойство </span><span lang="EN-US">Exception</span><span> аргументов события </span><span lang="EN-US">Terminated</span><span>. Исключение не всплывет в хост-приложение т.к. в </span><span lang="EN-US">Windows</span><span lang="EN-US"> </span><span lang="EN-US">Workflow</span><span> исключения распространяются асинхронно, соответственно и обрабатываться должны тоже асинхронно – для этого всего компания Microsoft придумала такое состояние активити как </span><span lang="EN-US">Faulting</span><span> – когда работа (операция) валится (в ней возникает исключение) то она переходит в состояние </span><span lang="EN-US">Faulting</span><span>, другие операции выполняющиеся в этом </span><span lang="EN-US">Workflow</span><span> в этот же момент отменяются переходя срочно в состояние </span><span lang="EN-US">Canceling</span><span>, для поимки исключение в композитных работах (операциях могущих иметь подопереции) предусмотрен режим </span><span lang="EN-US">Fault</span><span lang="EN-US"> </span><span lang="EN-US">Handler</span><span> в который мы можем добавлять хендлеры (это такие стандартные активити для поимки исключений) которые будут ловить конкретные виды иссключений &#8230; далее можно выполнить какието восстановительные работы и/или транслировать иссключение в хост-приложение<a name="pl2j0"></a>.<a name="ue-30"></a></span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:21.2pt;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><span>Подберемся ближе к непосредственной разработке в терминах </span><span lang="EN-US">Workflow</span><span> &#8230;<a name="s2lf"></a><br />
<span> </span></span><span lang="EN-US">Workflow</span><span> могут быть созданы в трех ипостасях:</span></p>
<p class="MsoBodyText" style="margin-left:0.5in;text-align:justify;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span>только разметка (</span><span lang="EN-US">XAML</span><span>)</span></p>
<p class="MsoBodyText" style="margin-left:0.5in;text-align:justify;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span>разметка + код</span></p>
<p class="MsoBodyText" style="margin-left:0.5in;text-align:justify;text-indent:-0.25in;"><!--[if !supportLists]--><span style="font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span>только код</span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="fxab"></a><span><span> </span><span> </span>Разметка в </span><span lang="EN-US">Workflow</span><span> определяет структуру </span><span lang="EN-US">Workflow</span><span>, а соответственно определяться должна структурой бизнес-логики, когда же разметка объеденяется с кодом то разметка </span><span lang="EN-US">XAML</span><span> определяет структуру </span><span lang="EN-US">Workflow</span><span>, а код логику, если же </span><span lang="EN-US">Workflow</span><span> представлен в виде только кода тогда </span><span lang="EN-US">Workflow</span><span> создается в конструкторе основного класса, но концептуально это никакого отличия не вносит. Обычно компилятор генерирует </span><span lang="EN-US">Workflow</span><span> как код + разметка &#8230;<a name="i8z2"></a></span></p>
<p class="MsoBodyText" style="text-align:justify;"><span><span> </span>Когда </span><span lang="EN-US">Workflow</span><span> готов к работе то при запуске компилятором </span><span lang="EN-US">Workflow</span><span lang="EN-US"> </span><span lang="EN-US">wcf</span><span>.</span><span lang="EN-US">exe</span><span> он переводится в обычный </span><span lang="EN-US">C</span><span># код (третий вариант создания) а затем джаст ин таймом в </span><span lang="EN-US">CIL</span><span> &#8230;<a name="m8h5"></a><a name="m8h50"></a></span></p>
<p class="MsoBodyText" style="text-align:justify;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><span><span> </span>Как итог обзора хотелось бы дать небольшую сравнительную характеристику подхода к разработке бизнесс-логики с </span><span lang="EN-US">Workflow</span><span> и без него<a name="vapz"></a>.</span></p>
<p class="MsoBodyText" style="text-align:justify;"><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><span lang="EN-US">Workflow</span><span>:<a name="tgzk"></a></span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk0"></a><a name="tgzk1"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Наглядность </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk11"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Расширяемость </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk12"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Обработка ошибок </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk13"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Трекинг </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk14"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Персистентность </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk15"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Unit-тесты </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="tgzk16"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Ускорение разработки </span></p>
<p class="MsoBodyText" style="text-align:justify;"><a name="rgac"></a><span> </span></p>
<p class="MsoBodyText" style="text-align:justify;"><span lang="EN-US">Клас</span><span>с</span><span lang="EN-US">ический подход:<a name="rm_o"></a></span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="rm_o0"></a><a name="rm_o1"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Привычность </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="rm_o2"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Жестко зашитая логика </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="rm_o21"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Ручной трекинг </span></p>
<p class="MsoBodyText" style="margin-left:0;text-align:justify;text-indent:0;"><a name="rm_o22"></a><!--[if !supportLists]--><span style="font-size:9pt;font-family:Symbol;"><span>·<span> </span></span></span><!--[endif]--><span lang="EN-US">Ручная обработка ошибок </span></p>
<p class="MsoBodyText" style="text-align:justify;"><span lang="EN-US"> </span></p>
<p class="MsoBodyText" style="text-align:justify;text-indent:35.45pt;"><a name="fe4v"></a><span>Надеюсь данная вольно написанная статья помогла вам получить хоть частичную иллюзию понимания </span><span lang="EN-US">Windows</span><span lang="EN-US"> </span><span lang="EN-US">Workflow</span><span lang="EN-US"> </span><span lang="EN-US">Foundation</span><span lang="EN-US"> </span><span style="font-family:Wingdings;"><span>J</span></span><span>.</span></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gltrainee.wordpress.com/36/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gltrainee.wordpress.com/36/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gltrainee.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gltrainee.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gltrainee.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gltrainee.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gltrainee.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gltrainee.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gltrainee.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gltrainee.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gltrainee.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gltrainee.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gltrainee.wordpress.com&blog=3911599&post=36&subd=gltrainee&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gltrainee.wordpress.com/2008/06/26/%d0%b2%d0%b2%d1%83%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-windows-workflow-foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e52f9678ec4a38aa487f3a4f64db85e9?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">whitenie</media:title>
		</media:content>

		<media:content url="http://gltrainee.files.wordpress.com/2008/06/untitled.gif?w=300" medium="image" />

		<media:content url="http://gltrainee.files.wordpress.com/2008/06/untitled1.gif?w=172" medium="image" />

		<media:content url="http://gltrainee.files.wordpress.com/2008/06/untitled235.gif?w=179" medium="image" />
	</item>
		<item>
		<title>Windows Workflow Foundation (Введение)</title>
		<link>http://gltrainee.wordpress.com/2008/06/07/windows-workflow-foundation-%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5/</link>
		<comments>http://gltrainee.wordpress.com/2008/06/07/windows-workflow-foundation-%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 12:41:45 +0000</pubDate>
		<dc:creator>masalov</dc:creator>
				<category><![CDATA[WF]]></category>
		<category><![CDATA[Activity]]></category>
		<category><![CDATA[Local services]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://gltrainee.wordpress.com/?p=15</guid>
		<description><![CDATA[Windows Workflow Foundation (WWF) представляет собой технологию Microsoft для определения, выполнения и управления рабочими потоками (workflows). Windows Workflow Foundation является подсистемой .NET Framework 3.0, входящей в состав операционной системы Windows Vista. WWF ориентирована на визуальное программирование, используя при этом декларативную модель программирования.

Базовые понятия
Как известно, логику работы программной системы можно представить в виде схемы. Обычно схемы [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gltrainee.wordpress.com&blog=3911599&post=15&subd=gltrainee&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Windows Workflow Foundation (WWF) представляет собой технологию Microsoft для определения, выполнения и управления рабочими потоками (workflows). Windows Workflow Foundation является подсистемой .NET Framework 3.0, входящей в состав операционной системы Windows Vista. WWF ориентирована на визуальное программирование, используя при этом декларативную модель программирования.</p>
<p><span id="more-15"></span><br />
<strong>Базовые понятия</strong></p>
<p>Как известно, логику работы программной системы можно представить в виде схемы. Обычно схемы используют на этапе проектирования, но во время разработки про них забывают, так как существующие инструменты синхронизации схем и кода не вполне эффективны. Так было до появления WF. Теперь у разработчиков есть возможность создавать в Visual Studio схемы, синхронизированные с кодом.</p>
<p>Для описания логики работы программ (алгоритмов) в WF используются два основных понятия – <strong>activity </strong>и <strong>workflow</strong>.</p>
<p><strong>Activity </strong>– это любое действие, которое логически считается элементарным (неделимым) или, другими словами, activity – это шаг алгоритма. С английского activity переводится как 1) «деятельность» 2) «активность». В разных статьях используются следующие синонимы: задание, задача, функция, операция, шаг процесса, элемент работы.</p>
<p>Активность реализована в классе System.Workflow.ComponentModel.Activity (находится в сборке System.Workflow.Activities.dll).</p>
<p>У класса Activity есть множество наследников, часть из которых служит для организации иерархий активностей. К таким классам относятся CompositeActivity и все его наследники, например, IfElseActivity, WhileActivity и т.д. Другая часть классов реализует активности, типичные для многих проектов – это, например, InvokeWebServiceActivity, InvokeWorkflowActivity и т.д. Типичные активности отображаются в Visual Studio в окне Toolbox (Ctrl+Alt+X).</p>
<p><strong>Workflow </strong>– это последовательность или иерархия активностей (activity). Переводится как «последовательность выполняемых действий». Синонимы: поток работ, работопоток, рабочий процесс, ход работ, бизнес-процесс, схема процесса, сценарий, модель процесса, модель бизнес-процесса, последовательность операций.</p>
<p>Если activity можно рассматривать как команду, специфичную для предметной области, то workflow – это дерево команд.</p>
<p>Существуют два класса (находятся в сборке System.Workflow.Activities.dll) с реализацией workflow:</p>
<p>*<strong> System.Workflow.Activities.SequentialWorkflowActivity</strong><br />
Поток, в котором все активности выполняются последовательно.</p>
<p>* <strong>System.Workflow.Activities.StateMachineWorkflowActivity</strong><br />
Событийно-управляемый поток, в котором активности вызываются непоследовательно в ответ на внешние события. Этот тип workflow подходит для создания различных мастеров (wizard).</p>
<p>Надо заметить, что среди предков у обоих классов есть класс CompositeActivity. Т.е. любой workflow является контейнером для других activity.</p>
<p><img src="/DOCUME~1/masalov/LOCALS~1/Temp/moz-screenshot.jpg" alt="" /><a href="http://gltrainee.files.wordpress.com/2008/06/5.jpg"><img class="aligncenter size-full wp-image-27" src="http://gltrainee.files.wordpress.com/2008/06/5.jpg" alt="" /></a></p>
<p>Примечание: наиболее часто повторяющиеся структуры, т.е. характерные последовательности активностей в workflow называют workflow-паттернами (workflow patterns или wf-patterns).</p>
<p><strong>Workflow runtime </strong>– исполняющая среда; служит для выполнения workflow, т.е. исполняющая среда «обходит» дерево workflow и «оживляет» activity. Синонимы: workflow engine, движок, механизм исполнения.</p>
<p>Исполняющая среда представлена в классе System.Workflow.Runtime.WorkflowRuntime, а также в ряде наследников класса System.Workflow.Runtime.Hosting.WorkflowRuntimeService (находятся в сборке System.Workflow.Runtime.dll).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gltrainee.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gltrainee.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gltrainee.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gltrainee.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gltrainee.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gltrainee.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gltrainee.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gltrainee.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gltrainee.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gltrainee.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gltrainee.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gltrainee.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gltrainee.wordpress.com&blog=3911599&post=15&subd=gltrainee&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gltrainee.wordpress.com/2008/06/07/windows-workflow-foundation-%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/68d963ae477c9c1d15463d3a10c23b56?s=96&#38;d=monsterid" medium="image">
			<media:title type="html">masalov</media:title>
		</media:content>

		<media:content url="/DOCUME~1/masalov/LOCALS~1/Temp/moz-screenshot.jpg" medium="image" />

		<media:content url="http://gltrainee.files.wordpress.com/2008/06/5.jpg" medium="image" />
	</item>
	</channel>
</rss>