<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр / Комментарии к посту «Автоматизация Undo/Redo функциональности с помощью .NET Generics» в блоге «.NET»</title>
	<link>http://habrahabr.ru/rss/post/80174/</link>
	<description><![CDATA[Новые комментарии к посту «Автоматизация Undo/Redo функциональности с помощью .NET Generics» в блоге «.NET»]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 13:01:23 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	

	
	
	
	
	
		
	
		<item>
			<title>08.01.2010 15:07:54 garex</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2361661</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2361661</link>
			<description><![CDATA[Как же?<br/>
<br/>
Один из слоя данных (генерик), а второй — логика, которая всё умеет и знает.<br/>
<br/>
Но не в этом суть.<br/>
<br/>
А в том, что истинно-православная диаграмма придумывается долго и способна передать всю суть в пару миллисекунд instead of long-long-code-listings.<br/>
<br/>
Так что это целое отдельное направление и необязательно автор им должен заниматься, а те товарищи, которые в этом секут.]]></description>
			<pubDate>Fri, 08 Jan 2010 15:07:54 GMT</pubDate>
			<author>garex</author>
		</item>
	

	
		<item>
			<title>08.01.2010 14:46:39 zhylin</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2361575</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2361575</link>
			<description><![CDATA[Комментарий автора:<br/>
<blockquote>Это все таки намного более упрощенное решение. Насколько я помню можно откатить только последнюю операцию. Redo отсутсвует. Поддержка стека изменений отсутствует. Всегда надо наследоваться от определенного класса. Что делать со списками вообще не понятно. И как объеденить изменения в одну транзакцию, если они сделанны в 50 различных объектах, которые возможно даже не связанны друг с другом? Вообщем, это не Undo-Redo решение — это решение для OK-Cancel в простых формах редактирования.</blockquote>]]></description>
			<pubDate>Fri, 08 Jan 2010 14:46:39 GMT</pubDate>
			<author>zhylin</author>
		</item>
	

	
		<item>
			<title>08.01.2010 14:43:49 zhylin</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2361563</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2361563</link>
			<description><![CDATA[Комментарий автора:<br/>
<blockquote>Ну можно было конечно нарисовать два класса… UndoRedo&lt;&gt; и UndoRedoManager. Они даже не связаны между собой...</blockquote>]]></description>
			<pubDate>Fri, 08 Jan 2010 14:43:49 GMT</pubDate>
			<author>zhylin</author>
		</item>
	

	
		<item>
			<title>08.01.2010 14:42:28 zhylin</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2361554</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2361554</link>
			<description><![CDATA[Комментарий автора:<br/>
<blockquote>Про PostSharp предложение возможно жизнеспособное. Спасибо.<br/>
Следует понимать что статья писалась несколько лет назад, когда таких библиотек не было. Был голый фреймворк 2.0<br/>
Можно было бы добавить примочку в DejaVu проект, если руки дойдут… Если бы кто помог было бы совсем замечательно… А то многие хвалят, качают, но улучшения никто не присылает. Ну да ладно, я не обижаюсь :)).</blockquote>]]></description>
			<pubDate>Fri, 08 Jan 2010 14:42:28 GMT</pubDate>
			<author>zhylin</author>
		</item>
	

	
		<item>
			<title>08.01.2010 08:30:12 build_your_web</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2360355</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2360355</link>
			<description><![CDATA[Выглядело бы гораздо лучше, если взять обычные autoproperties и применить к ним PostSharp.<br/>
В итоге <br/>
<br/>
<blockquote><code> private readonly UndoRedo name = new UndoRedo&lt;string /&gt;(&quot;&quot;);<br/>
<br/>
public string string Name<br/>
 {<br/>
 get { return name.Value; }<br/>
 set { name.Value = value; }<br/>
 }<br/>
</code><br/>
</blockquote><br/>
<br/>
было бы заменено на<br/>
<blockquote><code>[UndoRedoProperty]<br/>
public string name {get; set;}<br/>
</code><br/>
</blockquote>]]></description>
			<pubDate>Fri, 08 Jan 2010 08:30:12 GMT</pubDate>
			<author>build_your_web</author>
		</item>
	

	
		<item>
			<title>08.01.2010 01:24:16 gruz0</title>
			<guid isPermaLink="true">#comment_2360016</guid>
			<link>#comment_2360016</link>
			<description><![CDATA[Друзья, а можно указывать изначально версию .NET в топике?<br/>
Просто некоторые пишут диаметрально-противоположные вещи, в том же контексте.<br/>
<br/>
Я к тому, чтобы разделять разные направления дотнета, друзья.<br/>
<br/>
Прошу простить за занудство.]]></description>
			<pubDate>Fri, 08 Jan 2010 01:24:16 GMT</pubDate>
			<author>gruz0</author>
		</item>
	

	
		<item>
			<title>07.01.2010 19:21:50 garex</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358851</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358851</link>
			<description><![CDATA[Проблема во времени, которое ценно.<br/>
<br/>
Инженеры обычно понапридумывают кучу идей, а представить их нормально редко когда могут.<br/>
<br/>
Хорошее представление — это когда другим людям не надо тратить своё время на «кормления» и прочее.<br/>
<br/>
Красивые идеи опьяняют создателей, как эйфория первой любви и поэтому они редко когда задумываются о дальнейшем продвижении.<br/>
<br/>
BTW, в России это одна из ключевых проблем — у нас «придумывалка» длинней всех в мире, а «продвигалка» ампутирована ещё на стадии зачатия.]]></description>
			<pubDate>Thu, 07 Jan 2010 19:21:50 GMT</pubDate>
			<author>garex</author>
		</item>
	

	
		<item>
			<title>07.01.2010 19:14:14 Karen</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358824</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358824</link>
			<description><![CDATA[Ну так в чём проблема скормите проект интерпрайх архитекту и делов то ;)]]></description>
			<pubDate>Thu, 07 Jan 2010 19:14:14 GMT</pubDate>
			<author>Karen</author>
		</item>
	

	
		<item>
			<title>07.01.2010 16:02:19 SychevIgor</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358314</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358314</link>
			<description><![CDATA[Действительно наверное все проще чем мне показалось в начале, но все же сделать обертку как то проще помоему чем наследоваться от абстрактоно класса и определять еще и свойства как абстрактные. Это может не по архитектуре <s>Феншую</s> аказаться<br/>
а вот такая реалзиация простая в виде обертки меня очень прильщает.<br/>
UndoRedo name = new UndoRedo&lt;string /&gt;(&quot;&quot;);<br/>
Если действительно есть какие то подводные камни, то напишите их. Тема то очень интересная. ]]></description>
			<pubDate>Thu, 07 Jan 2010 16:02:19 GMT</pubDate>
			<author>SychevIgor</author>
		</item>
	

	
		<item>
			<title>07.01.2010 15:57:58 mezastel</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358306</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358306</link>
			<description><![CDATA[Ну если учесть что на СР раз в 100 больше посетителей чем на Хабре, это в принципе понятно.]]></description>
			<pubDate>Thu, 07 Jan 2010 15:57:58 GMT</pubDate>
			<author>mezastel</author>
		</item>
	

	
		<item>
			<title>07.01.2010 15:48:08 dotneter</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358287</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358287</link>
			<description><![CDATA[&gt;System.ComponentModel<br/>
Использовать стандартные средства фреймворка лучше чем изобретать свои.]]></description>
			<pubDate>Thu, 07 Jan 2010 15:48:08 GMT</pubDate>
			<author>dotneter</author>
		</item>
	

	
		<item>
			<title>07.01.2010 14:57:35 Dimchansky</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358168</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358168</link>
			<description><![CDATA[Так в BLToolkit вроде же надо просто сделать абстрактный класс и унаследоваться от EditableObject&lt;имя этого класса&gt;, а свойства тоже определить как абстрактные.<br/>
Дальше все нужные обертки будут сделаны автоматически:<br/>
<br/>
<blockquote><code><font color="black"><font color="#0000ff">using</font> System;<br/>
<font color="#0000ff">using</font> NUnit.Framework;<br/>
<font color="#0000ff">using</font> BLToolkit.EditableObjects;<br/>
<br/>
<font color="#0000ff">namespace</font> HowTo.EditableObjects<br/>
{<br/>
&nbsp;&nbsp;[TestFixture]<br/>
&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">class</font> EditableObjectTest<br/>
&nbsp;&nbsp;{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">abstract</font> <font color="#0000ff">class</font> TestObject : EditableObject&lt;TestObject&gt;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">// Any abstract property becomes editable.</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">abstract</font> <font color="#0000ff">string</font> FirstName { <font color="#0000ff">get</font>; <font color="#0000ff">set</font>; }<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">abstract</font> <font color="#0000ff">string</font> LastName&nbsp;{ <font color="#0000ff">get</font>; <font color="#0000ff">set</font>; }<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">// This field is not editable.</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">//</font><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">string</font> FullName<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">get</font> { <font color="#0000ff">return</font> <font color="#0000ff">string</font>.Format(<font color="#A31515">&quot;{0} {1}&quot;</font>, FirstName, LastName); }<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>
&nbsp;&nbsp;&nbsp;&nbsp;}<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;[Test]<br/>
&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">public</font> <font color="#0000ff">void</font> Test()<br/>
&nbsp;&nbsp;&nbsp;&nbsp;{<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject obj = TestObject.CreateInstance();<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.FirstName = <font color="#A31515">&quot;Tester&quot;</font>;<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.LastName&nbsp;= <font color="#A31515">&quot;Testerson&quot;</font>;<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.IsTrue(obj.IsDirty);<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.AcceptChanges();<br/>
<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.IsFalse(obj.IsDirty);<br/>
&nbsp;&nbsp;&nbsp;&nbsp;}<br/>
&nbsp;&nbsp;}<br/>
}</font><br/>
<br/>
</code></blockquote>]]></description>
			<pubDate>Thu, 07 Jan 2010 14:57:35 GMT</pubDate>
			<author>Dimchansky</author>
		</item>
	

	
		<item>
			<title>07.01.2010 14:50:19 SychevIgor</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358147</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358147</link>
			<description><![CDATA[Внешне выглядит действительно похоже. Хочется даже попробовать сделать сравнение. <br/>
Но если честно .Net Generic c его <br/>
private readonly UndoRedo name = new UndoRedo&lt;string /&gt;(&quot;&quot;);<br/>
public string string Name<br/>
{ get { return name.Value; } set { name.Value = value; }}<br/>
Выглядит несколько проще чем требование реализации списка этих интерфейсов в EditableObject ( Business Logic Toolkit )<br/>
Вот список пространств имен и интерфейсов требуемых для работы с эти проектом (у коллекций чуть другие интерфейсы <a href="http://bltoolkit.net/doc/EditableObjects/index.htm">bltoolkit.net/doc/EditableObjects/index.htm</a>)<br/>
System.ComponentModel IEditableObject <br/>
System.ComponentModel INotifyPropertyChanged <br/>
System.ComponentModel ICustomTypeDescriptor <br/>
System ICloneable <br/>
BLToolkit.ComponentModel INotifyObjectEdit <br/>
BLToolkit.EditableObjects IEditable <br/>
BLToolkit.Validation IValidatable <br/>
]]></description>
			<pubDate>Thu, 07 Jan 2010 14:50:19 GMT</pubDate>
			<author>SychevIgor</author>
		</item>
	

	
		<item>
			<title>07.01.2010 14:36:34 garex</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358127</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358127</link>
			<description><![CDATA[UML-диаграмму хочу.]]></description>
			<pubDate>Thu, 07 Jan 2010 14:36:34 GMT</pubDate>
			<author>garex</author>
		</item>
	

	
		<item>
			<title>07.01.2010 14:21:03 Ogra</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358103</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358103</link>
			<description><![CDATA[Напишите «Автоматизация» вместо «автоматизирование», и будет совсем все хорошо.]]></description>
			<pubDate>Thu, 07 Jan 2010 14:21:03 GMT</pubDate>
			<author>Ogra</author>
		</item>
	

	
		<item>
			<title>07.01.2010 14:19:22 Dimchansky</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358098</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358098</link>
			<description><![CDATA[Если я правильно понял идею, то это очень похоже на <a href="http://bltoolkit.net/Doc/EditableObjects/EditableObject.htm">EditableObject</a> в <a href="http://bltoolkit.net/">Business Logic Toolkit for .NET</a> фреймворке.]]></description>
			<pubDate>Thu, 07 Jan 2010 14:19:22 GMT</pubDate>
			<author>Dimchansky</author>
		</item>
	

	
		<item>
			<title>07.01.2010 14:01:27 Horse</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358056</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358056</link>
			<description><![CDATA[Очень полезная функция. И достаточно эффективная, писать свои аналоги теперь не понадобится.]]></description>
			<pubDate>Thu, 07 Jan 2010 14:01:27 GMT</pubDate>
			<author>Horse</author>
		</item>
	

	
		<item>
			<title>07.01.2010 13:51:45 zhylin</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2358033</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2358033</link>
			<description><![CDATA[готово]]></description>
			<pubDate>Thu, 07 Jan 2010 13:51:45 GMT</pubDate>
			<author>zhylin</author>
		</item>
	

	
		<item>
			<title>07.01.2010 12:52:27 jeje</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2357901</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2357901</link>
			<description><![CDATA[Последнее время так интересно видеть переводы статей, которые написанные нашими на не нашем :)]]></description>
			<pubDate>Thu, 07 Jan 2010 12:52:27 GMT</pubDate>
			<author>jeje</author>
		</item>
	

	
		<item>
			<title>07.01.2010 12:51:58 Coder89</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/net/80174/#comment_2357896</guid>
			<link>http://habrahabr.ru/blogs/net/80174/#comment_2357896</link>
			<description><![CDATA[Сделайте подсветку синтаксиса, пожалуйста. А так, спасибо за информацию.]]></description>
			<pubDate>Thu, 07 Jan 2010 12:51:58 GMT</pubDate>
			<author>Coder89</author>
		</item>
	

	
</channel>
</rss>

