Re: wxWin vs. AbiSource framework

Leonard Rosenthol (leonardr@lazerware.com)
Sun, 7 Nov 1999 15:44:56 -0500


At 8:15 PM -0600 11/6/99, Jeff Hostetler wrote:
>[1] Native Look-and-Feel User Experience
>[2] Insulating Programmers from Platform-/GUI-specific Coding
>[3] Separating GUI-logic/code from Business-logic/code
>[4] Feature/Bug consistency between platforms
>
>Paul makes an excellent (but subtle (sorry Paul)) suggestion/challenge that
>to-date the frameworks that supply [2] generally fail at [1].

Actually, you will find that most/all frameworks used by
commercial software developers achieve both 1 and 2 - and in fact,
those are the two most important goals.

For example, in a former life, I used to maintain one of the
frameworks used by Adobe Systems for their software. As such, I was
one of the only people on the team (and we're talking multiple teams
of 10+ people per team) who ever touched platform-centric code. All
of the platform-centricity, from file I/O and memory management all
the way up to windows, dialogs & widgets had been abstracted out.
And if you look at any Adobe product, it looks and feels like a
native application, because it is!

>The significance of item [3] should not be overlooked -- whenever possible,
>all business-logic should be in XP code

No argument there!

>My goals in building abi framework, were [1], [4], [3], and [2], and in that
>order. That is, we were able to minimize platform code as a side-effect of
>[3] and [4], but not eliminate it.

IMO, the problem with the current abisource framework is that
it doesn't go far enough in the XP abstraction, in terms of the
GUI-related issues. You now have enough experience and example
dialogs & widgets to sit down and design higher level "wrapper"
classes for all this stuff. Do it NOW before you get further and
further down the platform-centric path...

>Part of this is an artifact of the naming scheme we chose for the class
>hierarchies. We put the platform name in the class -- this gives us unique
>function names in LXR and makes it easy to see the line between platform
>and XP code, but does force an explicit branch to platform code. For example,
>we have an abstract GR_Graphics class, from which the GR_Win32Graphics and
>GR_UnixGraphics classes are derrived. All the methods are virtual, but
>because of the naming, platform code has to call the constructor even though
>all the drawing happens in XP code using the base class definition and the
>virtual methods.

The way to solve this is to use a higher level object
(GR_Graphics) which knows which platforms it's been compiled for and
"shims" to the appropriate platform-centric class. Using inlines
for many/most of the methods will also help avoid speed issues with
the extra level of indirection.

>Often you'll see nearly identical blocks of platform code,
>with platform class names being the only difference.

And that's just (IMO) silly! It's easy to fix - so do it!

Leonard

----------------------------------------------------------------------------
You've got a SmartFriend in Pennsylvania
----------------------------------------------------------------------------
Leonard Rosenthol Internet: leonardr@lazerware.com
America Online: MACgician
Web Site: <http://www.lazerware.com/>
FTP Site: <ftp://ftp.lazerware.com/>
PGP Fingerprint: C76E 0497 C459 182D 0C6B AB6B CA10 B4DF 8067 5E65



This archive was generated by hypermail 1.03b2.