Lawerence,

Welcome to the wonderful field of software development.  And the reason we
get paid to do this stuff.

There's nothing you can do about this problem other than modify your
program, create upgrade paths to migrate data, and put versioning in your
product to help aid in this.  This is state of the art advice here, and
everyone does it.  That's the short answer.

The longer answer involves why you can't build a system that modifies itself
and runtime to accommodate new data you weren't anticipating (without some
very real trade offs).  Let's say you did have a VO that could dynamically
adjust itself to the database.  Great now what is your UI going to do with
it?  Or what would the rest of the program do with it?  When it was built it
had no knowledge of this format.  What if you had a first name/last name in
separate fields then you combined them into one field.  But, your UI is
still asking for them separately.  What then?  Does that mean your UI can
adjust itself too?  The short answer there is nope.  It can't.  And the
developer can't write code to anticipate these types of changes in a general
fashion so that any potential change could take shape.

What this means is whenever someone wants to change the way the software
works you need to treat that as a new version of the product.  Create an
upgrade strategy to upgrade the old data to the new format, upgrade any
clients you might have (with Flex and AIR that's pretty easy as deploying a
new SWF to the server, and all clients will get it).  And, now you're off an
running with the new version.

If you have one particular area that requires a lot of changes then I agree
with Cameron sounds like a requirements issue.  You might be able to come up
with a design that can modify itself or be dynamic in limited situations.
 For example, the use of metadata in a general sense, can help alleviate
customers that require custom data fields.  So generalizing metadata on
objects can help with this, but you'll find it's not easy to code special
behavior around a generalized structure like metadata.  Metadata might be
something as easy as a series of Strings keys to String values.  And the
user can populate these string->string mappings through some XML.  However,
when you start needing key X to be a number, and key Y to be a date it
starts getting very tricky.  Next you'll find yourself building a typing
system that describes which properties are number types and which properties
are dates, etc.  You can start to see how going generalized has a very
serious overhead required.  As the problem gets more complicated more
generalized structures have to be introduced to describe data and describe
behavior of data.  Every time you do this you edge yourself closer and
closer to something that requires the level of programming your generic
system.

Other ideas here are the use of Plugins.  Small snippets that can be added
by the user to augment the system in some way. Plugins give you the control
you might need, but they come with a big cost.  You have to program them,
and develop an API they can use to interact with the system.  And, you can't
avoid the versioning problem here either.  A plugin written to work with the
older system might be broken by changes you make to the new system.  It's
not impossible to keep things working, but it's more work and more
responsibility you as the software developer have to maintain.

Generalized programming like this is powerful and flexible, but it requires
giving up some control (whether that be behavior or functionality in the
core system) and possibly loads maintenance work to maintain systems like
these.  In the end sometimes it's easier to be specific than to be ever
flexible and generalized.  You have to make trade offs between them to make
the system usable and flexible to fit the user's needs.

Charlie

On Tue, Mar 2, 2010 at 4:12 PM, Laurence MacNeill <[email protected]>wrote:

> Is there anyone in this group who's an expert on both Flex3.5a and
> ColdFusion 9 that I could "buy" for a few hours?
>
> I'm extremely confused on this particular problem I'm having, and I just
> can't find the solution on the web.  At least, not a solution I can
> understand...  So I'd be willing to pay someone for their expertise...  But
> it's gotta be true expertise - not a situation like "sure I'll take your
> money and give you what help I can..."  I need guarantees here...  The
> problem gets solved or you don't get paid -- that kind of thing.
>
> So if you're truly an expert in Flex 3.5a and ColdFusion 9 (both, not one
> or the other), then I really want to negotiate a per-hour rate with you for
> some one-on-one help...
>
> Or, perhaps someone knows of a solution to this that can be found in the
> (literally) millions of flex blog-posts on the Web...  And I'm just not
> searching correctly for it...
>
> The problem I'm having is that I've written my program with Value Objects,
> in order to easily pass data between my Flex App and the ColdFusion
> back-end.  (And to pass data between the various modules within the Flex app
> as well, of course.)
>
> This works great.  Until a client says "Hey, we want to store THIS instead
> of THAT data..."  Then the clent's database has to be modified, the .AS and
> .CFC files that define the structure of the VOs have to be modified, all the
> references to the VOs in the code have to be modified, and the entire
> program has to be re-compiled into a new .SWF file.  Then, of course, we
> have to be very careful to use the correct version of the program on that
> client's data, and no other clients' data...  We wind up with 500 versions
> of the program floating around.  VERY bad solution...
>
> From reading a few blog posts I can find, it does seem like there is a way
> to create dynamic VOs based on the fields in the database.  At least in
> Flex, it seems possible.  I haven't found a way to do it with CF...  I've
> only found a way to do it with something called LINQ, and that apparently
> only works when you're using .NET 3.5 as your back-end?
>
> So all of this raises many questions for me:
>
> 1) How do I tell my Value Object what fields we've added to or changed in
> the database without re-writing the entire VO (in both the .AS and .CFC
> files) and re-compiling my program?  In other words, I need a dynamic VO
> that changes automatically with the database.
>
> 2) If there is a way to dynamically create a VO in Flex (and from a few
> blog posts I've seen, it seems there is a way), how do I tell CF9 what the
> structure of that dynamically-created VO is?
>
> 3) How do I reference the dynamically-created fields in my Flex program?
>  Right now, for example, I can define a variable called attendeeInfo as type
> attendeeInfoVO, and then reference things like attendeeInfo.first_name,
> attendeeInfo.last_name, etc...  How do I reference a field programmatcially
> when I don't know what it's going to be called beforehand?
>
> 4) How do I make my program display/modify those dynamically-created
> fields?  Right now, using the attendeeInfo example above, I can create a
> TextInput with an id="firstNameInput" and just say firstNameInput.text =
> "{attendeeInfo.first_name}".  That won't work when I have no clue how many
> dynamically-created fields there are, or even what kind of data they're
> going to store...  How do I deal with this?
>
> 5) Is there something other than VOs that would fit this situation better?
>  Am I limiting myself by using VOs in the first place?  Is it just plain
> impossible to do this with VOs?  And if so, what are my alternatives?  I
> need a structured object that can be passed around with a single reference
> -- I absolutely DO NOT want to pass a bunch of references to a bunch of
> different variables -- that's why I used VOs from the very beginning.
>
> I hope by these questions, you can see how confused I am...  And why I'm
> willing to pay someone who's an expert in both Flex 3.5a and ColdFusion 9
> for their time in helping me understand what I can do here.  The entire
> project rests on me being able to do this -- the way it's done currently is
> just not acceptable (having literally hundreds of different versions of the
> program floating around is a very bad way to handle this...  There MUST be a
> better way...  I'm just not understanding it, and am willing to pay to gain
> that knowledge.)
>
> Thanks a bunch for any suggestions you might give me.  And I'm totally
> serious about paying an expert for one-on-one help here...  Already talked
> to my boss and got some money cleared for it...  So if that's necessary,
> we're prepared for it.
>
> (Oh, I've also posted this on Adobe Forums and FlexCoders Yahoo group...
>  So please don't tell me to ask there.  It's already been done, with no good
> responses (yet)...  <GRIN>)
>
> Thanks,
> Laurence MacNeill
> Mableton, Georgia, USA
>
>
>
> -------------------------------------------------------------
> To unsubscribe from this list, simply email the list with unsubscribe in
> the subject line
>
> For more info, see http://www.affug.com
> Archive @ http://www.mail-archive.com/discussion%40affug.com/
> List hosted by http://www.fusionlink.com
> -------------------------------------------------------------
>
>
>

Reply via email to