<rss version="2.0">
			<channel>
			<title>RIA CFML Flex Flash</title>
			<link>http://www.cfcdeveloper.com/index.cfm</link>
			<description>Adobe RIA Development</description>
			<language>en-us</language>
			<pubDate>Wed, 08 Sep 2010 07:18:27 -0700</pubDate>
			<lastBuildDate>Fri, 04 Dec 2009 19:15:00 -0700</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>clint317@cfcdeveloper.com</managingEditor>
			<webMaster>clint317@cfcdeveloper.com</webMaster>
			
			
			
			
			
			<item>
				<title>Starter bare-bones AS camera class</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/12/4/Starter-barebones-AS-camera-class</link>
				<description>
				
				Just starting on this class and thought I&apos;d post a good starting point for learning.

&lt;code&gt;
package classes{
	import flash.media.*;
	import flash.net.*;
	
	import mx.core.UIComponent;

	public class Chatcam extends UIComponent{
		private var netconnection:NetConnection;
		private var nsPlayer:NetStream; 
		private var video:Video;
		private var vidPlayer:Video; 
		private var camera:Camera; 
		private var microphone:Microphone;
		private var uic:UIComponent;
		
		public function Chatcam(nc:NetConnection,publishedCam:String=&quot;&quot;){
			netconnection = nc;
		}
		public function detectCamera():Boolean{
			return Camera.getCamera();
		}
		public function publishCamera(cameraName:String,publishType:String=&quot;live&quot;):void {
			camera = Camera.getCamera();
			camera.setQuality(0,100);
			camera.setKeyFrameInterval(15);
			camera.setMode(240,180,15,false);
			//cam.setMotionLevel(35,3000);
		    microphone = Microphone.getMicrophone(); 
		    microphone.setUseEchoSuppression(true);
		    microphone.setSilenceLevel(0,2000); 
		    var ns:NetStream = new NetStream(netconnection); 
		    ns.attachCamera(camera); 
		    ns.attachAudio(microphone); 
		    ns.publish(cameraName,publishType); 
		}
		public function displayPublishingVideo():void {
			video = new Video(); 
		    video.attachCamera(camera); 
		    addChild(video);
		}
		public function displayPlaybackVideo(cameraName:String):void {
			nsPlayer = new NetStream(netconnection); 
		    nsPlayer.play(cameraName); 
		    vidPlayer = new Video(); 
		    vidPlayer.attachNetStream(nsPlayer); 
		    addChild(vidPlayer); 
		}
		
	}
}
&lt;/code&gt;

Example usage:

&lt;code&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot; creationComplete=&quot;init()&quot; xmlns:media=&quot;flash.media.*&quot;&gt;
	
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import mx.core.UIComponent;
			import flash.net.*;
			import flash.media.*;
			import classes.Chatcam;
			
			public var nc:NetConnection = new NetConnection();	
			public var ns:NetStream;
			public var rtmpPath:String = &quot;rtmp://localhost/devCRW&quot;;
			public var cc:Chatcam;
			
			public function init():void {
				nc.client = new Object();
				nc.addEventListener(NetStatusEvent.NET_STATUS,ncStatusHandler);
				nc.connect(rtmpPath);
			}
			public function ncStatusHandler(e:NetStatusEvent):void {
				switch (e.info.code) 
				{
					case &quot;NetConnection.Connect.Success&quot;:
						stat(&quot;Connected&quot;);
						cc = new Chatcam(nc);
						if(cc.detectCamera()){
							stat(&quot;displayPublishingVideo&quot;);
							cc.publishCamera(&quot;myCamera&quot;);
							cc.displayPlaybackVideo(&quot;myCamera&quot;);
							addChild(cc);
						}else{
							stat(&quot;Problem with camera.&quot;);
						}
				    break; 
				    case &quot;NetConnection.Connect.Rejected&quot;:
						stat(&quot;Rejected!&quot;);
				    break; 
				    case &quot;NetConnection.Connect.Failed&quot;: 
						
					break;
					case &quot;NetConnection.Connect.Closed&quot;: 
						
					break;
					default:
						
				}
			}
			public function stat(msg:String):void {
				status.htmlText += msg + &quot;&lt;br&gt;&quot;;
			}
		]]&gt;
	&lt;/mx:Script&gt;
	
	&lt;mx:Text x=&quot;198&quot; y=&quot;10&quot; text=&quot;Status:&quot; id=&quot;status&quot;/&gt;
	
&lt;/mx:Application&gt;
&lt;/code&gt;
				
				</description>
				
				<category>Flex/Flash/AS3</category>
				
				<category>OOP/Patterns</category>
				
				<pubDate>Fri, 04 Dec 2009 19:15:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/12/4/Starter-barebones-AS-camera-class</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>MVC - Structured View Layer Development</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/9/8/MVC--Structured-View-Layer-Development</link>
				<description>
				
				Is it me or is the view layer in the MVC pattern being ignored or at least understated? Working on my most recent project I stepped up my MVC and OO emphasis during development and noticed that we, web developers, aren&apos;t doing anything structured as far as view development goes, at least I can&apos;t find anything searching the net. We conform the underlying complexities, like the model layer, into formal design and standards (OO for instance) but don&apos;t hold the view to the same or comparable expectations. We make sure that the view layer is seperated from business logic at the layer level but when it all comes together at the view level we fail to make anything formal out of that. I&apos;m attempting here to formalize and structure my view layer borrowing my experience in MVC and OO methodologies. It may be done already somewhere else but I can&apos;t find it and I need it, so here it is, right or wrong it&apos;s a jumping point.

