<?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: The Raiser&#8217;s Edge API: VB.NET versus C#</title>
	<atom:link href="http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/</link>
	<description>A technical look at the Raiser&#039;s Edge API from Blackbaud</description>
	<lastBuildDate>Fri, 27 Aug 2010 10:19:28 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: David Zeidman</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-4988</link>
		<dc:creator>David Zeidman</dc:creator>
		<pubDate>Mon, 11 Jan 2010 17:38:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-4988</guid>
		<description>I am not sure I agree. Blackbaud know very well the benefit of .NET. That is why their latest platform is built on it. The Raiser&#039;s Edge was built using COM so that it is not the case that they are trying to force us into use an old language. It is just that it would be prohibitively expensive to port RE to .NET. It would also be foolish. RE&#039;s architecture is dated and Blackbaud are well aware of that fact. That is by Blackbaud Enterprise CRM and indeed all of the Infinity platform applications are built using and ready to use .NET.</description>
		<content:encoded><![CDATA[<p>I am not sure I agree. Blackbaud know very well the benefit of .NET. That is why their latest platform is built on it. The Raiser&#8217;s Edge was built using COM so that it is not the case that they are trying to force us into use an old language. It is just that it would be prohibitively expensive to port RE to .NET. It would also be foolish. RE&#8217;s architecture is dated and Blackbaud are well aware of that fact. That is by Blackbaud Enterprise CRM and indeed all of the Infinity platform applications are built using and ready to use .NET.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-4987</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Mon, 11 Jan 2010 16:42:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-4987</guid>
		<description>David :
I completely agree, VB does show it&#039;s roots a little still ... microsoft have made the effort to keep it VB like whilst bringing the language in to compliance with their CLR.

It seems to me that the biggest issue with the RE API is that it is not really ready for the .NET framework as a whole whatever language you use, you have to jump through hoops to make it work the way you expect and even then it chews you up and spits you out for being a nice .NET developer simply because you talk C or some other .NET pre dated technology.

Between you and me, the problem is that updating the API doesn&#039;t make money, and that&#039;s all that Blackbaud are interested in, if someone could &quot;sell the monetary advantages of .NET&quot; to Blackbaud they would likely jump on it in an instant !!!

I guess the other way to look at it is that the sort of customer base they have know of no other strong competitor at the moment that can deliver this type of thing effectively for a reasonable price so they have their little market cornered so to speak, introduce some competition and this whole issue could simply go away as a gimmick sold to developers in order to keep the administration and maintenance teams on side.

It&#039;s likely just a matter of time as I see it, these things ultimately always are ;)</description>
		<content:encoded><![CDATA[<p>David :<br />
I completely agree, VB does show it&#8217;s roots a little still &#8230; microsoft have made the effort to keep it VB like whilst bringing the language in to compliance with their CLR.</p>
<p>It seems to me that the biggest issue with the RE API is that it is not really ready for the .NET framework as a whole whatever language you use, you have to jump through hoops to make it work the way you expect and even then it chews you up and spits you out for being a nice .NET developer simply because you talk C or some other .NET pre dated technology.</p>
<p>Between you and me, the problem is that updating the API doesn&#8217;t make money, and that&#8217;s all that Blackbaud are interested in, if someone could &#8220;sell the monetary advantages of .NET&#8221; to Blackbaud they would likely jump on it in an instant !!!</p>
<p>I guess the other way to look at it is that the sort of customer base they have know of no other strong competitor at the moment that can deliver this type of thing effectively for a reasonable price so they have their little market cornered so to speak, introduce some competition and this whole issue could simply go away as a gimmick sold to developers in order to keep the administration and maintenance teams on side.</p>
<p>It&#8217;s likely just a matter of time as I see it, these things ultimately always are <img src='http://www.re-decoded.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-4614</link>
		<dc:creator>David</dc:creator>
		<pubDate>Tue, 15 Dec 2009 22:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-4614</guid>
		<description>Thanks Paul for some really good points. I agree to an extent about C# but I would say that VB.NET was totally reworked after VB6 and while the syntax is similar in many cases the grounding of the language has changed. There is little that VB.NET can do that C# can&#039;t and vice versa. It is much more about the .NET framework rather than specific languages.

Specifically referring to the RE API however, I think that VB does have an easier time. RE was written in a different era. There was no such thing as .NET when probably 95% of the API was written and as such they could not have foreseen where the technology would take the industry. COM technology was the big thing of the time and as such as long as the API worked with a COM language that was fine.

Given that, even though VB.NET was rewritten, much of the syntax remains, it is obvious that VB.NET is going to be better suited to what was primarily intended to be used with VB6. The optional parameters is a good example.

The example of collections is an interesting case. You are right this is nothing like the .NET syntax but then why should it be. This was not written for .NET. It is closer to the VB6 Collections class but even then it is more &quot;advanced&quot;.</description>
		<content:encoded><![CDATA[<p>Thanks Paul for some really good points. I agree to an extent about C# but I would say that VB.NET was totally reworked after VB6 and while the syntax is similar in many cases the grounding of the language has changed. There is little that VB.NET can do that C# can&#8217;t and vice versa. It is much more about the .NET framework rather than specific languages.</p>
<p>Specifically referring to the RE API however, I think that VB does have an easier time. RE was written in a different era. There was no such thing as .NET when probably 95% of the API was written and as such they could not have foreseen where the technology would take the industry. COM technology was the big thing of the time and as such as long as the API worked with a COM language that was fine.</p>
<p>Given that, even though VB.NET was rewritten, much of the syntax remains, it is obvious that VB.NET is going to be better suited to what was primarily intended to be used with VB6. The optional parameters is a good example.</p>
<p>The example of collections is an interesting case. You are right this is nothing like the .NET syntax but then why should it be. This was not written for .NET. It is closer to the VB6 Collections class but even then it is more &#8220;advanced&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-4609</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Tue, 15 Dec 2009 16:42:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-4609</guid>
		<description>Something also worth noting is that the API does not typically work in a &quot;clr compliant&quot; fashion for example :

// ok this seems reasonable
CRecord aRecord = new CRecord();
aRecord.Load(recId);
// here we go ... what the ...
aRecord.Attributes.Add();

as a tried and tested programmer when i add something to a collection i give it the object I plan to add like this ...

aRecord.Attributes.Add(anAttribute);

...

Turns out anything complex with attributes requires a whole separate server instance that you have to do everything on.

Copying an object is another prime example ...

If i have 2 CRecord instances and i want to do something like this ...

// assume these are initialised
CRecord rec1;
CRecord rec2;
// rec2 is a duplicate so i want to copy everything and delete 
rec1.Addresses += rec2.Addresses
//BOOM !!! ... no chance

even though this object looks like and seemingly appears to be a collection it&#039;s got literally nothing in common with a typical .NET collection object.

The API just appears out dated to me ... maybe i&#039;m just being over critical ... it is a huge lengthy code monster after all.

But then i could ask ... 
why ? 
does it need to be ?
if it used some standards would it still be ?

It&#039;s interesting how technically &quot;Blackbaud does not support anything done with the API just simply the API itself&quot;.

thats like saying ...

I&#039;ll sell you this car but if you drive it you will no longer be able to get insurance on it.

... Eh ?!?!?</description>
		<content:encoded><![CDATA[<p>Something also worth noting is that the API does not typically work in a &#8220;clr compliant&#8221; fashion for example :</p>
<p>// ok this seems reasonable<br />
CRecord aRecord = new CRecord();<br />
aRecord.Load(recId);<br />
// here we go &#8230; what the &#8230;<br />
aRecord.Attributes.Add();</p>
<p>as a tried and tested programmer when i add something to a collection i give it the object I plan to add like this &#8230;</p>
<p>aRecord.Attributes.Add(anAttribute);</p>
<p>&#8230;</p>
<p>Turns out anything complex with attributes requires a whole separate server instance that you have to do everything on.</p>
<p>Copying an object is another prime example &#8230;</p>
<p>If i have 2 CRecord instances and i want to do something like this &#8230;</p>
<p>// assume these are initialised<br />
CRecord rec1;<br />
CRecord rec2;<br />
// rec2 is a duplicate so i want to copy everything and delete<br />
rec1.Addresses += rec2.Addresses<br />
//BOOM !!! &#8230; no chance</p>
<p>even though this object looks like and seemingly appears to be a collection it&#8217;s got literally nothing in common with a typical .NET collection object.</p>
<p>The API just appears out dated to me &#8230; maybe i&#8217;m just being over critical &#8230; it is a huge lengthy code monster after all.</p>
<p>But then i could ask &#8230;<br />
why ?<br />
does it need to be ?<br />
if it used some standards would it still be ?</p>
<p>It&#8217;s interesting how technically &#8220;Blackbaud does not support anything done with the API just simply the API itself&#8221;.</p>
<p>thats like saying &#8230;</p>
<p>I&#8217;ll sell you this car but if you drive it you will no longer be able to get insurance on it.</p>
<p>&#8230; Eh ?!?!?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-4607</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Tue, 15 Dec 2009 16:30:27 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-4607</guid>
		<description>I think the problem here is not C# as like you say, they both came out of .NET but the fact that C# is designed in such a way that it promotes a cleaner more standards compliant way of coding ...

For example the use of the keyword &quot;with&quot; has been left out of C# deliberately because it was deemed to promote poor readability in code however me being a C# programmer myself like the the idea as with any language feature i believe it may be that Microsoft decided that this was being abused thus came the reasoning for it&#039;s being left out.

With that said in C# 4.0 you can do this ...

Var someObject = constit.get_Fields(ERECORDSFields.RECORDS_fld_FIRST_NAME);

Apparently the &quot;implicit casting&quot; is supposed to happen but this to me is muddying the nice type safe coding that C# programmers are used to and will encourage bad programming practices as it means u end up treating everyhting like some generic object but call the specific implementation methods on it ... evil ...

I&#039;ve also noticed how when you get an instance of the main API class that you can call it with &quot;optional parameters&quot; something that does not exist in C# so you have to figure out a way around it, it turns out you can do it with reflection but this is typical of many API providers, they only think of the language they are using and not the fact that by releasing this as a universal API others might want to use it too.

The point is that I think VB has always been the language of choice for Blackbaud and thus everything will appear nice and fluffy in VB, the fact of the matter is that VB is just not a &quot;clean, standards promoting language&quot; by todays standards within the industry, C# is clearly a superior language.

It&#039;s a bit of a sweeping statement i know but think about the origins of VB ... didn&#039;t it used to be a &quot;training language&quot; back before .NET ... most serious programmers moved in to the C style languages which is where I believe the profesional solutions of today should live.

Points 4 and 5 are classic examples of this coupled with my point on simply initialising the API.

Despite not even being thought of in the development of the API I as a C# developer have the knowledge to go round a few extra miles and get there, something that would never happen in the VB world, simply because the language allows too many short cuts.

Or maybe i&#039;m wrong?</description>
		<content:encoded><![CDATA[<p>I think the problem here is not C# as like you say, they both came out of .NET but the fact that C# is designed in such a way that it promotes a cleaner more standards compliant way of coding &#8230;</p>
<p>For example the use of the keyword &#8220;with&#8221; has been left out of C# deliberately because it was deemed to promote poor readability in code however me being a C# programmer myself like the the idea as with any language feature i believe it may be that Microsoft decided that this was being abused thus came the reasoning for it&#8217;s being left out.</p>
<p>With that said in C# 4.0 you can do this &#8230;</p>
<p>Var someObject = constit.get_Fields(ERECORDSFields.RECORDS_fld_FIRST_NAME);</p>
<p>Apparently the &#8220;implicit casting&#8221; is supposed to happen but this to me is muddying the nice type safe coding that C# programmers are used to and will encourage bad programming practices as it means u end up treating everyhting like some generic object but call the specific implementation methods on it &#8230; evil &#8230;</p>
<p>I&#8217;ve also noticed how when you get an instance of the main API class that you can call it with &#8220;optional parameters&#8221; something that does not exist in C# so you have to figure out a way around it, it turns out you can do it with reflection but this is typical of many API providers, they only think of the language they are using and not the fact that by releasing this as a universal API others might want to use it too.</p>
<p>The point is that I think VB has always been the language of choice for Blackbaud and thus everything will appear nice and fluffy in VB, the fact of the matter is that VB is just not a &#8220;clean, standards promoting language&#8221; by todays standards within the industry, C# is clearly a superior language.</p>
<p>It&#8217;s a bit of a sweeping statement i know but think about the origins of VB &#8230; didn&#8217;t it used to be a &#8220;training language&#8221; back before .NET &#8230; most serious programmers moved in to the C style languages which is where I believe the profesional solutions of today should live.</p>
<p>Points 4 and 5 are classic examples of this coupled with my point on simply initialising the API.</p>
<p>Despite not even being thought of in the development of the API I as a C# developer have the knowledge to go round a few extra miles and get there, something that would never happen in the VB world, simply because the language allows too many short cuts.</p>
<p>Or maybe i&#8217;m wrong?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-3953</link>
		<dc:creator>David</dc:creator>
		<pubDate>Sat, 25 Jul 2009 21:46:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-3953</guid>
		<description>You may be right. I am not sure exactly how these things work. However CFund doesn&#039;t seem to be any different from any other class. When you look at the tlb or look at the PIA assembly in object browser there are entries for the Fields in no way different from any of the other objects (as far as I can see that is) so I am not sure why it is missing when working with C#.</description>
		<content:encoded><![CDATA[<p>You may be right. I am not sure exactly how these things work. However CFund doesn&#8217;t seem to be any different from any other class. When you look at the tlb or look at the PIA assembly in object browser there are entries for the Fields in no way different from any of the other objects (as far as I can see that is) so I am not sure why it is missing when working with C#.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Phil</title>
		<link>http://www.re-decoded.com/2009/07/the-raisers-edge-api-vb-net-versus-c/comment-page-1/#comment-3905</link>
		<dc:creator>Phil</dc:creator>
		<pubDate>Wed, 22 Jul 2009 20:17:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.re-decoded.com/?p=253#comment-3905</guid>
		<description>From trying a few things out I believe that that .NET classes are merely automatically generated using the tlbgen tool from the main BBREAPI7.tlb file, so if it&#039;s not in that it won&#039;t be in the .NET Interop.</description>
		<content:encoded><![CDATA[<p>From trying a few things out I believe that that .NET classes are merely automatically generated using the tlbgen tool from the main BBREAPI7.tlb file, so if it&#8217;s not in that it won&#8217;t be in the .NET Interop.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
