<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>Bob&apos;s Blog - ColdFusion Tidbits - OO Design</title>
			<link>http://www.silverwareconsulting.com/index.cfm</link>
			<description>Some stuff about ColdFusion and Transfer</description>
			<language>en-us</language>
			<pubDate>Thu, 09 Sep 2010 05:15:54 -0400</pubDate>
			<lastBuildDate>Tue, 13 Oct 2009 14:48:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>bob.silverberg@gmail.com</managingEditor>
			<webMaster>bob.silverberg@gmail.com</webMaster>
			
			<item>
				<title>CF9 ORM Quick Tip - Removing All Items from A Collection</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/10/13/CF9-ORM-Quick-Tip--Removing-All-Items-from-A-Collection</link>
				<description>
				
				For this example of using ColdFusion 9&apos;s ORM features, let&apos;s assume we have a User object and a Department object.  The Department has a collection of Users, like so:
&lt;code&gt;component persistent=&quot;true&quot; output=&quot;false&quot; entityname=&quot;Department&quot; {
	property name=&quot;DeptId&quot; fieldtype=&quot;id&quot; generator=&quot;native&quot;;
	property name=&quot;Name&quot;;
	property name=&quot;Users&quot; fieldtype=&quot;one-to-many&quot; type=&quot;array&quot;
		cfc=&quot;User&quot; fkcolumn=&quot;DeptId&quot; singularname=&quot;User&quot;;
}
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;Let&apos;s also say that Department 1 currently has 3 Users assigned to it, call them User1, User2 and User3. Now, we want to write some code that will empty the Department&apos;s collection of Users. 
A first attempt might look something like:
&lt;code&gt;Users = Department.getUsers();
for (i = 1; i LTE ArrayLen(Users); i = i + 1) { 
	Department.removeUser(Users[i]);
}
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;But this won&apos;t work.  In fact, if you run that code you&apos;ll see that you end up with a Department that still has User2 assigned to it. 
The reason this happens is that as soon as you remove User1 from the collection, the array shrinks, so User2 now occupies position 1 and User3 occupies position 2.
So the next time through the loop, User3 gets removed (because i now equals 2) and Users[2] is User3. Then the loop finishes because the condition is met.  [More]
				</description>
				
				<category>ColdFusion</category>				
				
				<category>CF ORM Integration</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Tue, 13 Oct 2009 14:48:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/10/13/CF9-ORM-Quick-Tip--Removing-All-Items-from-A-Collection</guid>
				
			</item>
			
			<item>
				<title>An Object Oriented Approach to Validations - Recording Available</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/6/18/An-Object-Oriented-Approach-to-Validations--Recording-Available</link>
				<description>
				
				I&apos;m happy to announce that the presentation that I delivered to the &lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/&quot; target=&quot;_blank&quot;&gt;Online ColdFusion Meetup&lt;/a&gt; last night,
 entitled An Object Oriented Approach to Validations, was recorded and is therefore &lt;a href=&quot;http://experts.na3.acrobat.com/p40599889/&quot; target=&quot;_blank&quot;&gt;available to anyone who is interested&lt;/a&gt; and wasn&apos;t able to attend in person.&lt;/p&gt;
&lt;p&gt;Towards the end of the presentation I listed some resources that exist for ValidateThis!, which is the framework that I created using the approach that I described. Those are:
&lt;ul&gt;
	&lt;li&gt;Riaforge Site (framework and demo code) - &lt;a href=&quot;http://validatethis.riaforge.org/&quot; target=&quot;_blank&quot;&gt;validatethis.riaforge.org&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Online Demo - &lt;a href=&quot;http://www.validatethis.org/&quot; target=&quot;_blank&quot;&gt;www.validatethis.org&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Google Group - &lt;a href=&quot;http://groups.google.com/group/validatethis&quot; target=&quot;_blank&quot;&gt;groups.google.com/group/validatethis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;This presentation was very much about why I created VT and how I designed it.  It didn&apos;t really address questions of how one uses the framework or how to integrate it into an existing application. 
