<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Simon Whatley &#187; Tartan</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/tartan/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simonwhatley.co.uk</link>
	<description>The opposite of every great idea is another great idea</description>
	<lastBuildDate>Wed, 02 Nov 2011 09:28:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>ColdFusion Frameworks</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-frameworks</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-frameworks#comments</comments>
		<pubDate>Wed, 22 Feb 2006 11:15:42 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Ben Edwards]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[ColdFusion application server]]></category>
		<category><![CDATA[Coldspring]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Fusebox]]></category>
		<category><![CDATA[Hal Helms]]></category>
		<category><![CDATA[Mach-II]]></category>
		<category><![CDATA[Model-Glue]]></category>
		<category><![CDATA[model-view-controller]]></category>
		<category><![CDATA[New Brunswick]]></category>
		<category><![CDATA[onTap]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[public services]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tartan]]></category>
		<category><![CDATA[TheHUB]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[web-application framework]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=27</guid>
		<description><![CDATA[With the introduction of ColdFusion MX, the ColdFusion community is maturing. Most CF developers have moved beyond spaghetti code and the mixing of business logic with presentation code. But it can be difficult and wasteful to "re-invent the wheel" for every application you write. Frameworks can help promote good development practices, standards, and a sound foundation for creating an application.]]></description>
			<content:encoded><![CDATA[<p>With the introduction of ColdFusion MX, the ColdFusion community is maturing. Most <abbr title="ColdFusion">CF</abbr> developers have moved beyond spaghetti code and the mixing of business logic with presentation code. But it can be difficult and wasteful to &#8220;re-invent the wheel&#8221; for every application you write.</p>
<p>Frameworks can help promote good development practices, standards, and a sound foundation for creating an application.</p>
<p>In this article I list a number of these frameworks, but I will leave you to compare them, and decide which you may want to adopt.</p>
<h3>Fusebox</h3>
<p><em>An Historically Strong Framework</em></p>
<p>Fusebox is a popular framework for building ColdFusion and PHP web applications. &#8220;Fuseboxers&#8221; find that the framework releases them from much of the drudgery of writing applications and enables them to focus their efforts on creating great, customer-focused software.</p>
<p>Fusebox provides a small set of &#8216;core&#8217; files and large amount of structure which is helpful to developers. It emphasizes separation of presentation from logic and uses a readily understandable vocabulary for modeling websites, namely circuits, fuses and switches.</p>
<p><a title="Fusebox Application Framework" href="http://www.fusebox.org" target="_blank" rel="nofollow">http://www.fusebox.org</a></p>
<h3>Mach-II</h3>
<p>Mach II is a web-application framework developed by <a title="Hal Helm's personal site" href="http://www.halhelms.com">Hal Helms</a> and Ben Edwards that evolved out of a desire to create a framework that specifically addressed maintenance issues using an <abbr title="Object Orientated">OO</abbr> style. Mach II is based on an Implicit Invocation Architecture and directly supports the <abbr title="Model-View-Controller">MVC</abbr> design pattern.</p>
<p><a title="Mach-II Application Framework" href="http://www.mach-ii.com" target="_blank" rel="nofollow">http://www.mach-ii.com</a></p>
<h3>Model-Glue</h3>
<p>Model-Glue helps you build Object-Oriented ColdFusion applications based on the Model View Controller pattern. It&#8217;s designed to be easy to use and play well with others, like <a title="Tartan Framework" href="http://www.tartanframework.org">Tartan</a>.</p>
<p><a title="Model-Glue Framework" href="http://www.model-glue.com" target="_blank" rel="nofollow">http://www.model-glue.com</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>onTap</h3>
<p>The onTap framework is an Open Source Framework for quickly developing powerful web applications using Adobe&#8217;s <a title="Adobe (Macromedia) ColdFusion" href="http://www.macromedia.com/software/coldfusion/">ColdFusion application server</a>. The framework itself bears a marked resemblance to the recently buzzy <a title="Ruby on Rails - open source web framework" href="http://www.rubyonrails.org/">Ruby on Rails</a>.</p>
<p><a title="onTap Framework" href="http://www.fusiontap.com/" target="_blank" rel="nofollow">http://www.fusiontap.com</a></p>
<h3>TheHUB</h3>
<p>TheHUB, like other application development frameworks, utilizes the notion of a central hub template that all requests for the application pass through. That cental hub is the point or place within the application that the processing of all code hinges upon. The code simply checks for a query string and then reads the parameters passed to handle template loading and screen rendering.</p>
<p><a title="TheHub Framework" href="http://www.codesweeper.com" target="_blank" rel="nofollow">http://www.codesweeper.com</a></p>
<h3>Tartan</h3>
<p>Tartan is a command-driven service framework for ColdFusion. It was built to help produce the service layer within a larger application architecture which relies on strict separation or layering of functionality.</p>
<p>All access to the underlying business logic is controlled by public services which are available locally as <abbr title="ColdFusion Components">CFCs</abbr> and remotly via Flash Remoting and <abbr title="Simple Object Access Protocol">SOAP</abbr> web services. A service can be composed of any number of commands, each of which implements a discreet operation within the application. These contain the core logic for the application. Commands can communicate with databases via <abbr title="Data Access Objects">DAOs</abbr>, manipulate values received from the client, execute other commands and even communicate with services available on other remote servers.</p>
<p>At the center of Tartan are 6 Core classes : LocalServiceProxy, LocalService, Command, <abbr title="Data Access Object">DAO</abbr>, ValueObject and ExceptionHandler. They provide most of the functionality of the framework, and must be extended by the application developer.</p>
<p><a title="Tartan Framework" href="http://www.tartanframework.org" target="_blank" rel="nofollow">http://www.tartanframework.org</a></p>
<h3>ColdSpring</h3>
<p>ColdSpring is a framework for <abbr title="ColdFusion Components">CFCs</abbr> (ColdFusion Components).</p>
<p>ColdSpring&#8217;s core focus is to make the configuration and dependencies of your <abbr title="ColdFusion Components">CFCs</abbr> easier to manage. ColdSpring uses the &#8220;inversion-of-control&#8221; pattern to &#8220;wire&#8221; your <abbr title="ColdFusion Components">CFCs</abbr> together. Inversion-of-control provides many advantages over traditional approaches to assembling your application&#8217;s model. Also part of ColdSpring is the first Aspect-Oriented-Programming (AOP) framework for <abbr title="ColdFusion Components">CFCs</abbr>.</p>
<p><a title="ColdSpring Application Framework" href="http://www.coldspringframework.org" target="_blank" rel="nofollow">http://www.coldspringframework.org</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p><em><strong>UPDATE:</strong> Since creating this blog post many years ago, two more frameworks have been released that require an honourable mention.</em></p>
<h3>ColdBox</h3>
<p><em>My New Framework of Choice</em></p>
<p>ColdBox is an event-driven conventions based ColdFusion Framework. It provides you with a set of reusable code and tools that you can use to increase your productivity, and it provides you with a development standard when working in a team environment. It makes use of an <abbr title="Model View Controller">MVC</abbr> (Model View Controller) design pattern and an extensive array of patterns for its operations such as Factories, Helpers, Workers, etc. And since it is based on <abbr title="ColdFusion Components">CFCs</abbr> it does not rely on an <abbr title="eXtensible Markup Language">XML</abbr> dialect.</p>
<p>NB. ColdBox also takes advantage of ColdSpring or Lightwire.</p>
<p><a href="http://www.coldboxframework.com" title="The ColdBox Framework" target="_blank" rel="nofollow">http://www.coldboxframework.com</a></p>
<h3>Lightwire</h3>
<p>Lightwire is a very lightweight Direct Injection (<abbr title="Direct Injection">DI</abbr>)/Inversion of Control (<abbr title="Inversion of Control">IoC</abbr>) engine for directly injecting dependencies into singletons and transient business object. The framework is optimised to create transient objects as well as singletons and allows for programmatic as well as <abbr title="eXtensible Markup Language">XML</abbr> configuration. It is the lightweight framework for people who&#8217;d like to put more logic in their beans and less in their service layer.</p>
<p><a href="http://lightwire.riaforge.org" title="Lightwire" target="_blank" rel="nofollow">http://lightwire.riaforge.org</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-frameworks/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tartan &#8211; Web Application Framework</title>
		<link>http://www.simonwhatley.co.uk/tartan-web-application-framework</link>
		<comments>http://www.simonwhatley.co.uk/tartan-web-application-framework#comments</comments>
		<pubDate>Wed, 19 Oct 2005 14:54:59 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[public services]]></category>
		<category><![CDATA[Server Side]]></category>
		<category><![CDATA[Tartan]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=11</guid>
		<description><![CDATA[Tartan is a command-driven service framework for ColdFusion. It was built to help produce the service layer within a larger application architecture which relies on strict separation or layering of functionality.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.tartanframework.org/">Tartan</a> is a command-driven service framework for ColdFusion. It was built to help produce the service layer within a larger application architecture which relies on strict separation or layering of functionality.</p>
<p>All access to the underlying business logic is controlled by public services which are available locally as <acronym title="ColdFusion Components">CFCs</acronym> and remotely via Flash Remoting and <acronym title="Simple Object Access Protocol">SOAP</acronym> web services. A service can be composed of any number of commands, each of which implements a discreet operation within the application. These contain the core logic for the application. Commands can communicate with databases via <acronym title="Data Access Object">DAOs</acronym>, manipulate values received from the client, execute other commands and even communicate with services available on other remote servers.</p>
<p>At the center of <a href="http://www.tartanframework.org/">Tartan</a> are 6 Core classes : LocalServiceProxy, LocalService, Command, <acronym title="Data Access Object">DAO</acronym>, ValueObject and ExceptionHandler. They provide most of the functionality of the framework, and must be extended by the application developer.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Overview and Explanation</h3>
<p>The driving need behind <a href="http://www.tartanframework.org/">Tartan</a> was a production application that needed to transfer data between 5 different databases and 3 different applications. There was a complex set of <abbr title="Data Access Object">DAO</abbr> classes and a faade class that provided access. Each fa ade class had a single public method called &#8220;execute&#8221; that would simply take arguments and return a result.</p>
<p>This concept worked well, but obviously had its limitations. So <a href="http://www.tartanframework.org/">Tartan</a> was created to be able to quickly and easily add new commands to services, and new services to the system.</p>
<p>Tartan is described as a &#8220;command-driven service framework.&#8221; What does that mean? In this context a &#8220;service&#8221; is a set of commands that have commonality, and a &#8220;command&#8221; is a method that executes any number of other methods and returns a result. It&#8217;s that simple. A service such as &#8220;televisionViewer&#8221; could include a command such as &#8220;getListings&#8221; which would, based on locality data provided either by a config file or a method argument, check local listings and return a collection of data regarding current television listings.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>To further explain the concept of &#8220;commands,&#8221; we could offer that method a second argument such as &#8220;returnType&#8221; and return the listings as an array of structures, a <abbr title="ColdFusion">CF</abbr> query object, or an <abbr title="eXtensible Markup Language">XML</abbr> file. By adding commands from granular to broad, we can incorporate them into sequences. For instance, if we wanted to offer the findMyShow command, we could have it first execute getListings, then parse the resulting data and determine if our show is on soon or not.</p>
<p>By doing this carefully and with some planning, we develop a very simple interface between our application and any persistant storage mechanism and/or business objects, with the ability to filter, alter, or convert our results before they&#8217;re returned to the caller. If we start with granular and move to broad commands, we maintain the flexibility and encapsulation of an <abbr title="Object Orientated">OO</abbr> design, but gain the convenience and natural-thinking appeal of procedural programming.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/tartan-web-application-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

