<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Refactoring on Marko Apfel</title><link>http://blog.marko-apfel.de/tags/refactoring/</link><description>Recent content in Refactoring on Marko Apfel</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 12 Jul 2010 15:16:00 +0200</lastBuildDate><atom:link href="http://blog.marko-apfel.de/tags/refactoring/index.xml" rel="self" type="application/rss+xml"/><item><title>Verwenden von partiellen Klassen für COM-Belange</title><link>http://blog.marko-apfel.de/posts/verwenden-von-partiellen-klassen-fur-com-belange/</link><pubDate>Mon, 12 Jul 2010 15:16:00 +0200</pubDate><guid>http://blog.marko-apfel.de/posts/verwenden-von-partiellen-klassen-fur-com-belange/</guid><description>&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;
&lt;p&gt;Schon im Whitepaper „Auszeichnung von COM-Kategorien an .NET-Klassen mittels Attributen und deren Verwendung für Setup-Builds“ [1] habe ich deutlich gemacht warum das Verwenden von COM-Registrierungsfunktionen ein suboptimales Programmierpattern ist. Knackpunkt sind die Verstöße gegen SOC (separation of concerns) [2] und SRP (single responsibility principle) [3].&lt;/p&gt;</description></item><item><title>Casing of COM-Interop registered components</title><link>http://blog.marko-apfel.de/posts/casing-of-com-interop-registered-components/</link><pubDate>Tue, 08 Jun 2010 09:54:00 +0200</pubDate><guid>http://blog.marko-apfel.de/posts/casing-of-com-interop-registered-components/</guid><description>&lt;p&gt;During a refactoring I realized that renaming of components, which will be registered for COM-Interop, must be done carefully.&lt;/p&gt;
&lt;p&gt;In my case i changed the casing of &lt;code&gt;XyzToolbar&lt;/code&gt; to &lt;code&gt;XyzToolBar&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;At the developing machine everything works fine. But after installing the modified stuff at the production machine, the toolbar was not visible. Using &lt;code&gt;regasm&lt;/code&gt; with the new assemblies helped.&lt;/p&gt;</description></item><item><title>Gefahren des “cleanup code refactoring” im Zusammenhang mit P/Invoke und übergebenen Strukturen</title><link>http://blog.marko-apfel.de/posts/gefahren-des-cleanup-code-refactoring-im-zusammenhang-mit-p-invoke-und-ubergebenen-strukturen/</link><pubDate>Wed, 28 Apr 2010 09:40:00 +0200</pubDate><guid>http://blog.marko-apfel.de/posts/gefahren-des-cleanup-code-refactoring-im-zusammenhang-mit-p-invoke-und-ubergebenen-strukturen/</guid><description>&lt;h2 id="problemkontext"&gt;Problemkontext&lt;/h2&gt;
&lt;p&gt;So schön auch das automatische “cleanup code refactoring” von ReSharper ist, im Zusammenhang mit Strukturdefinitionen, die als Übergabe-Parameter für unmanaged Code Aufrufe benötigt werden, lauert eine große Gefahr.&lt;/p&gt;
&lt;p&gt;Standardmäßig ist im Profil “Full Cleanup” die Option “Reorder type members” auf “Yes” gestellt.&lt;/p&gt;</description></item><item><title>Casting Anti-Pattern</title><link>http://blog.marko-apfel.de/posts/casting-anti-pattern/</link><pubDate>Thu, 29 Oct 2009 12:35:00 +0100</pubDate><guid>http://blog.marko-apfel.de/posts/casting-anti-pattern/</guid><description>&lt;p&gt;Im unten stehendem Code ist ein Anti-Pattern, welches immer wieder im ArcObjects-Kontext zu beobachten ist.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cs" data-lang="cs"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;element&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;IMapSurroundFrame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;IMapSurround&lt;/span&gt; &lt;span class="n"&gt;mapSurround&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;IMapSurroundFrame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;MapSurround&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;..&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Es wird eine &lt;code&gt;is&lt;/code&gt;-Abfrage gemacht (&lt;code&gt;element is IMapSurroundFrame&lt;/code&gt;) und dann ein Stück später der tatsächliche Cast &lt;code&gt;((IMapSurroundFrame)element)&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>