I have blogged about that extensively in the past, but I also plan on putting together a new presentation addressing those issues, which I hope to present to the meetup group in the future.&lt;/p&gt;
&lt;p&gt;I&apos;d like to thank everyone for attending and for all of the wonderful feedback, 
and I&apos;d also like to thank Charlie Arehart for allowing me to speak and for continuing to operate this amazing resource.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>ValidateThis</category>				
				
				<category>cfObjective</category>				
				
				<category>Presentations</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Thu, 18 Jun 2009 23:39:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/6/18/An-Object-Oriented-Approach-to-Validations--Recording-Available</guid>
				
			</item>
			
			<item>
				<title>Presenting An Object Oriented Approach to Validations to the Online ColdFusion Meetup</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/6/12/Presenting-An-Object-Oriented-Approach-to-Validations-to-the-Online-ColdFusion-Meetup</link>
				<description>
				
				Just a quick note to announce that I&apos;m going to be presenting my session from &lt;a href=&quot;http://www.cfobjective.com/&quot; target=&quot;_blank&quot;&gt;cf.Objective()&lt;/a&gt; to the
 &lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/&quot; target=&quot;_blank&quot;&gt;Online ColdFusion Meetup&lt;/a&gt; this Thursday, June 18th, at 6:00pm EDT.&lt;/p&gt;
&lt;p&gt;Details can be found at the &lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/calendar/10638194/&quot; target=&quot;_blank&quot;&gt;Meetup site&lt;/a&gt;.
 You can &lt;a href=&quot;http://experts.acrobat.com/cfmeetup/&quot; target=&quot;_blank&quot;&gt;attend the presentation via Connect&lt;/a&gt; on Thursday. 
The session will be &lt;a href=&quot;http://recordings.coldfusionmeetup.com/&quot; target=&quot;_blank&quot;&gt;recorded and made available&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is the abstract for the presentation:&lt;/p&gt;
&lt;p&gt;Performing validations on user input is something that all of us, as application developers, must do. When moving from a procedural to an object oriented approach many developers have difficulty determining how and where to perform validations. In this session you will be introduced to an object oriented approach to validations. This approach enables you to add validation &quot;smarts&quot; into your business objects, while keeping that logic fully encapsulated outside of the objects, meaning that any changes to your validation rules and/or logic will have zero impact on the rest of your model. We&apos;ll look at the individual objects that comprise this approach, and understand how they work together to automatically perform server-side and generate client-side validations using metadata from a simple xml file. You will leave the session with a better understanding of how to design using objects, as well as a tool that will greatly simplify the task of adding validations to your object oriented application.&lt;/p&gt;
&lt;p&gt;This session is aimed at intermediate to advanced developers who are familiar with object oriented concepts and are interested in learning about how to incorporate validations into their objects, as well as object oriented design in general.&lt;/p&gt;
&lt;p&gt;Hope to see some of you there.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>ValidateThis</category>				
				
				<category>cfObjective</category>				
				
				<category>Presentations</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Fri, 12 Jun 2009 13:43:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/6/12/Presenting-An-Object-Oriented-Approach-to-Validations-to-the-Online-ColdFusion-Meetup</guid>
				
			</item>
			
			<item>
				<title>ValidateThis! 0.75 - Now Supports Internationalization (i18n)</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/6/1/ValidateThis-075--Now-Supports-Internationalization-i18n</link>
				<description>
				
				A developer named Mischa Sameli asked a question about supporting internationalization (i18n) in ValidateThis!, my validation framework for ColdFusion objects, on the &lt;a href=&quot;http://groups.google.com/group/validatethis&quot; target=&quot;_blank&quot;&gt;ValidateThis Google Group&lt;/a&gt; a few weeks ago. His questions got me thinking about how I might do that, and those thoughts turned into design ideas, which turned into code. So I&apos;m happy to announce that the latest version of VT, just released to &lt;a href=&quot;http://validatethis.riaforge.org/&quot; target=&quot;_blank&quot;&gt;RIAForge&lt;/a&gt;, has full support for i18n. I have created a &lt;a href=&quot;http://www.validatethis.org/i18nDemo/index.cfm&quot; target=&quot;_blank&quot;&gt;new i18n demo&lt;/a&gt; which shows off this new feature in all of its glory. If you visit that demo page you&apos;ll see that you can switch languages between English and French.&lt;/p&gt;
