Fusebox 3.0 - Skydive KY

jellytrickInternet και Εφαρμογές Web

10 Νοε 2013 (πριν από 3 χρόνια και 11 μήνες)

210 εμφανίσεις

Fusebox 3.0

The Framework, The Methodology,

The Community

Nat Papovich, Fusium


Complexity

Amoebas at the start


Were not complex;

They tore themselves apart


And started sex.


-

Arthur Guiterman

Agenda


Basics


Benefits


Technical


Methodology


Community

We have a lot to cover!

Fusebox Basics:

Free


Fusebox will never be a for
-
purchase
system.


Just like the rest of ColdFusion, extras
cost.

1.
Custom Tags

2.
Example Applications

3.
Online Training

4.
Extensive Articles

Fusebox Basics:

File Organization


Fuses


Fusebox for files or templates


not Custom Tags


Naming conventions (covered in Technical)


Each fuse performs a discrete task *


Small file size makes debugging easier


Circuits


Mini
-
applications *


Directory
-
based


Aggregate similar functionality


Variables available across multiple files

Fusebox Basics:

File Organization

Fusebox Basics:

Fuseactions


Control the flow of the application


Traditional model of a controller file


MVC: Model
-
View
-
Controller in J2EE


main.c ?


A default fuseaction is set

Fusebox Basics:

Fuseactions

<cfswitch expression =

“#fusebox.fuseaction#”
>




<cfcase value=
“doSomething”
>



<cfinclude template=
“act_aFuse.cfm”
>


</cfcase>


….


<cfcase value=
“doSomethingElse”
>



<cfinclude template=
“dsp_anotherFuse.cfm”
>


</cfcase>


</cfswitch>

dsp_anotherFuse.cfm

act_aFuse.cfm

The fuseaction

The fuses

dsp_yetAnotherFuse.cfm

Fusebox Basics:

Architectural Decisions


With experience, you will be able to:


Lay out circuits


Nest circuits


Choose persistent variables


Create application settings

Fusebox Basics:

Sites Using Fusebox


AutoByTel.com


SuperBowl ad: massive (1900%?) growth


RoomsToGo.com


Largest furniture retailer online


Cluster of 10+ servers


eBags.com


First Fusebox implementation: 1997


Largest bag retailer online

Fusebox Basics:

When To Use


E
-
commerce sites


Easy to implement circuits


Intranets


Plug
-
n
-
play new applications


Web Applications


Massive size demands strict architecture

Fusebox Basics:

Terminology


Circuits


Fuseactions


Fuses


SES


Search Engine Safe URLs

http://www.mysite.com/index.cfm/fuseaction/user.login/id/14.htm

Moving On…


Fusebox Benefits

Fusebox Benefits:

Speed Of Development


Lower costs


First to market is the survivor

Russ Johnson and one co
-
worker built
www.csx.com full content management
system in 2 weeks from scratch, having
never written a Fusebox application
before.

Fusebox Benefits:

Ease Of Maintainability


Fusedocs


Documentation for initial creation AND
maintenance


Simplified, obvious application flow


Fuseactions


Component independence


Fuses


Circuits

Fusebox Benefits:

Community
-
Owned


Bug
-
free


Closer to Linux than Microsoft


Not bound to a company

Fusebox Benefits:

Reusability


Reuse generic components across
multiple applications


Reuse fuses and fuseactions across the
same application

Fusebox Benefits:

Extensible


Does not preclude Custom Tag use


Non
-
encrypted framework


But!! Changes to core introduce
compatibility issues


Fusebox Benefits:

Established Framework


Focus on the business requirements


Focus on how to make the customer
happy


Do not focus on how to keep it all
together


Do not focus on technical issues

Fusebox Benefits:

Fast Learning Curve


Intermediate developers can pick up
Fusebox in a day


By learning Fusebox alongside
ColdFusion, beginning developers can
learn right from the start

Fusebox Benefits:

The Anti
-
Benefits


Debugging myth


Tracking down variables


Separation of display
from action


Fewer lines per template


Overhead


Milliseconds penalty for
great gain


Scales to millions of hits
per day


Poorly architected code
does not scale



No application.cfm
use


<cfmodule> does not
call application.cfm
again


Commitment


All applications grow


Plan ahead now


Five files in a .zip

Moving On…


Technical Fusebox

Don’t forget that it’s free!

Technical Fusebox:

Airlines: The Old Way

Point
-
to
-
point routing

San Diego

Orlando

Technical Fusebox:

Airlines: The New Way

In ~1960, United opened the first hub, in Chicago.

Orlando

New York

Minneapolis

