Transcript Fusebox 3.0

Fusebox Development Methodology : www.fusebox.org
Sicherungskasten 3.0
(Fusebox 3.0)
Michael Smith, TeraTech Inc
MDCFUG
[email protected]
Sandra Clark, Shayna Productions
LACFUG
[email protected]
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Intro
Who am I?
• Michael Smith
• President of TeraTech, Inc Rockville MD USA
– http://www.teratech.com/
– ttWebReportServer, CFXGraphicserver
• MDCFUG, CFUNK2, Fusebox Conf
• Articles in CFDJ, Fusion Authority
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Overview
•
•
•
•
•
•
•
General Concepts and Demo
Benefits of Standardization
What makes Fusebox 3, Fusebox 3?
How Fusebox Works
Pros and Cons of Fusebox 3
Transitioning from FB2 to FB3
Links of Interest
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
General Concepts
There are two ways of constructing a
software design: One way is to make it so
simple that there are obviously no
deficiencies, and the other way is to make it
so complicated that there are no obvious
deficiencies. The first method is far more
difficult.
C.A.R. Hoare
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Overview
• Fusebox is a programming methodology
(=way to organize code and projects)
• Not language specific - CF, ASP, PHP
• Fusebox is „Sicherungskasten“
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Demo - overview
•
•
•
Mortgage app
No DSN required
Drag and drop a loan schedule component
into the app
1. Show Mortgage site and calculators circuit
2. Show loan app component
3. Drag and drop loan app into calculator
circuit
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Demo - Wiring in the component
1. Edit /fuses/fbx_circuits.cfm
<cfset
fusebox.Circuits.loanapp="home/calculators/fb3_loa
napp">
2. Edit /calculators/fxb_switch.cfm add
<cfset xfa.loanapp = "loanapp.input_loan">
3. Edit /calculators/fuses/dsp_calchome.cfm
add HTML for new link
<A href="#self#?fuseaction=#XFA.loanapp#">
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Demo - summary
•
•
•
•
That is it! Only two standard files had
to be edited to wire in the component.
No editing the internals of the code
required.
Can hand off the HTML to a design for
“prettifying”
Will explain how this works in the rest
of presentation.
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
State of the Art: Failure
70%
Failure
Rate!
•Not completed
•Buggy
•Needs not met
•Maintenance
headaches
•Cost overruns
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
New York
Point-to-Point Routing
Tampa
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Hub-and-Spoke System
Chicago
Seattle
New York
Los Angeles
Tampa
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Point-to-Point Programming
Module F
Module E
Module B
Module C
Module A
Module D
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Fusebox Programming
Module F
Module C
Module E
Fusebox
Module A
Module D
More on Fusebox at www.halhelms.com
Module B
Fusebox Development Methodology : www.fusebox.org
Benefits of Standardization
•
•
•
•
•
Better team communication
Cheaper maintenance
Can pick up others code faster
Fewer bugs due to different styles
Can think about the fun stuff instead of
code structure
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Fuses always make requests of the
fusebox
<form action=“index.cfm” method=“post”>
<input
type=“hidden”
name=“fuseaction”
value=“Tampa”>
<input type=“text” name=“username”>
<input type=“password” name=“password”>
<input type=“submit”>
</form>
Fusebox
a fuse
the fusebox
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
The fusebox
<cfswitch expression = “#fusebox.fuseaction#”>
<cfcase value=“Tampa”>
<cfinclude template=“act_CheckBags.cfm”>
<cfinclude template="dsp_TakeOff.cfm">
</cfcase>
<cfcase value=“Chicago”>
<cfinclude template=“act_CheckBags.cfm”>
<cfinclude template=“dsp_ShuttleExpress.cfm”>
</cfcase>
</cfswitch>
The fusebox
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Including a fuse
The fuseaction
act_aFuse.cfm
“doSomething”
<cfswitch expression = “#attributes.fuseaction#”>
<cfcase value=“doSomething”>
<cfinclude template=“act_aFuse.cfm”>
</cfcase>
….
<cfcase value=“doSomethingElse”>
<cfinclude template=“dsp_anotherFuse.cfm”>
</cfcase>
</cfswitch>
The fusebox with a lot of fuseactions
More on Fusebox at www.halhelms.com
dsp_anotherFuse.cfm
dsp_yetAnotherFuse.cfm
The fuses
Fusebox Development Methodology : www.fusebox.org
What makes Fusebox?
• Route Fuseaction via index.cfm
• Separate fuses in CFINCLUDEs by type
– dsp, act, qry, url, fbx
• Well documented (Fusedoc) for reuse
and easier maintenance
• Group code into circuits
• Tools and community
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
What makes Fusebox 3
•
•
•
•
•
Nested Circuits
Nested Layouts
Compound Fuseactions
Exit Fuseactions (XFA’s)
XML Fusedocs
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Fusebox Project Cycle
•
•
•
•
•
Wireframe
HTML Prototype
Prototype + Devnotes
Final Code + Devnotes
Formal Sign off
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Assumptions
• Basic FB knowledge i.e.
– Fuseaction
– <CFSWITCH>
– Naming of FB files, act_, dsp_, qry_
– Fusebox separates out SQL, CF, HTML
and flow control
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Bring on FB3
• 20 October 2001 at 2nd Fusebox Conference,
Orlando. Keynoted by Jeremy Allaire, Hal Helms
• Two day conference planned for next year, weekend
preceeding DevCon 2002
• Big change from FB2
• Several revisions since launch to produce stable
code (NO MAJOR CHANGES!)
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Nested Circuits
•One module is a circuit
•Parent-child - nested
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Nested Layouts
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Compound Fuseactions
• A request made of the server to perform some
action is known as a fuseaction.
• Fuseactions are made up of the circuit name,
a dot separator, and the actual request.
– Cart.addItem
– Users.login
– Scheduler.requestMeeting
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Exit Fuseactions (XFAs)
• A hardcoded value for the next
fuseaction...
– <cflocation
url=“index.cfm?fuseaction=Catalog.main”
addtoken=“yes”>
• …is replaced with a variable:
– <cflocation
url=“index.cfm?fuseaction=#XFA.success#”
addtoken=“yes”>
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Setting XFAs
• XFAs represent exit points for a fuseaction.
• XFA values are set in FBX_Switch.cfm
<cfcase value=“validateLogin”>
<cfset XFA.success = “Home.main”>
<cfset XFA.failure = “Login.badLogin”>
<cfinclude template=“qry_findUser.cfm”>
<cfinclude template=“act_findUser.cfm”>
</cfcase>
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
XML Fusedocs
• Fusedocs are now in XML
• Makes typing them easier – CF Studio help
• Makes parsing them by programs easier –
eg Jeff Peter’s fuse harness program,
Bjorkman’s site inspector
• Makes reading them easier – color coding
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Fusedoc
• A standardized documentation/program
definition language for use with
Fusebox
• XML-based (DTD available)
• Fusedoc tools (in the works)
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
How Fusebox Works –
A Fusebox Request
• A fuseaction request is sent to the web
server’s default page:
<a href=“index.cfm?fuseaction=Users.new”>
Register Now
</a>
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
A Fusebox Request
• The default page includes the core
Fusebox file:
<cfinclude
template=“FBX_Fusebox30_CF50.cfm”>
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
A Fusebox Request
• The fusebox file determines which circuit
the request belongs to and includes that
circuit’s FBX_Switch.cfm file.
• This switch file includes one or more fuses
needed to fullfill the request:
<!--- snippet from Users circuit’s FBX_Switch.cfm --->
<cfcase value=“new”>
<cfinclude template=“dsp_userInfo.cfm”>
</cfcase>
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
A Fusebox Request
• The circuit is completed by the fuse
making a new fuseaction request:
<!--- snippet from dsp_userInfo.cfm--->
<form
action=“index.cfm?fuseaction=Users.addUs
er”
method=“post”>
...
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Transitioning from Fusebox to Fusebox3
A New Prefix – fbx
• “app_” denotes “application”
• “fbx_” denotes “fusebox”
Our settings only apply to a fusebox, not
the entire application, so we’re going
with fbx_
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
THE FBX FILES
•
•
•
•
•
fbx_fusebox_cfxx.cfm
fbx_settings.cfm
fbx_layouts.cfm
fbx_switch.cfm
fbx_circuits.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
What CHANGED IN index.cfm?
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
<cfinclude template="app_locals.cfm">
<cf_bodycontent>
<cfswitch expression = "#attributes.fuseaction#">
<cfcase value="cover">
<cfinclude template="dsp_cover.cfm">
</cfcase>
</cfswitch>
</cf_bodycontent>
<cfinclude template=“../app_layout.cfm">
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm…
<cfinclude template="app_locals.cfm">
App_Locals.cfm
fbx_settings.cfm
(MyGlobals.cfm = fbx_settings.cfm)
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
fbx_settings.cfm
• Takes the place of app_globals and
app_locals.
• One fbx_settings file per circuit
• Let’s take a look…
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
<cf_bodycontent>
</cf_bodycontent>
<cfinclude template=“../app_layout.cfm">
cf_bodycontent
fbx_fusebox_cfxx.cfm
app_layout.cfm
fbx_layouts.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
fbx_layouts.cfm
• Layout settings for the circuit
<cfset fusebox.layoutdir="">
<cfset fusebox.layoutfile=“testLayout.cfm">
Let’s take a look at a layout file…
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
<cfswitch expression = "#attributes.fuseaction#">
<cfcase value="cover">
<cfinclude template="dsp_cover.cfm">
</cfcase>
</cfswitch>
Fusebox code
in the cfswitch
fbx_switch.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Fbx_switch.cfm
• Contains the <cfswitch> code, nothing
else.
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
<cfinclude template="app_locals.cfm">
<cf_bodycontent>
<cfswitch expression = "#attributes.fuseaction#">
<cfcase value="cover">
<cfinclude template="dsp_cover.cfm">
</cfcase>
</cfswitch>
</cf_bodycontent>
<cfinclude template=“../app_layout.cfm">
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
<cf_bodycontent>
<cfswitch expression = "#attributes.fuseaction#">
<cfcase value="cover">
<cfinclude template="dsp_cover.cfm">
</cfcase>
</cfswitch>
</cf_bodycontent>
<cfinclude template=“../app_layout.cfm">
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
<cf_bodycontent>
</cf_bodycontent>
<cfinclude template=“../app_layout.cfm">
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Typical FB2 index.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
So what’s in index.cfm?
Index.cfm contains the core Fusebox file
• cfinclude the fbx_fusebox30_cfxx.cfm
file
-or• copy/paste the code from fbx_fusebox
into index.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Fbx_Fusebox30_CFXX.cfm
• Contains the “guts” of fusebox.
• Combines several FB2 tags (and then
some)
• You never need to touch this file.
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
All Done! That was easy!
• Transitioning from FB2 to FB3 is not as
intimidating as it may sound!
• If you (or your boss) have strong
resistance to change, try doing it in
phases…
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FB TRANSITION Phases
In the real world, not every
organization will switch to FB3
instantly. If this is you, you can
transition your methodology in phases:
1. XFAs
2. Fusedocs
3. Plunge in 100%
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Migrating Fb2 to Fb3
• App_locals.cfm & app_globals > FBX_settings.cfm
• Application.cfm can go in FBX_Settings.cfm
• Index.cfm is not strictly the same thing as the
‘Fusebox’ anymore
• Include core file
• CFSWITCH into FBX_Switch.cfm
• Typicallayout.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FB3 Component Files
• Core Fusebox files begin with FBX_ prefix
–
–
–
–
–
–
–
–
FBX_Settings.cfm
FBX_Circuits.cfm
FBX_Switch.cfm
FBX_Layouts.cfm
FBX_Savecontent.cfm
FBX_Fusebox3XX_CF50.cfm
FBX_Fusebox3XX_CF45.cfm
FBX_Fusebox3XX_CF40.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FBX_Settings.cfm
• Optional – although need to modify
suppresserrors=true, (best to have empty
fbx_settings.cfm for future use)
• Sets variables needed by the application
• Each circuit may have its own FBX_Settings.cfm
• Called from top down, ie Child over rides Parent
• Replaces myGlobals.cfm, app_Globals.cfm and
app_locals.cfm
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FBX_Circuits.cfm
• REQUIRED in home circuit
• Maps circuit aliases to physical paths
• Circuit alias is a key within a structure called
Circuits within reserved structure Fusebox
<cfscript>
Fusebox.Circuits.home=Grandparent;
Fusebox.Circuits.parent=Grandparent/Parent;
Fusebox.Circuits.child=Grandparent/Parent/Child;
…
</cfscript>
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FBX_Switch.cfm
• Placed in every circuit that will handle fuseactions.
• <CFSWITCH> statement with a <CFCASE> for each
fuseaction the circuit will handle
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FBX_Layouts.cfm
• Required in any circuit that implements a separate
layout file
• Sets variables, Fusebox.layoutDir and
Fusebox.layoutFile
• Fusebox.layoutfile should output
Fusebox.layout (minimum)
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FBX_Savecontent.cfm
• Only used if CF version not 5
• Is basically the <CF_BODYCONTENT> tag
• Macromedia implemented <CFSAVECONTENT> in
CF5
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
FBX_Fusebox3XX_CFXX.cfm
•
•
•
•
Only one will be called
Specific version for each CF version
Optimised for app server version
_nix versions added recently to overcome platform
issues (CFRETHROW on nix)
• SHOULD NOT BE EDITED!
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Core Files?
• Performs all jobs FB2 custom tags did
–
–
–
–
CF_bodycontent
CF_formUrl2Attributes
CF_nesting
Etc…
• Exposes public API variables
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Public API variables
•
•
•
•
•
•
•
•
Fusebox.isCustomTag
Fusebox.isHomeCircuit
Fusebox.isTargetCircuit
Fusebox.fuseaction
Fusebox.circuit
Fusebox.homeCircuit
Fusebox.targetCircuit
Fusebox.thisCircuit
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Public API variables (cont…)
•
•
•
•
•
•
Fusebox.thisLayoutFile
Fusebox.thisLayoutDir
Fusebox.CurrentPath
Fusebox.RootPath
Fusebox.layout
Fusebox.SupressErrors
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Resources
• Fusebox core files are freely available from
www.fusebox.org
• Various sites have free tutorials, white papers,
sample code, etc.
– www.halhelms.com
– www.grokfusebox.com
– www.bjork.net
– www.beynon.org.uk
– www.bombusbee.com –php version
• Hal Helms articles in CFDJ magazine
More on Fusebox at www.halhelms.com
Fusebox Development Methodology : www.fusebox.org
Questions?
[email protected]
Fusebox book
Fusebox classes – in
Rockville and onsite
More on Fusebox at www.halhelms.com