&lt;p&gt;So, what does i18n support in VT mean? In a nutshell, it means that all validation failure messages, both on the client side and on the server side, can now appear in multiple languages within a single application. A developer still only has to specify the metadata for each validation rule once (which is the primary objective of the framework), with the translations being performed by a translation layer.  [More]
				</description>
				
				<category>ColdFusion</category>				
				
				<category>i18n</category>				
				
				<category>ValidateThis</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Mon, 01 Jun 2009 21:49:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/6/1/ValidateThis-075--Now-Supports-Internationalization-i18n</guid>
				
			</item>
			
			<item>
				<title>Building An Object Oriented Model - Recording and Sample Code Available</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/5/31/Building-An-Object-Oriented-Model--Recording-and-Sample-Code-Available</link>
				<description>
				
				I&apos;m happy to announce that the presentation that I delivered to the 
&lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/&quot; target=&quot;_blank&quot;&gt;Online ColdFusion Meetup&lt;/a&gt; last Thursday night,
 entitled &lt;em&gt;Building an Object Oriented Model&lt;/em&gt;,
 was recorded and is therefore &lt;a href=&quot;http://experts.na3.acrobat.com/p21244086/&quot; target=&quot;_blank&quot;&gt;available to anyone who is interested&lt;/a&gt;
 and wasn&apos;t able to attend in person. Don&apos;t be put off by the fact that the recording is 90 minutes long - the presentation is only 60 minutes,
 and is followed by a 30 minute Q and A session.&lt;/p&gt;
&lt;p&gt;A few people asked about the sample code that I presented.
 It can be &lt;a href=&quot;/enclosures/BOOM-Examples.zip&quot; target=&quot;_blank&quot;&gt;downloaded directly from this post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also note that I have written a number of posts on these topics,
 so anyone looking for more information can check out the &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/OO-Design&quot;&gt;OO Design category&lt;/a&gt; of this blog.&lt;/p&gt;
&lt;p&gt;I&apos;d like to thank everyone for attending and for all of the wonderful feedback,
 and I&apos;d also like to thank &lt;a href=&quot;http://www.carehart.org/&quot; target=&quot;_blank&quot;&gt;Charlie Arehart&lt;/a&gt; for allowing me to speak and for continuing to operate this amazing resource.&lt;/p&gt;
&lt;p&gt;Finally, I will be presenting my other cf.Objective() presentation,
 &lt;em&gt;An Object Oriented Approach to Validations&lt;/em&gt; at an Online ColdFusion Meetup session in the near future, date and time TBA.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>cfObjective</category>				
				
				<category>Presentations</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Sun, 31 May 2009 16:14:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/5/31/Building-An-Object-Oriented-Model--Recording-and-Sample-Code-Available</guid>
				
			</item>
			
			<item>
				<title>Presenting Building An Object Oriented Model to the Online ColdFusion Meetup</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/5/26/Presenting-Building-An-Object-Oriented-Model-to-the-Online-ColdFusion-Meetup</link>
				<description>
				
				&lt;strong&gt;Update:&lt;/strong&gt; A recording of this presentation, as delivered to the Online ColdFusion Meetup is available via &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/2009/5/31/Building-An-Object-Oriented-Model--Recording-and-Sample-Code-Available&quot;&gt;this blog post&lt;/&gt;.&lt;/p&gt;
&lt;p&gt;Just a quick note to announce that I&apos;m going to be presenting my session from &lt;a href=&quot;http://www.cfobjective.com/&quot; target=&quot;_blank&quot;&gt;cf.Objective()&lt;/a&gt; to the &lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/&quot; target=&quot;_blank&quot;&gt;Online ColdFusion Meetup&lt;/a&gt; this Thursday, May 28th, at 6:00pm EDT.&lt;/p&gt;
&lt;p&gt;Details can be found at the &lt;a href=&quot;http://www.meetup.com/coldfusionmeetup/calendar/10466208/&quot; target=&quot;_blank&quot;&gt;Meetup site&lt;/a&gt;. You can &lt;a href=&quot;http://experts.acrobat.com/cfmeetup/&quot; target=&quot;_blank&quot;&gt;attend the presentation via Connect&lt;/a&gt; on Thursday. The session will be &lt;a href=&quot;http://recordings.coldfusionmeetup.com/&quot; target=&quot;_blank&quot;&gt;recorded and made available&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is the abstract for the presentation:&lt;/p&gt;
&lt;p&gt;When making the move from a procedural to an object oriented approach one often comes across a pattern that involves using services and gateways to act as a middle man between a controller and your actual business objects.  This session will present an approach to implementing a common set of services and gateways. Through the use of abstract classes you will see how to eliminate duplicate code and how to encapsulate logic to increase the cohesiveness of your entire model.  We will start with the basics, describing what services and gateways are, and then look at building a model from the ground up.  You&apos;ll leave the session with an understanding of the components that go into building a model, as well as some of the object oriented principles that will help guide you in your design efforts.&lt;/p&gt;
&lt;p&gt;This session is aimed at beginning to intermediate developers who have some experience with and knowledge of basic OO concepts and are interested in learning about some of the design considerations that go into building an OO model.&lt;/p&gt;
&lt;p&gt;Hope to see some of you there.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>cfObjective</category>				
				
				<category>Presentations</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Tue, 26 May 2009 10:41:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/5/26/Presenting-Building-An-Object-Oriented-Model-to-the-Online-ColdFusion-Meetup</guid>
				
			</item>
			
			<item>
				<title>Building An Object Oriented Model - Presentation Materials Available</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/5/19/Building-An-Object-Oriented-Model--Presentation-Materials-Available</link>
				<description>
				
				&lt;strong&gt;Update:&lt;/strong&gt; A recording of this presentation, as delivered to the Online ColdFusion Meetup is available via &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/2009/5/31/Building-An-Object-Oriented-Model--Recording-and-Sample-Code-Available&quot;&gt;this blog post&lt;/&gt;.&lt;/p&gt;