Seattle

San Diego

Technical Fusebox:

The Core File
(fbx_fusebox_CFxx.cfm)


Specific to each version of ColdFusion


ColdFusion 3.x not supported


UNIX, Linux versions available


Different versions mean faster execution


Available for other languages


PHP, JSP


Very Fast


<cfscript>ing

Technical Fusebox:

The Core File
(fbx_fusebox_CFxx.cfm)


No Custom Tags


Fast


V2: formURL2attributes.cfm now in
-
line


Copies all form and URL scoped variables to
attributes scope


Stable and frozen


Upgrades by the Standards Committee


Developer doesn’t need to understand


But it is well
-
commented and easy to follow


Latest core file always available from
Fusebox.org


Web service underway to check for
updates to core and download latest

Technical Fusebox:

The Core File
(fbx_fusebox_CFxx.cfm)


API (“fusebox” structure)


fusebox.isCustomTag: is this request coming from
cfmodule?


fusebox. isTargetCircuit: is this the target circuit for
the request or is it just a nested circuit?


fusebox. suppressLayout: should this request not
contain the “wrapper”?


fusebox. suppressErrors: yes during development,
no during production


…many more

Technical Fusebox:

The Core File
(fbx_fusebox_CFxx.cfm)

Technical Fusebox:

The Core File
(fbx_fusebox_CFxx.cfm)


A glimpse at the core

But not an actual stare

Technical Fusebox:

Other core files (fbx_file.cfm)


Default web server document


Usually index.cfm


Handles any pre
-
processing


Includes the core file
-

fbx_fusebox_CF50.cfm

Technical Fusebox:

Other core files (fbx_file.cfm)


fbx_circuits.cfm


Similar to J2EE’s JNDI concept


Provides mapping to directories via circuit
alias

“This circuit lives down this directory
chain.”

Technical Fusebox:

Other core files (fbx_file.cfm)


Root
-
level fbx_settings.cfm


Serves similar purpose as application.cfm


V2: app_globals.cfm deprecated by this file

Technical Fusebox:

Other core files (fbx_file.cfm)


Children fbx_settings.cfm


If acting as a standalone circuit, this file
must include the functionality of the root
fbx_settings.


All fbx_settings.cfm files in the directory
chain down to the target circuit get
included in the call.


Circuits tend not to nest more than ~4 deep

Technical Fusebox:

Other core files (fbx_file.cfm)


fbx_switch.cfm


Only the target circuit fbx_switch is run (not like in
V2)


Classic switch/case statement, switch on
#fuseaction#


Aim for less than 15 fuseactions per
fbx_switch.cfm


Try to have only simple CFML in the cases:

<cfinclude> <cfset> <cfif> <cflocation>

Technical Fusebox:

Other core files (fbx_file.cfm)


fbx_layouts.cfm


Does not do the actual displaying


only
chooses which display file to use


Allow Dreamweaver or other HTML
smarties to do their job outside the
Fusebox framework


Nesting layouts allows multiple fuseactions
in different circuits to be displayed on one
page

Technical Fusebox:

Other core files (fbx_file.cfm)


fbx_savecontent.cfm


Custom Tag version of <cfsavecontent> for
pre
-
CF5.0


V2: called cf_bodycontent by Steve Nelson

Technical Fusebox:

Fuse Prefixes


dsp_


Display template


Display only


Forms


Content


As little CFML as possible


Often has an accompanying act_ file


dsp_login.cfm, dsp_NewsHeadlines.cfm,
dsp_SearchResults.cfm

Technical Fusebox:

Fuse Prefixes


act_


Action template


No display


Contains anything not database or display


Form error checking and processing, back
-
end services,
scheduled tasks, cfmail, verity, etc


V2: inserts, updates, deletes


act_ValidateOnDomain.cfm,
act_PullNewsFromMoreover.cfm,
act_VeritySearch.cfm


Technical Fusebox:

Fuse Prefixes


qry_


Query template


No display


All database interaction


Update, insert, delete, select, etc


<cfquery> <cfstoredproc>


V2: only for selects


Aim for reusability


qry_ValidateUser.cfm, qry_CreateNewsItem.cfm,
qry_GetUserPreferences.cfm



Technical Fusebox:

Fuse Prefixes


url_


Optional file to contain <cflocation> logic


Makes for cleaner fbx_switch.cfm


If not used, <cflocation>s occur in the qry_
or act_ files


No display


url_Login.cfm, url_DeletedNewsItem.cfm,
url_VerityIndexed.cfm

Technical Fusebox:

Fuse Prefixes


app_


Application template