If you look at the view layer in an object oriented approach and formalize the views as pseudo classes you may be able to deduce where I&apos;m headed. For example, views or pages have properties and methods that can be used to create UML class diagrams during the design phase. In addition you can carry these through the implimentation phase and realize the seperation within your page view code. The view is more than just the HTML layout of tables and div tags where content sits, it&apos;s a layer, not just a file. We already seperate CSS, Javascript, and other like concerns but not the inner page code structure, and I&apos;m not just refering to physical speration. It&apos;s just assumed that by the time you get to the actual view programming that you&apos;ll be able to just do it, no planning or formal organization required.

I&apos;m not talking about architecting the view in an object oriented manner, that&apos;s just too much. I believe the view can benefit from organized structuring of page concern seperation and we want to use this technique in planning and in coding. To demonstrate this I&apos;m going to create a simple and quick fictitous site with a few views in an MVC structured application.

Here&apos;s a draft of a UML class diagram showing how I might plan my views and view layers on paper. Notice that my page views are now represented as classes with properties and methods. Keep in mind that UML diagrams and planning is an iterative process and will change quite frequently but, we must start somewhere.

&lt;center&gt;&lt;img src=&quot;/enclosures/viewUML.gif&quot; /&gt;&lt;/center&gt;

Notice first the hirarchy from Application through layout and to individual nested pages. These are connected to show how each page view inherits it&apos;s elements from upper view layers. I&apos;m not advocating that this is the right way to diagram or think of it, just my way for now.

The application node is the top node here and has properties and methods you should recognize. This sits in the view layer in an inner application layer. An application layer in my mind can also include other nodes like UDF and configuration files.

Inner view layers:

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Container layer - the top most containing layer surrounding all other inner view layers in an application. All other view layers inherit from the application layer.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HTML layer - Defines containers and layout structures in which to place content.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Content layer - Contains the content of page views and any externally viewable content media they may include.

My site has a default_layout page that displays content layers, and as usual frequently repeated elements across multiple views are located here too; ie the header, footer, and navigation. Notice it&apos;s properties here. The value for jsDir will be the physical path that will be used in the source attribute of a script tag or anywhere else we may find a need for it. For example:
&lt;code&gt;&lt;$cript type=&quot;text/javascript&quot; src=&quot;&lt;cfoutput&gt;#jsDir#&lt;/cfoutput&gt;ddlevelsmenu.js&quot;&gt;&lt;/code&gt;

The homeLink property has a value equal to the actual href tag, the link back to the home page. And in this property we can edit the link as needed from one easy to find location in this view. The default layout view here also composes of the CSS, the JavaScripts, and anything else you would need to include somehow. These inclusions, not expanded here, could be psuedo classes with properties and methods as well.

Moving down the view layer we have the content layer view nodes which is the meat of our site to the user. They inherit properties and methods of the layout layer as well as defining their own. In this diagram we can see what the content views inherit, most useful when trying to remember what your content view pages are capable of before any code goes into it.

Starting with the home content view I created a userListLink property containing the href link to the userList content view. That property can be used anywhere in the home content view.

Next, the userList content view will output a list of users that we retrieved from the control layer after being queried and cast to an array in the model layer. So the users array will be a property of array type. Notice I don&apos;t type simple properties such as strings. There are two other properties, listPerPage (how many to paginate per page), and userDetailLink which is the href for the link to the userDetail content view. Here we also have methods for this view.

The userCountTotal() function placed here for example is a simple function the view can call from anywhere to get a value. And no matter where or how many times this function is placed it can be altered from one location.

Let&apos;s take for example the next function, wTitle(), to see how this works in practical code. The purpose of this function is to encapsulate a piece of content and seperate it from the views tables and divs, making the design much easy to read, move around, and format. The best way to show this is probably a before and after example.

Before using view layering:
&lt;code&gt;&lt;cfsilent&gt;
&lt;cfscript&gt;
users = event.getValue(&apos;users&apos;);
listPerPage = getController().getSetting(&apos;listPerPage&apos;);
userDetailLink = &quot;&lt;a href=&apos;&apos;&gt;View Details&lt;/a&gt;&quot;;
catagory = event.getValue(&apos;catagory&apos;);
&lt;/cfscript&gt;
&lt;/cfsilent&gt;
&lt;cfoutput&gt;
&lt;div class=&quot;centerPadding&quot;&gt;
&lt;span class=&quot;largetext&quot; style=&quot;text-transform:capitalize;&quot;&gt;&lt;strong&gt;#catagory#&lt;/strong&gt; readings&lt;/span&gt;
&lt;br /&gt;
&lt;span class=&quot;smalltext&quot;&gt;Always only $2.99 per minute!&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;3&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
...&lt;/code&gt;