&lt;p&gt;The slides and sample code from my cf.Objective() presentation, Building An Object Oriented Model, are now available. Click on the links below to download them.  I have also uploaded my presentation to &lt;a href=&quot;http://slidesix.com/view/BuildingAnObjectOrientedModel&quot; target=&quot;_blank&quot;&gt;SlideSix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is the abstract for the presentation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When making the move from a procedural to an object oriented approach one often comes across a pattern that involves using services and gateways to act as a middle man between a controller and your actual business objects.  This session will present an approach to implementing a common set of services and gateways. Through the use of abstract classes you will see how to eliminate duplicate code and how to encapsulate logic to increase the cohesiveness of your entire model.  We will start with the basics, describing what services and gateways are, and then look at building a model from the ground up.  You&apos;ll leave the session with an understanding of the components that go into building a model, as well as some of the object oriented principles that will help guide you in your design efforts.&lt;/p&gt;
&lt;p&gt;This session is aimed at beginning to intermediate developers who have some experience with and knowledge of basic OO concepts and are interested in learning about some of the design considerations that go into building an OO model.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Regarding the slide deck, it does not convey much meaning without my commentary, but the pictures are pretty ;-)&lt;/p&gt;
&lt;p&gt;Regarding the sample code, it is designed to illustrate various points made throughout the presentation. It is not identical to the code that I would use in an actual application. Feel free to look at it for ideas, but I don&apos;t encourage people to use it as an example of best practices for writing services and gateways. I have written a number of blog posts on that topic, which can be found in the &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/OO-Design&quot;&gt;OO Design category&lt;/a&gt; of my blog.&lt;/p&gt;
&lt;p&gt;If anyone is interested in having me deliver this presentation to a ColdFusion User Group via connect please feel free to leave me a comment, or send me an email.&lt;/p&gt;
&lt;p&gt;Attachments:
	&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;/enclosures/BuildingAnObjectOrientedModel.pdf&quot; target=&quot;_blank&quot;&gt;Slide Deck&lt;/a&gt; - in PDF Format&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;/enclosures/BOOM-Examples.zip&quot; target=&quot;_blank&quot;&gt;Sample Code&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>cfObjective</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Tue, 19 May 2009 11:55:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/5/19/Building-An-Object-Oriented-Model--Presentation-Materials-Available</guid>
				
			</item>
			
			<item>
				<title>Presenting at cf.Objective() in May</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/1/28/Presenting-at-cfObjective-in-May</link>
				<description>
				
				&lt;p&gt;When I started blogging seriously, around 9 months ago, I had my reasons.  I wanted to give something back to the ColdFusion community, from which I had received so much.  I wanted to learn about new and interesting ideas and techniques, and quickly discovered that the best way to learn about something is to attempt to write about it.  I wanted to solicit feedback for my ideas so that I could verify and improve upon them.  And I had one goal.&lt;/p&gt;