No display


V2: Deprecated in favor of fbx_settings.cfm and
act_files.


app_server.cfm


Server
-
specific like machine name, etc


app_secure.cfm


V2: Formerly app_locals.cfm and app_globals.cfm

Technical Fusebox:

Exit Fuseactions (XFAs)


No hard
-
coded exit points


Maximum reuse of code


In structure “xfa.”


Set XFAs to match exit points in fuses like
links, form actions, <cflocation>s


Extracts fuses from the application


Fuses act as “black box” unaware of the big
picture


Always in the form “circuit.fuseaction”

Technical Fusebox:

Fusedocs


Defines all ins and outs for a fuse


Paradigm shift for some


Write code from the documentation


Do not write the documentation from the
code


Just like blueprints for a house


Accompanies every fuse


In comments <!
---

---
> at the top

Technical Fusebox:

Fusedocs, cont.


Programming Definition Language (PDL)


XML based


DTD available from fusebox.org


Don’t be scared of XML


VTML tag helpers available


With CF Studio integrated help


Due to XML structure, allows tools to read
Fusedocs and validate code or even write
code for you

Technical Fusebox:

Test Harnesses


Automatically created from completed
Fusedocs using XML parsing and
Fusedoc reading tools


Unit test each fuse


Similar to Extreme Programming?


One harness for each fuse to allow
simple testing

Moving On…


Fusebox Methodology: FLiP

FLiP:

Building A House


If the architect quits


If the contractor screws up


If all the carpenters get fired


If you need an addition



Home building has a long history


Application development does not

FLiP:

Initial Requirements Gathering


No system for this


do as normal


Sales meeting to get rough ideas down

FLiP:

Wireframing


First serious requirements gathering


A client knows what they want after they see it


Show them a web site without spending any
time creating it


Extremely fast


Gets client buy
-
in early


Resist the urge to code


Fusium’s Rebar

FLiP:

Prototyping


HTML mockups


100% identical to the finished
application


Resist the urge to code

FLiP:

DevNotes


Need to enable
customer
communication of
the design


Facilitates a client
approval process


Threaded
discussion about
each page


“Can I get this in
cornflower blue?”

FLiP:

Prototype Lockdown


Site is complete in HTML


Example credit card processing:

1.
Approval

2.
Failure message 1

3.
Failure message 2

4.
Bad credit card number

FLiP
:

Architecting


Using mind mapping software:


Identify each circuit


Identify each fuseaction


Identify each fuse


Determine exit points


Generate skeleton code


Fuseminder.cfm

FLiP:

Fusedoc’ing


Copy prototype html page into display fuses


Write black
-
box fusedocs


Create test harness for each fuse to validate


Act as a test routine


Use harness.cfm


QuerySims


Coder should not need to know anything else
about the application

FLiP:

Coding


Distribution of effort


Solve the Mythical Man Month?


SecretAgents.com


Coding is now a trivial matter


Distribution of database required for
qry_ fuses

FLiP:

Assembly


Architect gathers completed fuses


Ensure fuse meets requirements of
Fusedoc


Drop into correct directories


Verify exit points


No need to open up completed fuses

FLiP:

Testing


No Fusebox
-
specific system for this


Use wireframe and prototype as guide

Moving On…

Fusebox Community


Fusebox Community:

Best Practices


Security model


V2: app_secure.cfm


Hal Helms: cf_secure


QuerySims


cf_reuseForm


Use one .cfm file for insert and edit form


cf_returnFuseaction

Fusebox Community:

Community Support


Since the beginning, Fusebox is open to
change and improvements


Developer
-
created Custom Tags


Contributed example applications


Synthis.com
-

Adalon code generation

Fusebox Community:

Email Lists


fusebox@topica.com


Beginners welcome


Heavily patrolled by active members


FLiP@topica.com


FLiP methodology only


steer
-
fb@topica.com



For Fusebox future

Fusebox Community:

Fusebox.org


Whitepapers


Latest core files


Example applications

Fusebox Community:

Other Sites


www.halhelms.com


QuerySim, tutorials, etc


www.fusium.com


Rebar wireframe editor, FEX core files, developer
tools, example applications


www.secretagents.com


Online tutorials, fusecoders


www.bombusbee.com


PHP Fusebox

Fusebox Community:

Books And Articles


Papovich and Peters, 2002


Fusebox Pulse newsletter (fusium.com)


Hal Helms writes monthly articles in
CFDJ

Fusebox Community:

Fusebox Conference


In conjunction with Macromedia
DevCon, October in Orlando


~20 speakers


Jeremy Allaire keynoted last year