<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Architectural Atrocities, part 5: Interfaces in AS3</title>
	<atom:link href="http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/</link>
	<description></description>
	<lastBuildDate>Sun, 07 Mar 2010 14:29:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Theo</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7932</link>
		<dc:creator>Theo</dc:creator>
		<pubDate>Wed, 21 Oct 2009 15:11:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7932</guid>
		<description>&lt;p&gt;Haha, no the PHP libraries have a thousand conventions. But my point was rather that many of the PHP functions are named after the C convention of removing the vowels and leaving off parts of the end. There are other parts that don&#039;t follow that convention, and I&#039;m not sure if that&#039;s a good or a bad thing =)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Haha, no the PHP libraries have a thousand conventions. But my point was rather that many of the PHP functions are named after the C convention of removing the vowels and leaving off parts of the end. There are other parts that don&#8217;t follow that convention, and I&#8217;m not sure if that&#8217;s a good or a bad thing =)</p>]]></content:encoded>
	</item>
	<item>
		<title>By: maciek</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7931</link>
		<dc:creator>maciek</dc:creator>
		<pubDate>Wed, 21 Oct 2009 15:02:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7931</guid>
		<description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I don&#039;t think the words &quot;conventions&quot; and &quot;PHP standard library&quot; belong in the same sentence, so I&#039;ll ignore that example. I essentially meant that there is some cognitive load associated with using an API that has a mix of IInterfaces and regular Interfaces. Conversely, I suppose you could argue that you&#039;re reducing the cognitive load by purging the ridiculous IPrefix wherever possible. I guess it&#039;s a matter of taste.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Touché.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For what it&#039;s worth, I was firmly in favor of IPrefixes; I&#039;m now on the fence.&lt;/p&gt;

&lt;p&gt;Also, while slightly off-topic, your posts (especially on presentation models) in the Mate forums have helped me immensely in understanding sane, maintainable, and testable UI architecture. Thank you.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<ol>
<li><p>I don&#8217;t think the words &#8220;conventions&#8221; and &#8220;PHP standard library&#8221; belong in the same sentence, so I&#8217;ll ignore that example. I essentially meant that there is some cognitive load associated with using an API that has a mix of IInterfaces and regular Interfaces. Conversely, I suppose you could argue that you&#8217;re reducing the cognitive load by purging the ridiculous IPrefix wherever possible. I guess it&#8217;s a matter of taste.</p></li>
<li><p>Touché.</p></li>
</ol>

<p>For what it&#8217;s worth, I was firmly in favor of IPrefixes; I&#8217;m now on the fence.</p>

<p>Also, while slightly off-topic, your posts (especially on presentation models) in the Mate forums have helped me immensely in understanding sane, maintainable, and testable UI architecture. Thank you.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Theo</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7930</link>
		<dc:creator>Theo</dc:creator>
		<pubDate>Wed, 21 Oct 2009 05:05:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7930</guid>
		<description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I don&#039;t find this argument very convincing. Don&#039;t follow bad conventions. &lt;/p&gt;