&lt;p&gt;I had just returned from &lt;a href=&quot;http://www.cfobjective.com/&quot; target=&quot;_blank&quot;&gt;cf.Objective()&lt;/a&gt; and had had the time of my life (OK, maybe that&apos;s exaggerating a bit).  I had attended excellent presentations during which I learned a lot of new and useful things.  But more importantly, I had a chance to meet and mingle with some of the nicest and smartest ColdFusion developers one could ever hope to meet.  I made some friends, had some very enlightening conversations, and drank a beer or two as well.  There was no doubt in my mind that I&apos;d be returning year after year.  In my mind it was &lt;em&gt;the&lt;/em&gt; ColdFusion Conference to attend.&lt;/p&gt;
&lt;p&gt;Having a background in training, and enjoying the challenge of teaching people, I thought to myself, &quot;Self, wouldn&apos;t it be cool to &lt;em&gt;present&lt;/em&gt; at cf.Objective()?&quot;  So that became my goal.  It didn&apos;t have to be next year - it could be two or three years down the road, but my goal was to eventually speak at a cf.Objective() Conference.&lt;/p&gt;
&lt;p&gt;So you can imagine how pleased I was to hear back from the cf.Objective() Steering Committee yesterday that they had accepted two of the topics that I submitted for their approval.  I am delighted to announce that I will be presenting the following sessions at cf.Objective(), in May:
&lt;ul&gt;
	&lt;li&gt;An Object Oriented Approach to Validations&lt;/li&gt;
	&lt;li&gt;Building an Object Oriented Model&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;I&apos;ll undoubtedly provide more details on those sessions in the future, and I&apos;m sure that a summary will appear on the &lt;a href=&quot;http://www.cfobjective.com/sessions.cfm&quot; target=&quot;_blank&quot;&gt;sessions page&lt;/a&gt; in the not too distant future as well.  In addition to achieving my personal goal, I am honoured to be among the &lt;a href=&quot;http://www.cfobjective.com/speakers.cfm&quot; target=&quot;_blank&quot;&gt;group of speakers&lt;/a&gt; whose ranks are filled with those whose work I greatly respect.  I strongly encourage anyone reading this to make an effort to attend.  In my opinion it is truly the best ColdFusion conference available.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>cfObjective</category>				
				
				<category>OO Design</category>				
				
				<category>Personal</category>				
				
				<pubDate>Wed, 28 Jan 2009 11:56:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/1/28/Presenting-at-cfObjective-in-May</guid>
				
			</item>
			
			<item>
				<title>Single-Table Inheritance with Transfer</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2009/1/27/SingleTable-Inheritance-with-Transfer</link>
				<description>
				
				&lt;p&gt;I want to talk about object inheritance, which may sound a bit enigmatic, so I&apos;m going to start with an example:&lt;/p&gt;
