Fusebox Development Methodology www fusebox org Sicherungskasten 3
Fusebox Development Methodology : www. fusebox. org Sicherungskasten 3. 0 (Fusebox 3. 0) Michael Smith, Tera. Tech Inc MDCFUG michael@teratech. com Sandra Clark, Shayna Productions LACFUG slclark@shayna. com More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org Intro Who am I? • Michael Smith • President of Tera. Tech, Inc Rockville MD USA – http: //www. teratech. com/ – tt. Web. Report. Server, CFXGraphicserver • MDCFUG, CFUNK 2, 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 FB 2 to FB 3 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/fb 3_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_Check. Bags. cfm”> <cfinclude template="dsp_Take. Off. cfm"> </cfcase> <cfcase value=“Chicago”> <cfinclude template=“act_Check. Bags. cfm”> <cfinclude template=“dsp_Shuttle. Express. cfm”> </cfcase> </cfswitch> The fusebox More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org Including a fuse The fuseaction act_a. Fuse. cfm “do. Something” <cfswitch expression = “#attributes. fuseaction#”> <cfcase value=“do. Something”> <cfinclude template=“act_a. Fuse. cfm”> </cfcase> …. <cfcase value=“do. Something. Else”> <cfinclude template=“dsp_another. Fuse. cfm”> </cfcase> </cfswitch> The fusebox with a lot of fuseactions More on Fusebox at www. halhelms. com dsp_another. Fuse. cfm dsp_yet. Another. Fuse. 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 + 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 FB 3 • 20 October 2001 at 2 nd Fusebox Conference, Orlando. Keynoted by Jeremy Allaire, Hal Helms • Two day conference planned for next year, weekend preceeding Dev. Con 2002 • Big change from FB 2 • 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. add. Item – Users. login – Scheduler. request. Meeting 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=“validate. Login”> <cfset XFA. success = “Home. main”> <cfset XFA. failure = “Login. bad. Login”> <cfinclude template=“qry_find. User. cfm”> <cfinclude template=“act_find. User. 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_Fusebox 30_CF 50. 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_user. Info. 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_user. Info. cfm---> <form action=“index. cfm? fuseaction=Users. add. Us er” method=“post”>. . . More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org Transitioning from Fusebox to Fusebox 3 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 FB 2 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 FB 2 index. cfm… <cfinclude template="app_locals. cfm"> App_Locals. cfm fbx_settings. cfm (My. Globals. 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 FB 2 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=“test. Layout. cfm"> Let’s take a look at a layout file… More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org Typical FB 2 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 FB 2 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 FB 2 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 FB 2 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 FB 2 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_fusebox 30_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_Fusebox 30_CFXX. cfm • Contains the “guts” of fusebox. • Combines several FB 2 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 FB 2 to FB 3 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 FB 3 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 Fb 2 to Fb 3 • 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 FB 3 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_Fusebox 3 XX_CF 50. cfm FBX_Fusebox 3 XX_CF 45. cfm FBX_Fusebox 3 XX_CF 40. 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 my. Globals. 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. layout. Dir and Fusebox. layout. File • 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 CF 5 More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org FBX_Fusebox 3 XX_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 FB 2 custom tags did – – CF_bodycontent CF_form. Url 2 Attributes CF_nesting Etc… • Exposes public API variables More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org Public API variables • • Fusebox. is. Custom. Tag Fusebox. is. Home. Circuit Fusebox. is. Target. Circuit Fusebox. fuseaction Fusebox. circuit Fusebox. home. Circuit Fusebox. target. Circuit Fusebox. this. Circuit More on Fusebox at www. halhelms. com
Fusebox Development Methodology : www. fusebox. org Public API variables (cont…) • • • Fusebox. this. Layout. File Fusebox. this. Layout. Dir Fusebox. Current. Path Fusebox. Root. Path Fusebox. layout Fusebox. Supress. Errors 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? michael@teratech. com Fusebox book Fusebox classes – in Rockville and onsite More on Fusebox at www. halhelms. com
- Slides: 64