After using view layering:
&lt;code&gt;&lt;cfsilent&gt;
&lt;cfscript&gt;
users = event.getValue(&apos;users&apos;);
listPerPage = getController().getSetting(&apos;listPerPage&apos;);
userDetailLink = &quot;&lt;a href=&apos;&apos;&gt;View Details&lt;/a&gt;&quot;;
catagory = event.getValue(&apos;catagory&apos;);
function wTitle(){
writeoutput(&quot;
&lt;span class=&quot;&quot;largetext&quot;&quot; style=&quot;&quot;text-transform:capitalize;&quot;&quot;&gt;&lt;strong&gt;#catagory#&lt;/strong&gt; users&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;&quot;smalltext&quot;&quot;&gt;List of all users from the #catagory# catagory.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&quot;);
}
&lt;/cfscript&gt;
&lt;/cfsilent&gt;
&lt;cfoutput&gt;
&lt;div class=&quot;centerPadding&quot;&gt;
#wTitle()#
&lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;3&quot; border=&quot;0&quot;&gt;
&lt;tr&gt;
...&lt;/code&gt;

Notice how we took out a huge chunk of content making the layout much easier to conceptualize and edit. This also lends to seperating concerns for content programmers and design layout artist. In making these separate I usually rule out any chunks that are either small or contain more layout code such as td repeaters. All I want to be left with below the content functions is basically a skeleton of table and div tags.

The userDetail content layer view has two properties. User is a user object passed in from the controller and the userListLink is an href string used to link back to the userList node. There are two functions used to output content, wUserImage() is the code to output the image for the user. The wUserDescription() function is called to format and place the description block how and where you would like. Think of these functions as an easy way for a layout artist to place content within his work that the content programmer has already developed. These functions could also take in arguments if the programmer feels witty. Then a view layer API can be documented and used by the design artist.

What I&apos;m doing inside the views to seperate content and layout design isn&apos;t as important as the benifits realized from the view layer model in the design phase. The other models such as those in the model layer can now be associated with nodes in the view layer. Eventually I want to produce a document where every element that is a part of the process can be modeled to and from each other and between layers in a world view type map.

It&apos;s all pretty simple and not well thought out for now, the result of about a day of thinking. I do plan to expand it if I can&apos;t find anything comparable out there. For now it seems to help me a lot with organizing and visualizing page views. Esspecially when you consider that I&apos;m already thinking this way for the other layers.
				
				</description>
				
				<category>OOP/Patterns</category>
				
				<category>Frameworks</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Tue, 08 Sep 2009 11:05:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/9/8/MVC--Structured-View-Layer-Development</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Generating and using site documentation, cfcdoc</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/9/6/Generating-and-using-site-documentation-cfcdoc</link>
				<description>
				
				I&apos;m completely embarrased to admit it but, I didn&apos;t know until yesterday that not only can I create my own web site&apos;s API documentation automatically but how useful it can be. Sure beats glazing over my directories and trying to remember where everything is and what it does.

My latest project has got me dealing heavily with application API&apos;s and it&apos;s important to read and understand how to apply the API to development, especially when using OO framework architectures. Reading and using the API&apos;s for my Coldbox framework (&lt;a href=&quot;http://www.coldboxframework.com/api/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;) I got to thinking that having this documentation for my own site would be very useful and very cool. It literally puts OO into perspective, for me anyways since I like the API&apos;s, and helps me to visualize how my classes (components) are organized, if anything is out of place, and if I can optimize anything.

At first I was using the CFIDE component utilities (localhost:8300/cfide/componentutils/) like the explorer and the componentdoc. But it would always list packages from everywhere, including the CFIDE and WEB-INF folders. And then it would list the pakages from the mappings as well as the folder it pointed to. So I edited the code to exclude folders, thinking that there&apos;s got to be a better way, and there was. Looking back at Coldbox&apos;s API I notice it&apos;s from an open source RIAforge thing, get it here: &lt;a href=&quot;http://cfcdoc.riaforge.org/&quot; target=&quot;_blank&quot;&gt;CFCDoc&lt;/a&gt;. It&apos;s so easy, just extract the zip to your root under a folder, like &apos;/api/&apos; and go there. There&apos;s information about what to do next because all the packages you&apos;ll see at first are the one&apos;s in the /api/ folder you placed it in, not very useful. But basically you add or delete folders to include through a simple config xml file and that&apos;s it, your exploring your very own API.

Depending on the length you want to go to in your documentation you can go really wild with component and function attributes like hint and displayname, probably more too. Using these extra attributes I&apos;m sure you thought were useless and time consuming you can add enough information to make the API a virtual users manual. At the very least you can use the API to match up with your UML class models. I&apos;m thinking also that planning a site&apos;s structure could be done API style instead of UML style, maybe even faster. You can think of what classes you need and how to package them for your application doing API visualization. In other words, what should your API look like and is it all packaged logically from an API documentation perspective?
				
				</description>
				
				<category>Resources</category>
				
				<category>OOP/Patterns</category>
				
				<category>Frameworks</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Sun, 06 Sep 2009 09:17:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/9/6/Generating-and-using-site-documentation-cfcdoc</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Do ColdFusion programmers need to be object oriented gurus?</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/9/4/Do-ColdFusion-programmers-need-to-be-object-oriented-gurus</link>
				<description>
				
				Before I begin let me just say that although I&apos;m not a certified Java developer, which would make me an automatic OO guru, I do develop Flash and Flex applications using AS3, which is an OO language. Yes, when it comes to OO I know what I&apos;m talking about and have studied and used patterns for a few years. I&apos;m not a pure OOist but who is and who really needs to be?

I&apos;m so tired of chasing that alusive brass CFOOP ring of knowledge, trying to become a an object oriented guru with the deepest depths of understanding. I&apos;m already there and so are you, seriously, its not as far as you thought. And I&apos;m talking to CF verterans that use cfc&apos;s as objects, and patterns (whether they know it or not) to solve problems. You may not be using pure OO but you are OOing purely enough. For those reading this that know nothing of OO please stop and go read a few beginner OO basic articles and then come back.

There&apos;s only about a 10% difference between OO in an &quot;OO language&quot; like Java, and OO in the ColdFusion scripting language. And that 10% difference is used about 1% of the time. So you can&apos;t create interfaces (technically you can with underlying Java), big deal, and completely irrelevant too. Creating &quot;I&quot; classes is simply rewriting the original class in a more impressive way and there&apos;s only a 1% chance you&apos;ll actually need the real thing. Interfaces for the most part are for compile time error checking and CF is not a compile time language, not at our level it isn&apos;t.

Let&apos;s see, what else is there that I&apos;ll probably never have a need for, or can do in some other CF way. Overloading, constructors, overriding, and multiple inheritance, and that&apos;s about it. As for the constructor, we use an init function on object instantiation as a consturctor for now but, CF 9 will have implicit constructors. Overriding can be accomplished in CF using composition. BTW, implicit getters and setters will be available in CF 9 also.

Other than the lack of multiple inheritence (which isn&apos;t a requirement to be considered a true &apos;OO capable&apos; language, like Java and Smalltalk), if Adobe added overloading capabilities then CFers could be concidered OOers too. And just like a Java coder can produce crappy non-OO code so can a CF coder create crappy non-OO CF code.

Here&apos;s the thing though, follow me. ColdFusion is a RAD tool that can be structured in an OO way following proper OO techniques. ColdFusion is OO when and if you need it to be but we certainly don&apos;t want it to be totally and purely OO, ever, EVER. If you make it pure OO say goodbye to rapid development and say goodbye to the market it is ment for. OO was devised to help solve complexed problems in very large systems, something that CF can but doesn&apos;t do much of. Those complexed and very large systems are far and few between, the market is in the average system, which don&apos;t need OO much any ways.

All that being said, if you&apos;ve got the jest of OO terminology down and have enough understanding of the underlying principles that you can apply it safely, stop worrying about it and get back to work. The only way you can become a better OOer is to practise it. And as for those Java guys laughing at us CFers when OO is mentioned, they&apos;re just trying to chase away the new kids in their OO sandbox, spoiled sports don&apos;t want to share the spotlight. Honestly I don&apos;t consider anyone an OO programmer based on the language he uses, it&apos;s how he uses the language that defines a programmers OO understanding. And if people will stop refering to CF as it was prior to the MX version we&apos;de stop having this debate in the first place. Once apon a time, ColdFusion couldn&apos;t be architectured with OO principles, but now it can. The end.
				
				</description>
				
				<category>Personal</category>
				
				<category>OOP/Patterns</category>
				
				<category>Frameworks</category>
				
				<category>Flex/Flash/AS3</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 04 Sep 2009 11:25:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/9/4/Do-ColdFusion-programmers-need-to-be-object-oriented-gurus</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Free web-based UML diagram tool</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/9/3/Free-webbased-UML-diagram-tool</link>
				<description>
				
				This is really cool, a simple web-based UML diagram tool you can use on the fly without being at the web site it is served from. Without even going to, or even signing up with, &lt;a href=&quot;http://yuml.me/&quot; target=&quot;_blank&quot;&gt;Yuml.me&lt;/a&gt; I can create a UML model typing in what I want into the address bar, then just copy and paste that into my blog or anywhere else I can use the URL to share and display it.

Since you asked, of course I&apos;ll show you an example right here. I will create a user gateway class [UsersGateway|+DNS;+User|+getUserBean();+getAllUsers()]:

&lt;img src=&quot;http://yuml.me/diagram/scruffy/class/[UsersGateway|+DNS;+User|+getUserBean();+getAllUsers()]&quot; /&gt;

You simply use an img tag with the source http://yuml.me/diagram/class/, the &quot;scruffy&quot; option makes the output look less formal.
				
				</description>
				
				<category>OOP/Patterns</category>
				
				<category>Resources</category>
				
				<pubDate>Thu, 03 Sep 2009 14:50:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/9/3/Free-webbased-UML-diagram-tool</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>ColdFusion OO, MVC, and Frameworks</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/9/1/ColdFusion-OO-MVC-and-Frameworks</link>
				<description>
				
				Saying that you don&apos;t need OO or MVC to build a ColdFusion application or web site is like saying you don&apos;t need blueprints and building code standards to build a skyscraper or a house. Granted, blueprints are overkill for a birdhouse but, OO and frameworks are overkill for a one product web site too. You should know when all the overhead is needed and when it is just going to be overhead. To me, it seems like this is the real problem when it comes to utilizing more sophisticated coding techniques rather than just plain old coding.

In all actuality most of the complaints, confusion, and questions come from weekend programmers who don&apos;t need to concern him or herself with such extremes. But they make a mountain out of a mole hill (or an application out of a web site in this case) because they want to hunt with the big dogs or think they need to or should, or they just feel inadaquite if they don&apos;t. I don&apos;t blame them, I did too, and I wouldn&apos;t be where I am today if I didn&apos;t venture into the world of software engineering. But all that stuff didn&apos;t add anything positive to my low level projects at the time except taking more time to do it, so be careful.

Here&apos;s the honest to goodness truth about using all that fancy stuff. Any site or application created using any of that overhead can be created just as well with straight down proceedural coding. The end user, and sometimes even the client wouldn&apos;t know the difference between one and the other unless you pointed it out and showed them. In all frankness, only about a quarter of web sites need to bother with anything more than simple code, yet three quarters of web developers think they should.

My advice to web development noobs is to stick with the one thing you need to get the job done unless and until that job requires more than what that language can do efficiantly on it&apos;s own. Who knows, you might develop a simple site that makes you a millionaire without ever knowing what OO is. But if that site begins to grow unwieldly with errors coming from nowhere, it&apos;s time to turn to more sophisticated techniques. It&apos;s time to use MVC, properly incorporate a framework, and maybe even learn some OO terms and patterns. Then the question &quot;when should I use the fancy stuff&quot; becomes &quot;how, what, and where do I use these&quot;.

Personally I use an MVC architecture on anything over a dozen pages, frameworks on anything with more than a few applications, and OOD/P on anything considered an enterprise. If you must, its important that you be able to do these things with professional precision to get something out of it. Your not going to get any ROI using a framework on any application if you&apos;ve never used one before, so don&apos;t practice where your paycheck comes from.

MVC is a term used to describe a seperation of concerns, the business model, the user interface, and the central controller. It&apos;s not a product and there is no one right way to do it. As long as the thinking is done in one place, the displaying done in another, and neither knows about the other except through a controller, your using proper MVC architecture. Pretty simple right? If you only have a few events, or page views, then yes it is.

But, try rolling your own MVC on a medium size project and you&apos;ll grow to appreciate frameworks rather quickly. A framework is basically an MVC, structured and expanded for medium to large scale projects. That is, it supports agile development by not only insuring best practise MVC organization, but also offers commonly used programming logic in prebuilt API&apos;s. It&apos;s the foundation or base that will be the strongest part of your structured application if used properly. 

Object oriented programming basically helps when you can objectify parts of a program into seperate entities and only if there will be a lot of them. In addition it&apos;s only benificial if those parts will be very active during the life of the application. By active I don&apos;t mean the use of the application, I&apos;m talking about moving things around, enhancing them and depricating them, or allowing others to use them. If an object is going to be static in that regard, then it shouldn&apos;t be factored into the decision to use OO.

In summary, something important to think about while you hone your enterprise software engineering skills is that, as you get more comfortable with this sophisticated stuff you&apos;ll become more able to use those bigger skill sets on smaller scales. I for one find myself able to flesh out an OO UML model for a simple site in a matter of minutes. An OO noob might waste valuable precious days over the same thought with a negative ROI. So yes, you can use this stuff on smaller scales effectively when it becomes second nature and you don&apos;t have to think about how but what. As for all those naysayers that are swimming against the industry tide and trying to convince you that it&apos;s all uneccessary, they couldn&apos;t be more wrong. The storm is coming, mark my word. Maybe not in our life time but soon, developing web sites will be out of the range for the average Joe and the strongest of proceedural coders will be lost without keeping up. Stop pouting and start evolving, accept it, embrace it, love it.
				
				</description>
				
				<category>ColdFusion</category>
				
				<category>Frameworks</category>
				
				<category>OOP/Patterns</category>
				
				<category>Personal</category>
				
				<pubDate>Tue, 01 Sep 2009 16:19:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/9/1/ColdFusion-OO-MVC-and-Frameworks</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Consume object or object property</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/6/20/Consume-object-or-object-property</link>
				<description>
				
				Here it is in a nutshell. I have a controller cfc in my framework that directs execution instructions to the business model cfc&apos;s. But I&apos;m wandering if I should pass whole objects, like a user object, and get values as needed from it&apos;s methods within the business model? Or should I just pass the object&apos;s properties to the business model classes as needed?

Another way to put it is this(model/securityService.cfc):
&lt;code&gt;
instance.securityGateway.login(User.getUsername(),User.getUserpassword());

or

instance.securityGateway.login(User);
&lt;/code&gt;

The business model gateway in this example would be something like(model/data/gateway/securityGateway.cfc):
&lt;code&gt;
&lt;cffunction name=&quot;login&quot;..&gt;
&lt;cfargument name=&quot;username&quot;../&gt;
&lt;cfargument name=&quot;password&quot;../&gt;
...
&lt;/cffunction&gt;

or

&lt;cffunction name=&quot;login&quot;..&gt;
&lt;cfargument name=&quot;User&quot; type=&quot;model.data.gateway.User&quot;../&gt;
..
&lt;/cffunction&gt;
&lt;/code&gt;

Maybe because I&apos;m not a seasoned OO veteran but I&apos;m looking at this and trying to figure out the best course and can&apos;t decide which one to take. From the service cfc do I pass in the user object or it&apos;s properties (username &amp; password)?

For now I&apos;m passing the object&apos;s properties if the gateway method only requires data and doesn&apos;t need to access any of the objects other methods like setters. If the gateway method here needed to use the object&apos;s methods instead of just it&apos;s properties, then I&apos;d pass the entire object. So what do you think is best practice?
				
				</description>
				
				<category>Bits and Bytes</category>
				
				<category>Coldbox 2.6</category>
				
				<category>ColdFusion</category>
				
				<category>Frameworks</category>
				
				<category>OOP/Patterns</category>
				
				<pubDate>Sat, 20 Jun 2009 07:03:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/6/20/Consume-object-or-object-property</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Inherit or not?</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2009/5/18/Inherit-or-not</link>
				<description>
				
				Quick question, quiz, poll.
Which one of the following would be the best solution in most cases?
&lt;code&gt;userTransactionsQuery = User.getBankTransactions()

or

userTransactionsQuery = Bank.getUserTransactions(User.getAcctID())&lt;/code&gt;

I&apos;m thinking that it&apos;s wrong to give a bank method to a user object. Maybe I&apos;ve had too miny *hic* Red Bulls.
				
				</description>
				
				<category>OOP/Patterns</category>
				
				<pubDate>Mon, 18 May 2009 14:37:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2009/5/18/Inherit-or-not</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Coldbox beanfactory populatebean method</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2008/6/4/Coldbox-beanfactory-populatebean-method</link>
				<description>
				
				I have to say I love this automatic bean population thing going around. Model-Glue does it also but since I mostly use Coldbox, that&apos;s what I&apos;m showing here.

WTF, you may ask? Well, you know how when you submit a form to edit a user account for example, and then you have to pass all those form elements to your user bean object&apos;s getters and setters one by one. userObj.setUsername(form.username), userObj.setUserpassword(form.password) and so on.. well you can forget about ever doing this again.

HOW!?!? By using the Coldbox beanfactory populatebean method. You can play with form elements first if you need to, then simply call the populate method passing in the current userbean, and then Coldbox will match form elements to the bean&apos;s getter and do the heaving lifting for you returning an updated bean ready for saving.

2 simple lines, get bean and populate bean. Then do whatever else you prefer from there to save it wherever etc..

&lt;code&gt;&lt;cffunction name=&quot;doEditAccount&quot; access=&quot;public&quot; returntype=&quot;void&quot; output=&quot;false&quot;&gt;
		&lt;cfargument name=&quot;Event&quot; type=&quot;coldbox.system.beans.requestContext&quot;&gt;
		&lt;!--- Logic ---&gt;
		&lt;cfscript&gt;
			userBean = getPlugin(&quot;sessionstorage&quot;).getVar(&quot;User&quot;);
			getPlugin(&quot;beanFactory&quot;).populateBean(userBean);
			getUsersService().saveUser(userBean);
			getPlugin(&quot;sessionstorage&quot;).setVar(&quot;User&quot;,userBean);
		&lt;/cfscript&gt;
		&lt;!--- Display ---&gt;
		&lt;cfset setNextEvent(&quot;myaccount.general.dspAccountHome&quot;)&gt;
	&lt;/cffunction&gt;&lt;/code&gt;

The most important thing to remember is that your actual bean cfc object must use an init method with setters. And the form element names should be the same as the bean names.

A bean&apos;s init:
&lt;code&gt;&lt;cffunction name=&quot;init&quot; returntype=&quot;User&quot;&gt;
&lt;cfargument name=&quot;username&quot;&gt;
&lt;cfset setUsername(arguments.username)&gt;
&lt;/cffunction&gt;&lt;/code&gt;

So that:
&lt;code&gt;&lt;input type=&quot;text&quot; name=&quot;username&quot;&gt;&lt;/code&gt;
Matches:
&lt;code&gt;&lt;cffunction name=&quot;setUsername&quot;&gt;
&lt;cfargument name=&quot;var&quot;&gt;
&lt;cfset variables.instance.username = arguments.var&gt;
&lt;/cffunction&gt;&lt;/code&gt;

Hope that helps. :)
				
				</description>
				
				<category>Coldbox 2.6</category>
				
				<category>ColdFusion</category>
				
				<category>Frameworks</category>
				
				<category>OOP/Patterns</category>
				
				<pubDate>Wed, 04 Jun 2008 19:20:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2008/6/4/Coldbox-beanfactory-populatebean-method</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>UML Sequence Diagrams made easy</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2008/5/21/UML-Sequence-Diagrams-made-easy</link>
				<description>
				
				Web based sequence diagram tool. Enter your logic and out pops the image for your documentation.

&lt;a href=&quot;http://www.websequencediagrams.com/&quot; target=&quot;_blank&quot;&gt;Web Sequence Diagrams&lt;/a&gt;
				
				</description>
				
				<category>OOP/Patterns</category>
				
				<category>Resources</category>
				
				<pubDate>Wed, 21 May 2008 08:21:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2008/5/21/UML-Sequence-Diagrams-made-easy</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Flash Video AS3 Class Example</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2008/3/12/Flash-Video-AS3-Class-Example</link>
				<description>
				
				&lt;center&gt;&lt;a href=&quot;http://www.clintwillard.com/clintwillard/portfolio.cfm?show=flashvideoplayer&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.cfcdeveloper.com/enclosures/flashvideoexample.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/center&gt;

Created in Flash CS3 using Actionscript 3 to emulate a Youtube type player, extra controls not included here. A .mov file was first compressed into a .flv file using the Flash CS3 Video Encoder and placed in an assets folder of the video player project. The StreamingVideoPlayer AS3 class is imported into the Flash project&apos;s action frame and a video object is instantiated as a display object. The new video player object is then added to a movie clip on stage using addChild(). The parameters for the class instantiation is a server location, the .flv file location, the video duration, and the video deminsions desired. The video is placed on the stage with player controls from the StreamingVideoPlayer class.

The StreamingVideoPlayer class is contained in a package and extends the Sprite class. The netConnection uses it&apos;s onNetStatus to first make sure a connection is made to the server before proceeding to connect to the video stream. The video stream is then added to a Video object and added as a child to the parent. The video is then played, paused, and seeked to half way through where a Play Video button is added with an event handler to call a video play function. When the video is played, a removeChild() is used to remove the button. When the video is stopped, the function to reinitialize back to start with the button again is called, allowing the user to play again. 

&lt;a href=&quot;http://www.clintwillard.com/clintwillard/portfolio.cfm?show=flashvideoplayer&quot; target=&quot;_blank&quot;&gt;View entire entry and code here.&lt;/a&gt;
				
				</description>
				
				<category>Flex/Flash/AS3</category>
				
				<category>OOP/Patterns</category>
				
				<pubDate>Wed, 12 Mar 2008 21:59:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2008/3/12/Flash-Video-AS3-Class-Example</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Architectural Framework Woes</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2007/8/16/Architectural-Framework-Woes</link>
				<description>
				
				AHHHHHHHH! @#!$%#&amp;%@!

Yeah, I&apos;m a little aggravated this morning. I&apos;m coding. It&apos;s not that I don&apos;t see the value of using MVC or any other type of framework, I hate to love them. A framework or any organized architecture, be it OO or whatever, is only as good or useful as the programmer who who knows it or uses it. Otherwise, its a nightmare to step into and have to debug or enhance if you&apos;ve never been in it before. Its quit a learning curve that adds time to the whole process.

There are many frameworks and architectures out there now. Knowing as many as possible helps you to learn each one much faster. Then you pretty much become an architect developer or framework developer.

As my thoughts ramble on here I&apos;m wondering if we programmers are creating such intricate and complexed patterns of doing something fairly simple is so that we can mask our work in a way that you must be skilled to read it and do it in any manner. Surely anyone can do spaghetti code, but break out the OO and the MVC and you&apos;ve got a recipe for a lucrative highly skilled professional career. Books will and have been written about these ways of coding and now we can teach them in classes and give certifications in them.

Anyways, so I&apos;m debuging an application this morning that I&apos;ve never seen before. The application was developed in a framework I&apos;ve never seen before either. I know many frameworks such as Fusebox, MachII, and Model-Glue, but this was different and proprietary. An error was being thrown that was not displaying the correct message and I needed to find the mechanism that handled the error and everything else. Without getting technical, I&apos;m looking in 5 different files tracing back the entire path of the whole mechanism and getting frustrated. I&apos;m sure I could come up with a much more shallow mess of code to do the same thing.

But here I am looking in controllers, facades, managers, components, config files, and everything else. It&apos;s worse than a maze, its more like a death maze. The further you get in, the harder it is to find the end, and theres no way out. At every turn you must remember all the steps you took up to now and all the steps you didn&apos;t take, as well as a riddle you read at every dead end, all without any way to write it down.

Ok, breath deep and relax. Is it too complicated? I don&apos;t mean is it too complicated for me to do. Of course I&apos;ll do my job and do it well. In fact, I really enjoy the challange and reward. But can we all get together and agree on something standard, for the sake of my sanity. Structural engineers build buildings and bridges with only a few differences between them. What works, works, and it keeps the structures from falling.

But this is all just wishful thinking from a crazed coder in a moment of despair. Non-programmers who think our job is easy would go mad to step inside our mind. The diversity of ways a coder can program is what drives technology to new heights and discoveries. I understand the nature of the beast and the importance of its complexity, I really do. Maybe more vacation time is the answer?
				
				</description>
				
				<category>Frameworks</category>
				
				<category>OOP/Patterns</category>
				
				<category>Personal</category>
				
				<pubDate>Thu, 16 Aug 2007 06:24:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2007/8/16/Architectural-Framework-Woes</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Video Tutorials Coming Soon!!!</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2007/4/20/Video-Tutorials-Coming-Soon</link>
				<description>
				
				Creating web based tutorials has traditionally been done using what I call the linear method of tutorial production. This is simply a text and images style of showing how to do something in steps. This way to me is much too time consuming and way too boring. Enter the 21st century..

The technology for screen and audio recording is available, so why not use it, right? Introducing a new tutorial source right here on CFCDeveloper.com. I can get work done and show you some tricks at the same time, how cool would that be!

The &quot;Creating an MVC ColdFusion OOP Application&quot; tutorial I started here in text form will be discontinued in favor for video and audio.

Stay tuned...
				
				</description>
				
				<category>Announcements</category>
				
				<category>ColdFusion</category>
				
				<category>Flex/Flash/AS3</category>
				
				<category>JavaScript/Ajax</category>
				
				<category>OOP/Patterns</category>
				
				<category>Resources</category>
				
				<pubDate>Fri, 20 Apr 2007 10:20:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2007/4/20/Video-Tutorials-Coming-Soon</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Creating an MVC ColdFusion OOP Application - Part 3</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2007/3/30/Creating-an-MVC-ColdFusion-OOP-Application--Part-3</link>
				<description>
				
				Part &lt;a href=&quot;http://www.cfcdeveloper.com/index.cfm/2007/3/29/Creating-an-MVC-ColdFusion-OOP-Application--Part-2&quot;&gt;2&lt;/a&gt;

Welcome to part 3, setting up the ColdFusion Server and MySQL database on your Windows PC, also called setting up your development environment. I&apos;m hesitant about including this in my series because it has been discussed and taught just about everywhere. But mostly where I see a tutorial, each time it&apos;s a little different. So I thought it would be best to tell and show you how I set my development server up just in case your following along and suddenly something doesn&apos;t work right, you come here and see if the problem might be server related, maybe some step in the set up you did different than me. Unfortunately however, not all PC&apos;s are the same and there is the off chance that someone will have problems beyond my ability to help. There&apos;s one part in particular with my set up that took me 3 days to troubleshoot to get it working, luckily I wrote about it in my blog some time back, so now it&apos;s just part of the process. Hey, no one said programming was easy, it takes patience and determination.

While we&apos;re on the subject of setting up the development environment let&apos;s discuss some other tools you&apos;ll need if you don&apos;t have them already. Pick these up after setting up your development environment. This includes an IDE (integrated development environment) such as &lt;a href=http://www.adobe.com/products/dreamweaver/ target=_blank&gt;Dreamweaver&lt;/a&gt; like I use or anything else you can write and save files with, even Notepad. If you can&apos;t get Dreamweaver I suggest &lt;a href=http://www.eclipse.org/ target=_blank&gt;Eclipse&lt;/a&gt; with the &lt;a href=http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-175.html target=_blank&gt;CFEclipse&lt;/a&gt; ColdFusion plugin, it&apos;s free and very powerful. There&apos;s even an &lt;a href=http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-684.html target=_blank&gt;Eclipse SQL Explorer&lt;/a&gt; plugin, which I haven&apos;t tried but you might need later also.

Speaking of an SQL explorer, you&apos;ll need an interface to your MySQL data server when it&apos;s set up so you can actually create and manage databases and tables. If you&apos;d rather use MSSQL data server instead of MySQL, please do so, but I&apos;m not telling about that here. I use MSSQL at work with the MSSQL Management Studio and love it. For MySQL however, I love using Premiumsoft&apos;s &lt;a href=http://www.navicat.com/ target=_blank&gt;Navicat&lt;/a&gt; tool, which I paid about $100 for. But if you want something for free, use phpMyAdmin, which we will be installing anyways, so just hang on.

Ok, so lets get busy installing something. First lets get ColdFusion installed. ColdFusion comes free as a developer edition which is full featured. The only thing different from the $X,000 version is that the free version only allows about 10 or so connections per server. Download the free ColdFusion MX 7 developer edition from &lt;a href=http://www.adobe.com/products/coldfusion/ target=_blank&gt;here&lt;/a&gt;. You&apos;ll need to sign up for a membership to get a username and password. The download is 281 MB, luckily I have an 8Mbps cable connection and it only take me about 45 seconds to download.

Now, double click the installer and follow the directions, this part will take about 10-15 minutes total. Use the defaults everywhere but choose the J2EE configuration (ColdFusion with JRUN 4) in step 4 and choose Built in web server in step 7. Here&apos;s a good place to see screenshots of the installation and the steps: http://www.quackit.com/coldfusion/tutorial/coldfusion_mx_installation_guide.cfm

At the end of the installation you&apos;ll have a new directory under your C drive named JRun4. Your web sites will go under the C:/JRun4/servers/ directory which we will create when we get to that point. You should also be able to browse to the default installed web site at http://localhost:8300/ in your browser. Which will show nothing except two folders to your docs and CFIDE, more on that later. For now, just check that these two things are true or else uninstall and start over till you get it right.

Now lets get your MySQL data server installed, which happens to be easier than ColdFusion installation. We will be using a 4 in 1 application installer that will also be installing an Apache web server, MySQL data server, and the PHP server parser. With this installation you be able to do two things, develop PHP web sites if you want, and use the phpMyAdmin to manage your data server if you need it. If however you don&apos;t want all that and will be using another SQL manager, you could just go to the MySQL web site to download and install their single free product. The 4 in 1 installer is also free, called a WAMP, the best one that I use is &lt;a href= target=_blank&gt;here&lt;/a&gt;, it&apos;s only about 17 MB. Download then double click to install. The installer is extremely easy and fast, even a 5 year old could do it, so I&apos;ll just leave this to you. Once complete you will be able to browse to http://localhost/ where you&apos;ll see the WAMP welcome page and some links. One of the links is to the phpMyAdmin tool. The phpMyAdmin may need some config work to get working, if so just ask and I&apos;ll comment back the help you need.

By the way, http://localhost/ and http://localhost:8300/ is completely different. With the Apache server install you basically have two separate servers now. One is an Apache PHP server and the other is a J2EE ColdFusion server. Notice we didn&apos;t use Windows IIS server at all, don&apos;t use it.

Now you have the ColdFusion developer server up and the MySQL server up and we&apos;ll be using these two together to create powerful apps. Just leave it at that for now and we&apos;ll configure the rest when we&apos;re ready to set up our web app. Then I&apos;ll tell you a little more about the ColdFusion server and Jrun and show you about creating instances and why.

Oh, almost forgot about another important tool. The image editor. I use &lt;a href=http://www.adobe.com/products/fireworks/ target=_blank&gt;Fireworks&lt;/a&gt; for layout and gif creations. Then I&apos;ll use &lt;a href=http://www.adobe.com/products/photoshop/family/ target=_blank&gt;Photoshop&lt;/a&gt; for complexed jpg photos and then I might use &lt;a href=http://www.adobe.com/products/illustrator/ target=_blank&gt;Illustrator&lt;/a&gt; for logos and some illustrations. It&apos;s controversial as to which is best for what purposes and why, but I always say that the tool is only as good as the person using it, so decide for yourself which you like and want to use for whatever purpose. If your good at one of them and feel good using it, then use it. As for free image editors, there aren&apos;t very many good ones if any at all. I&apos;ve never used a free one before but I hear that &lt;a href=http://www.gimp.org/ target=_blank&gt;Gimp&lt;/a&gt; is good, but I&apos;ve never used it.

So go get some tools, play around with them and I&apos;ll see you in the next part of this series where we&apos;ll talk about gathering requirements for our application. This would be the part where you meet with the client or your boss and discuss the project in detail.
				
				</description>
				
				<category>OOP/Patterns</category>
				
				<category>Frameworks</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Fri, 30 Mar 2007 21:08:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2007/3/30/Creating-an-MVC-ColdFusion-OOP-Application--Part-3</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Creating an MVC ColdFusion OOP Application - Part 2</title>
				<link>http://www.cfcdeveloper.com/index.cfm/2007/3/29/Creating-an-MVC-ColdFusion-OOP-Application--Part-2</link>
				<description>
				
				Part &lt;a href=&quot;http://www.cfcdeveloper.com/index.cfm/2007/3/27/Creating-an-MVC-ColdFusion-OOP-Application--Part-1&quot;&gt;1&lt;/a&gt;

In this part 2 I discuss the application of choice for this article and why I choose it. It&apos;s a short part, but preparation is the key to good planning and any job rushed is a job that could have been done better. So, little at a time and slow as she goes. Let&apos;s getter done good yall.

First I though about a store front, I&apos;ve done plenty and could make an interesting one, but they have also been done before, so..

Then came a great idea, an EBay-like auction site. This would be even better for my article because of all the features; buyers and sellers, products and shopping carts, check outs, payments, and more. I was getting excited a couldn&apos;t wait to jump in.

During the planning phase we will go into the details of all the features and functions we want our auction site to have. But for the sake of explaining why this application would be perfect for my purpose lets touch on some highlights.

A site with too few features, a small site with less than a dozen actions, and too few data tables, less than 6 or so, an MVC (model, view, controller) architecture would be overkill. An auction site however can have hundreds of things a user can do, hundreds of pages, and use more than a dozen database tables at the least. And that&apos;s just thinking about it. In reality you want to measure the scope or size of the application by the number of business objects and rules it will consist of. This you will find out during the planning and will help you to determine how many components, lines or pages of coding it will take. If your really experienced you can say that it takes approximately X hours to flesh out a basic data table object and you will have X amount of tables, and etc.. You really don&apos;t know what architecture structure would be best for an application until the planning is complete. Maybe you don&apos;t need OOP or MVC at all. In planning you find out what structural route is best for the size and complexity of the future structure. Kind of like deciding if you will need bulldozers and backhoes or just picks and shovels.

The auction site will offer OOP and MVC such things like objects in the form of users and products and the need for controllers (aka. listeners) to decouple and recouple business rules to separate design from development. And many other interesting facets you may or may not of heard or thought about. Who knows, you might even learn a little bit about design patterns along the way.

Part &lt;a href=&quot;http://www.cfcdeveloper.com/index.cfm/2007/3/30/Creating-an-MVC-ColdFusion-OOP-Application--Part-3&quot;&gt;3&lt;/a&gt;
				
				</description>
				
				<category>OOP/Patterns</category>
				
				<category>Frameworks</category>
				
				<category>ColdFusion</category>
				
				<pubDate>Thu, 29 Mar 2007 16:30:00 -0700</pubDate>
				<guid>http://www.cfcdeveloper.com/index.cfm/2007/3/29/Creating-an-MVC-ColdFusion-OOP-Application--Part-2</guid>
				
			</item>
			
		 	
			</channel></rss>
	