&lt;p&gt;Let&apos;s say I have a number of types of &lt;strong&gt;Employees&lt;/strong&gt; that I&apos;m trying to model.  I have &lt;strong&gt;Developers&lt;/strong&gt;, who have attributes such as &lt;em&gt;favouriteLanguage&lt;/em&gt; and &lt;em&gt;enjoysDeathMetal&lt;/em&gt; and behaviours such as &lt;em&gt;code()&lt;/em&gt; and &lt;em&gt;test()&lt;/em&gt;.  I have &lt;strong&gt;Designers&lt;/strong&gt;, who have attributes such as &lt;em&gt;favouriteColour&lt;/em&gt; and &lt;em&gt;toleratesDevelopers&lt;/em&gt; and behaviours such as &lt;em&gt;makePretty()&lt;/em&gt; and &lt;em&gt;makePrettier()&lt;/em&gt;.  And I have &lt;strong&gt;Analysts&lt;/strong&gt;, who have attributes such as &lt;em&gt;levelOfAttentionToDetail&lt;/em&gt; and &lt;em&gt;totalPagesOfRequirementsProduced&lt;/em&gt; and behaviours such as &lt;em&gt;ask()&lt;/em&gt; and &lt;em&gt;tell()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In addition to those specific attributes and behaviours, all of these employee types also share some common attributes, such as &lt;em&gt;userName&lt;/em&gt;, &lt;em&gt;firstName&lt;/em&gt; and &lt;em&gt;lastName&lt;/em&gt; and also have common behaviours such as &lt;em&gt;startDay()&lt;/em&gt;, &lt;em&gt;takeBreak()&lt;/em&gt; and &lt;em&gt;askForRaise()&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This is an example of &lt;em&gt;inheritance&lt;/em&gt;, a form of one-to-one relationship.  We can say that a &lt;strong&gt;Developer&lt;/strong&gt; &lt;em&gt;is an&lt;/em&gt; &lt;strong&gt;Employee&lt;/strong&gt;, a &lt;strong&gt;Designer&lt;/strong&gt; &lt;em&gt;is an&lt;/em&gt; &lt;strong&gt;Employee&lt;/strong&gt; and an &lt;strong&gt;Analyst&lt;/strong&gt; &lt;em&gt;is an&lt;/em&gt; &lt;strong&gt;Employee&lt;/strong&gt;.  It is not an example of &lt;em&gt;composition&lt;/em&gt;.  We would not say that a &lt;strong&gt;Developer&lt;/strong&gt; &lt;em&gt;has an&lt;/em&gt; &lt;strong&gt;Employee&lt;/strong&gt; or that an &lt;strong&gt;Employee&lt;/strong&gt; &lt;em&gt;has a&lt;/em&gt; &lt;strong&gt;Developer&lt;/strong&gt;. The terms that are commonly used to describe this relationship between classes are &lt;em&gt;Supertype&lt;/em&gt; and &lt;em&gt;Subtype&lt;/em&gt;.  &lt;strong&gt;Employee&lt;/strong&gt; is a &lt;em&gt;Supertype&lt;/em&gt;, while &lt;strong&gt;Developer&lt;/strong&gt;, &lt;strong&gt;Designer&lt;/strong&gt; and &lt;strong&gt;Analyst&lt;/strong&gt; are all &lt;em&gt;Subtypes&lt;/em&gt; of &lt;strong&gt;Employee&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;So, the question is, how do I implement this model using Transfer?  [More]
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Transfer</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Tue, 27 Jan 2009 19:53:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2009/1/27/SingleTable-Inheritance-with-Transfer</guid>
				
			</item>
			
			<item>
				<title>How I Use Transfer Today - A Gateway MapFactoryBean</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2008/11/24/How-I-Use-Transfer-Today--A-Gateway-MapFactoryBean</link>
				<description>
				
				I left something critical out of my &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/2008/11/12/How-I-Use-Transfer-Today--Encapsulating-Database-Access&quot;&gt;last post&lt;/a&gt; about how I&apos;m using Transfer (an ORM for ColdFusion) these days.&lt;/p&gt;
&lt;p&gt;If you&apos;ve been following along you&apos;ll know that I&apos;m using an &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/2008/7/21/How-I-Use-Transfer--Part-VIII--My-Abstract-Transfer-Decorator-Object--Simple-Methods&quot;&gt;Abstract Transfer Decorator&lt;/a&gt;, which all of my concrete decorators extend, and that I&apos;m using &lt;a href=&quot;http://www.briankotek.com/blog/&quot; target=&quot;_blank&quot;&gt;Brian Kotek&lt;/a&gt;&apos;s most excellent &lt;a href=&quot;http://coldspringutils.riaforge.org/&quot; target=&quot;_blank&quot;&gt;Bean Injector&lt;/a&gt; to load singletons into my Transfer objects.  This raises an interesting issue: How to inject the appropriate Gateway Object into my Transfer Object.  [More]
				</description>
				
				<category>Transfer</category>				
				
				<category>ColdFusion</category>				
				
				<category>Coldspring</category>				
				
				<category>OO Design</category>				
				
				<category>How I Use Transfer</category>				
				
				<pubDate>Mon, 24 Nov 2008 16:33:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2008/11/24/How-I-Use-Transfer-Today--A-Gateway-MapFactoryBean</guid>
				
			</item>
			
			<item>
				<title>How I Use Transfer Today - Encapsulating Database Access</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2008/11/12/How-I-Use-Transfer-Today--Encapsulating-Database-Access</link>
				<description>
				
				I&apos;ve been meaning to follow up on my &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/How-I-Use-Transfer&quot;&gt;How I Use Transfer&lt;/a&gt; series, as I&apos;ve made a few changes to the way I write my ColdFusion code since that series was written.  One of the biggest changes was to encapsulate all database access in my Gateway components.&lt;/p&gt;