&lt;p&gt;If we had listened to that argument we would still call our methods things like memcmp, strlen or tmpnam. Just look at the PHP standard library. Stick with the good things and your code will blend in just fine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you want to make it blindingly obvious when developers write APIs in terms of concrete types have them prefix all classes with C.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
		<content:encoded><![CDATA[<ol>
<li><p>I don&#8217;t find this argument very convincing. Don&#8217;t follow bad conventions. </p>
<p>If we had listened to that argument we would still call our methods things like memcmp, strlen or tmpnam. Just look at the PHP standard library. Stick with the good things and your code will blend in just fine.</p></li>
<li><p>If you want to make it blindingly obvious when developers write APIs in terms of concrete types have them prefix all classes with C.</p></li>
</ol>]]></content:encoded>
	</item>
	<item>
		<title>By: maciek</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7929</link>
		<dc:creator>maciek</dc:creator>
		<pubDate>Tue, 20 Oct 2009 18:16:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7929</guid>
		<description>&lt;p&gt;While I agree with your point in general, I think there are two arguments in favor of the &#039;I&#039; prefix:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;This is what the AS3 APIs do. There&#039;s something to be said for following a set of code conventions in your project (see, e.g., the section in McConnell&#039;s &#039;Code Complete&#039;), and naming conventions that clash with those of the standard library are going to stick out. It&#039;s true that the AS3 APIs do lots of things that are far from exemplary, but in deference to the cohesiveness of your project code base, I think you have less leeway in ignoring core library naming conventions than its other design choices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It helps identify when developers on your project are writing APIs in terms of concrete types. Of course, you could argue that &quot;don&#039;t write APIs in terms of concrete types&quot; is a more useful &quot;convention&quot; than &quot;prefix interfaces with &#039;I&#039;&quot;, but realistically, the latter is probably easier to enforce.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
		<content:encoded><![CDATA[<p>While I agree with your point in general, I think there are two arguments in favor of the &#8216;I&#8217; prefix:</p>

<ol>
<li><p>This is what the AS3 APIs do. There&#8217;s something to be said for following a set of code conventions in your project (see, e.g., the section in McConnell&#8217;s &#8216;Code Complete&#8217;), and naming conventions that clash with those of the standard library are going to stick out. It&#8217;s true that the AS3 APIs do lots of things that are far from exemplary, but in deference to the cohesiveness of your project code base, I think you have less leeway in ignoring core library naming conventions than its other design choices.</p></li>
<li><p>It helps identify when developers on your project are writing APIs in terms of concrete types. Of course, you could argue that &#8220;don&#8217;t write APIs in terms of concrete types&#8221; is a more useful &#8220;convention&#8221; than &#8220;prefix interfaces with &#8216;I&#8217;&#8221;, but realistically, the latter is probably easier to enforce.</p></li>
</ol>]]></content:encoded>
	</item>
	<item>
		<title>By: Theo</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7849</link>
		<dc:creator>Theo</dc:creator>
		<pubDate>Wed, 17 Jun 2009 19:53:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7849</guid>
		<description>&lt;p&gt;@Kingfish sticking the &quot;I&quot; at the end or the beginning doesn&#039;t really matter, you still just arbitrarily separate interfaces from other types. The point is that interface types aren&#039;t special.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@Kingfish sticking the &#8220;I&#8221; at the end or the beginning doesn&#8217;t really matter, you still just arbitrarily separate interfaces from other types. The point is that interface types aren&#8217;t special.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Kingfish</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7848</link>
		<dc:creator>Kingfish</dc:creator>
		<pubDate>Wed, 17 Jun 2009 17:58:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7848</guid>
		<description>&lt;p&gt;Also on another comment, in most cases you are going to have multiple uses of a interface so let say you have a interface called EnemyI.  Then you will probably have tons of classes called such as Pion, Boss, Assasin, etc and it could also have other interfaces.  Totally bad idea to call it PionImpl because that would completely defeat the point.  The interface is what you are trying to identify in the name not the classes that implement it.  Build APIs to tell you this.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Also on another comment, in most cases you are going to have multiple uses of a interface so let say you have a interface called EnemyI.  Then you will probably have tons of classes called such as Pion, Boss, Assasin, etc and it could also have other interfaces.  Totally bad idea to call it PionImpl because that would completely defeat the point.  The interface is what you are trying to identify in the name not the classes that implement it.  Build APIs to tell you this.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Kingfish</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7847</link>
		<dc:creator>Kingfish</dc:creator>
		<pubDate>Wed, 17 Jun 2009 17:55:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7847</guid>
		<description>&lt;p&gt;I program in java mostly and have recently started looking at AS3.  I have used Interfaces for years and my standard which I guess is the java standard is to call interfaces I at the end.  This way there names are easier to find.  Basically FootballPlayerI for the football player interface instead of IFootballPlayer which becomes unreadable in my opinion as stated above.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I program in java mostly and have recently started looking at AS3.  I have used Interfaces for years and my standard which I guess is the java standard is to call interfaces I at the end.  This way there names are easier to find.  Basically FootballPlayerI for the football player interface instead of IFootballPlayer which becomes unreadable in my opinion as stated above.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: tylermac</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7835</link>
		<dc:creator>tylermac</dc:creator>
		<pubDate>Wed, 27 May 2009 17:11:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7835</guid>
		<description>&lt;p&gt;Nick said:&lt;/p&gt;

&lt;p&gt;Better to keep life simple and adopt the standard which exists for good reason.&lt;/p&gt;

&lt;p&gt;So I would recommend instead of an I prefix on interfaces, adding a impl postfix on Classes. This way, it will be the classes that look out of place in your code.&lt;/p&gt;

&lt;p&gt;Just a thought.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Nick said:</p>

<p>Better to keep life simple and adopt the standard which exists for good reason.</p>

