650 likes | 664 Views
Discover the Fusebox framework and methodology with basics, benefits, technical insights, and community involvement. Learn about file organization, fuseactions, architectural decisions, terminology, benefits like speed of development, maintainability, community ownership, reusability, and more.
E N D
Fusebox 3.0The Framework, The Methodology, The CommunityNat 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. • Custom Tags • Example Applications • Online Training • 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: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
dsp_anotherFuse.cfm act_aFuse.cfm Fusebox Basics:Fuseactions The fuseaction <cfswitch expression =“#fusebox.fuseaction#”> <cfcase value=“doSomething”> <cfinclude template=“act_aFuse.cfm”> </cfcase> …. <cfcase value=“doSomethingElse”> <cfinclude template=“dsp_anotherFuse.cfm”> </cfcase> </cfswitch> dsp_yetAnotherFuse.cfm The fuses
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
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
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 Fusebox Benefits:The Anti-Benefits
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 Minneapolis New York Seattle Chicago San Diego Orlando In ~1960, United opened the first hub, in Chicago.
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
Technical Fusebox:The Core File (fbx_fusebox_CFxx.cfm) • 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) • 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
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