&lt;p&gt;Now I say biggest not because it took a lot of time and effort to make the change, in fact the opposite is true.  I say biggest simply because it represented a significant shift in the way I&apos;m designing my model.  Let me start with the rationale for making this change.  [More]
				</description>
				
				<category>Transfer</category>				
				
				<category>ColdFusion</category>				
				
				<category>OO Design</category>				
				
				<category>How I Use Transfer</category>				
				
				<pubDate>Wed, 12 Nov 2008 10:59:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2008/11/12/How-I-Use-Transfer-Today--Encapsulating-Database-Access</guid>
				
			</item>
			
			<item>
				<title>The First Post to ValidateThis!</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2008/11/9/The-First-Post-to-ValidateThis</link>
				<description>
				
				I&apos;m excited to say that the &lt;a href=&quot;http://groups.google.ca/group/validatethis&quot; target=&quot;_blank&quot;&gt;Google group&lt;/a&gt; that I set up as a discussion forum for my object oriented validation framework for ColdFusion has received its first post.  And it was a doozy.  Some really great ideas, and I, in my usual fashion, posted a response of an appropriate length ;-)&lt;/p&gt;
&lt;p&gt;So I&apos;d like to invite anyone interested in becoming part of the conversation, or interested in just listening in, to join the group.  I&apos;m not necessarily going to blog about everything that comes up in the group, and judging by this first post/response, there is bound to be some pretty interesting stuff going on.&lt;/p&gt;
&lt;p&gt;For anyone who&apos;s interested but doesn&apos;t want to add yet another source of email to their inbox, I can confidently say that the volume of traffic will be negligible.  And first post moderation is active, so spam should be pretty much non existent.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://groups.google.ca/group/validatethis/subscribe&quot;&gt;Click here&lt;/a&gt; to join the party.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>ValidateThis</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Sun, 09 Nov 2008 22:30:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2008/11/9/The-First-Post-to-ValidateThis</guid>
				
			</item>
			
			<item>
				<title>Paul Marcotte on Transient Factories</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2008/11/9/Paul-Marcotte-on-Transient-Factories</link>
				<description>
				
				Just a note to say that &lt;a href=&quot;http://www.fancybread.com/blog/&quot; target=&quot;_blank&quot;&gt;Paul Marcotte&lt;/a&gt; has written an interesting &lt;a href=&quot;http://www.fancybread.com/blog/index.cfm/2008/11/7/A-Coldfusion-Transient-Factory-Example&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; describing a ColdFusion component which is an implementation of a Factory Pattern.  This component can be used to centralize creation of transient objects in your model.  He has included a description of the usage of the component that he wrote (with a tiny bit of input from me), as well as a download of that component.  I am using this Transient Factory inside my own validation framework and have found it to be very useful.&lt;/p&gt;
&lt;p&gt;I believe the component will also be available on &lt;a href=&quot;http://www.riaforge.org/&quot; target=&quot;_blank&quot;&gt;RIAForge&lt;/a&gt; in the not too distant future.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>ValidateThis</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Sun, 09 Nov 2008 20:06:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2008/11/9/Paul-Marcotte-on-Transient-Factories</guid>
				
			</item>
			
			<item>
				<title>I Don&apos;t Care What An ORM Is!</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2008/11/3/I-Dont-Care-What-An-ORM-Is</link>
				<description>
				
				There have been &lt;a href=&quot;http://www.firemoss.com/post.cfm/does-coldfusion-have-no-real-orm-frameworks&quot; target=&quot;_blank&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://www.firemoss.com/post.cfm/what-makes-a-framework-an-orm&quot; target=&quot;_blank&quot;&gt;postings&lt;/a&gt; recently about the state of the ORM landscape in ColdFusion, and while I have found this conversation interesting, I have not found it particularly useful.&lt;/p&gt;