<p>So I would recommend instead of an I prefix on interfaces, adding a impl postfix on Classes. This way, it will be the classes that look out of place in your code.</p>

<p>Just a thought.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7760</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Wed, 11 Feb 2009 00:47:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7760</guid>
		<description>&lt;p&gt;When I was developing MS COM apps back in the day, we didn&#039;t use &quot;I&quot; to denote just any interface. We used it to denote an interface that extended IUnknown. These interfaces provided special features necessary for MS&#039;s COM such as the QueryInterface function and a UUID that uniquely identified the interface in the system. I&#039;ve created large-ish COM components whose implementation consisted of non-COM interfaces, and for those we did not use the &quot;I&quot; prefix. So, we didn&#039;t use &quot;I&quot; to distinguish between our classes and our interfaces we used it to distinguish between regular C++ interfaces and COM compatible interfaces.&lt;/p&gt;

&lt;p&gt;I&#039;ve also done some eclipse development and many of the platform interfaces are prefixed with &quot;I&quot; also. But again, this prefix isn&#039;t on all interfaces, just those that are interfaces that correspond to a plugin&#039;s extension point. As someone consuming these platform APIs it is very necessary for me to be able to quickly look at a package&#039;s contents and determine which of the interfaces (with the I icon in the IDE) are participating in the plugin&#039;s public API.&lt;/p&gt;

&lt;p&gt;So while I agree that using &quot;I&quot; to distinguish between classes and interfaces is silly, using it in other circumstances can make sense - specifically where you have a component framework of some sort that can treat certain interfaces in a special manner.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>When I was developing MS COM apps back in the day, we didn&#8217;t use &#8220;I&#8221; to denote just any interface. We used it to denote an interface that extended IUnknown. These interfaces provided special features necessary for MS&#8217;s COM such as the QueryInterface function and a UUID that uniquely identified the interface in the system. I&#8217;ve created large-ish COM components whose implementation consisted of non-COM interfaces, and for those we did not use the &#8220;I&#8221; prefix. So, we didn&#8217;t use &#8220;I&#8221; to distinguish between our classes and our interfaces we used it to distinguish between regular C++ interfaces and COM compatible interfaces.</p>

<p>I&#8217;ve also done some eclipse development and many of the platform interfaces are prefixed with &#8220;I&#8221; also. But again, this prefix isn&#8217;t on all interfaces, just those that are interfaces that correspond to a plugin&#8217;s extension point. As someone consuming these platform APIs it is very necessary for me to be able to quickly look at a package&#8217;s contents and determine which of the interfaces (with the I icon in the IDE) are participating in the plugin&#8217;s public API.</p>

<p>So while I agree that using &#8220;I&#8221; to distinguish between classes and interfaces is silly, using it in other circumstances can make sense &#8211; specifically where you have a component framework of some sort that can treat certain interfaces in a special manner.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Theo</title>
		<link>http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/comment-page-1/#comment-7673</link>
		<dc:creator>Theo</dc:creator>
		<pubDate>Sun, 23 Nov 2008 17:02:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.iconara.net/2006/07/29/architectural-atrocities-part-5-interfaces-in-as3/#comment-7673</guid>
		<description>&lt;p&gt;&lt;em&gt;Can you immediately say for sure, when looking at an external reference to an interface in some stranger’s code, that is indeed an interface?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This question assumes that there is a difference between a type declared by an interface and a type declared by a class -- but that is not the case. It makes no difference what declared a type.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;About Bill Trowbridge&#039;s comment: if I understand him correctly he proposes to drop the &quot;I&quot; prefix in favour of showing some icon next to the type in the IDE. His suggestion makes sense, absolutely. He wrote that over four years ago and nowadays most IDEs do what he suggests. However, the &quot;I&quot; prefix tradition still lives on.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p><em>Can you immediately say for sure, when looking at an external reference to an interface in some stranger’s code, that is indeed an interface?</em></p>

<p>This question assumes that there is a difference between a type declared by an interface and a type declared by a class &#8212; but that is not the case. It makes no difference what declared a type.</p>

<p>&#8211;</p>

<p>About Bill Trowbridge&#8217;s comment: if I understand him correctly he proposes to drop the &#8220;I&#8221; prefix in favour of showing some icon next to the type in the IDE. His suggestion makes sense, absolutely. He wrote that over four years ago and nowadays most IDEs do what he suggests. However, the &#8220;I&#8221; prefix tradition still lives on.</p>]]></content:encoded>
	</item>
</channel>
</rss>
