Reusability: Importing existing stacks

Chipp Walters chipp at chipp.com
Tue Nov 23 07:07:05 EST 2004


Gordon wrote:

 > Sorry to keep harping on the reusability thing, but I
 > still have a question or two on reusing stacks in
 > other applications ...

Hi Gordon,

This is of course something everyone thinks of doing right away when 
starting with RR-- how to write 're-usable' code which can then be 
inserted into other stacks.

There are a number of considerations to consider for this to work.

I'll talk about this in 3 parts: SplashStack, Plugins, and Libraries.

1. SplashStack

You may find it convenient, as many of us already do, to create a basic 
'splash stack' which represents the engine and minimum code necessary to 
  load the 'other' business logic 'Main' stack. There are quite a few 
very good reasons to consider this approach:

1.1 Once you build it as a standalone, you rarely have to edit it. You 
then spend most of your time editing the Main stack, Libraries and 
Plugins, and updating them.

1.2 You can use the splash stack to actually update the Main stack if 
you like. Just have it check a URL for the latest version of the stack.

1.3. Because the splash stack is the executable (and we know we can't 
write to executables), the business logic 'Main' stack can be 'saved' 
with data intact-- though personally I *NEVER* save a business logic or 
Main GUI stack in runtime. I rather use external files or invisible 
'data' stacks to store data.

1.4 Your splash stack can do things like check for an internet 
connection, pass on environment variables, etc.. to your 'Main' stack.

Some notes about designing you Splash stack.

1.5 Consider keeping it simple as possible. Do NOT put your basic 
libraries in it as you will then need to keep updating your standalone 
everytime you want to update your library.

1.6 Add a nice 'About' screen and image to it, and show the screen when 
launching. After launching, and opening the 'main' stack, delete the 
Splash stack from memory. In that way you can be sure no handlers are 
running or can be called. The splash stack should have NO OTHER 
relationship with the main stack other than to launch it. It keeps it 
simple this way.

1.7 Have the SplashStack launch only 1 other 'main' stack, not a bunch 
of them. If your main app has 'other' stacks (I call 'plugins') then 
launch them from the main stack.

2. Plugins

Plugins as referred to here are not meant to be 'RunRev' plugins, but 
rather plugins to the 'Main' stack. These are other GUI type stacks 
which have a 'segmented' function. An Address stack could be such a 
stack. The main stack can launch these stacks with a click of the button 
and the new stack is opened. Users interface directly with these stacks.

Plugins are a great way to add functionality and deal with the ever 
growing complexity of large projects. See "The Hemingway Approach" for 
more information and some examples of how plugins may be used:

http://www.altuit.com/webs/altuit2/RunRevCaseStudies/Hemingway.htm

3. Libraries

Libraries are common code routines you want to make available to your 
projects. Typically, they have no GUI or interface, and can be called 
from any of the stacks in your application. I generally have several 
libraries in my projects. For instance, I wrote a library called 
"altInternetLib" (I preface all my libraries with 'alt'-- as Scott Rossi 
seems to prefer it that way). altInteretLib has all my routines for 
getting data to and from any internet server. It deals with proxy 
servers, etc.. In this way, anytime I need to access the internet, I can 
call a function like:

put altPost("getList.asp","listName=friends&MaxRows=6") into tData

and it will take care of all of the error handling, domain management 
etc.. for the request.

Libraries are very powerful, and sometime do have a GUI. For instance, I 
have a "Registration Library" stack which I can use to 'time-limit' 
demos and prompt users for purchase.

I hope this helps.

best,

Chipp


More information about the use-livecode mailing list