&lt;p&gt;There exists a group of ColdFusion developers, myself included, who would like to improve the way that we write and structure our code.  We have been encouraged to adopt a more object oriented approach to our development, and I, for one, have found it to be of great benefit.&lt;/p&gt;
&lt;p&gt;One of the things that has made this transition easier for me is the existence of these &quot;ORMs&quot; for ColdFusion.  I started off with &lt;a href=&quot;http://www.alagad.com/go/products-and-projects/reactor-for-coldfusion&quot; target=&quot;_blank&quot;&gt;Reactor&lt;/a&gt;, and now use &lt;a href=&quot;http://www.transfer-orm.com/&quot; target=&quot;_blank&quot;&gt;Transfer&lt;/a&gt;, and I have found that not only do these &quot;ORMs&quot; do a lot of the more menial tasks for me, but they also encourage me to &quot;think in objects&quot;.  Sure, the objects that I&apos;m working with are closely tied to the physical database structure, but they&apos;re still objects.  I still get the benefit of encapsulation, and through the use of Transfer decorators I feel that I am able to give my objects meaningful behaviour, thereby creating rich business objects.&lt;/p&gt;
&lt;p&gt;I know from experience that when a developer is starting down this path it can be quite daunting, and we often look to those with more experience than ourselves for guidance.  I hope that someone in that boat would not be &quot;turned off&quot; the existing set of &quot;ORMs&quot; for ColdFusion because they are not considered to be true ORMs.&lt;/p&gt;	
 &lt;p&gt;This brings me to the title of this post, which was inspired by a post by &lt;a href=&quot;http://www.pbell.com/index.cfm/2008/10/27/I-Dont-Care-What-An-Object-Is&quot; target=&quot;_blank&quot;&gt;Peter Bell&lt;/a&gt;.  I find Transfer to be an indispensable tool for building OO-like applications with ColdFusion, and can only encourage people to investigate and use it.  It may not be a true ORM, but that doesn&apos;t make it any less useful.  Let&apos;s not throw the baby out with the bath water.&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Transfer</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Mon, 03 Nov 2008 23:49:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2008/11/3/I-Dont-Care-What-An-ORM-Is</guid>
				
			</item>
			
			<item>
				<title>Performing Server Side Validations Using Objects</title>
				<link>http://www.silverwareconsulting.com/index.cfm/2008/10/29/Performing-Server-Side-Validations-Using-Objects</link>
				<description>
				
				I&apos;m going to continue my series about object oriented validations with ColdFusion by looking at the approach that I&apos;ve taken to performing server side validations.  I discussed the architecture for server side validations in a &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/2008/10/14/ValidateThis--Server-Side-Validation-Architecture&quot;&gt;previous article&lt;/a&gt;, so now I want to get down to the nitty gritty of how the actual validations are performed, looking at the code involved.&lt;/p&gt;
&lt;p&gt;I&apos;m going to do this in the context of discussing how I added generic regex support to the framework. I want to thank &lt;a href=&quot;http://www.quackfuzed.com/&quot; target=&quot;_blank&quot;&gt;Matt Quackenbush&lt;/a&gt;, my regex mentor, for helping me with the required syntax, and with an example for the &lt;a href=&quot;http://www.validatethis.org&quot; target=&quot;_blank&quot;&gt;demo application&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Because one of the &lt;a href=&quot;http://www.silverwareconsulting.com/index.cfm/2008/10/6/ValidateThis--An-Object-Oriented-Approach-to-Validations&quot;&gt;design goals&lt;/a&gt; I had for the framework was the ability to add new validation types without having to touch any of the existing code, adding regex support was a piece of cake.  Here&apos;s how I wanted this new &lt;em&gt;regex&lt;/em&gt; validation type to work:
&lt;ul&gt;
	&lt;li&gt;A developer can create a validation rule for an object property of type &lt;em&gt;regex&lt;/em&gt;.&lt;/li&gt;
	&lt;li&gt;The developer can then either:
		&lt;ul&gt;
			&lt;li&gt;Specify a single &lt;em&gt;regex&lt;/em&gt; parameter, which will be used on both the client and the server.&lt;/li&gt;
			&lt;li&gt;Specify both a &lt;em&gt;clientregex&lt;/em&gt; and a &lt;em&gt;serverregex&lt;/em&gt; parameter, which will be used accordingly.  This will allow a developer to take advantage of ColdFusion regex syntax that would not be valid in JavaScript.&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;When processing validations, either on the client or the server, the contents of the specified property will be tested against the specified regex, and if no match is found the validation will fail.&lt;/li&gt;
&lt;/ul&gt;  [More]
				</description>
				
				<category>ColdFusion</category>				
				
				<category>ValidateThis</category>				
				
				<category>OO Design</category>				
				
				<pubDate>Wed, 29 Oct 2008 11:53:00 -0400</pubDate>
				<guid>http://www.silverwareconsulting.com/index.cfm/2008/10/29/Performing-Server-Side-Validations-Using-Objects</guid>
				
			</item>
			</channel></rss>