A PFC Evaluation is provided in two parts:
As discussed in the PFC Introduction, PFC provides many useful services, it is built with a modern service-based architecture and it has extension libraries that make it possible to do virtually customization/extension that is needed.
PowerSoft did not provide a comprehensive framework or class library until PowerBuilder 5. As early of PowerBuilder 2, commercial PowerBuilder frameworks were available. By waiting and watching commercial frameworks develop, PFC seems to have chosen many of the best architectural features and services that were available in the commercial frameworks.
With PFC in place and backed by PowerSoft, few non-PFC compatible frameworks are expected to survive. Aside from the fact that PFC is a very good framework, it has the advantage of early insight into coming PowerBuilder releases. With these insights, PFC will always be in a good position to build suitable services that take advantage of coming features. While many commercial PowerBuilder frameworks seem to be withdrawing in the face of PFC, the long-term viability of PFC seems assured. PFC is supplied and supported by PowerSoft and the price is right --- it comes bundled with the PowerBuilder's Enterprise Edition.
Now that PFC is available and has quickly become established, the arena for frameworks has shifted. Most commercial frameworks now available work with PFC and seek to extend on PFC's capabilities.
Prior to PowerBuilder 6 and PFC 6, PFC was not very well suited to multi-tier development -- much of the Window and DataWindow functionality seemed to assume two-tier development. Mutli-tier development was not easily accomodated. Fortunately, with the introduction of improved middle-tier capabilities in PowerBuilder 6 (notably DataWindow synchronization) and Self-Updating Objects in PFC 6, PFC is now worth serious consideration for multi-tier applications too.
Does that mean PFC is a near perfect framework that contains nearly all the ancestor functionality you will need? No -- no software product ever does. You can read an evaluation of selected PFC Services on this site. Also, you can read a set of suggested PFC extensions that a typical development project might consider.
All in all, PFC is worth very serious consideration for a PowerBuilder project.
PFC vs. Internal Framework
A common dilemma for organizations that have been using PowerBuilder for a while is: would it be better to continue to invest in and use their "home grown" PowerBuilder framework or would it be wise to start to migrate to PFC. The answer will vary depending on the internal framework in question. Some factors to consider are given below.
|Framework Expertise||Current IT staff probably know/understand the current framework better. However, with the frequent movement of IT staff, you may lose that expertise.||With PFC's popularity, you can readily find new staff or consultants with existing PFC expertise (and new ideas).|
|Reference material and Support||All internal.||PFC 6 is now well documented and it includes many code samples. PowerSoft will provide paid technical support for PFC. There are now PFC books, a PFC NewsGroup, PFC mailing lists as well as many PFC websites.|
|Training||Unless documentation is extensive, one of the framework architects must be freed up to provide training. If key staff have left the organization, there may be no one left to provide training.||External training is available. It can be used to get both existing staff and new staff up to speed.|
|Quality||Depends. There may be many scenarios that have not yet been fully exercised.||Tested by PowerSoft and by a growing community of PFC sites. Most of the serious problems are fixed in regular maintenance releases.|
|PowerBuilder upgrades (e.g. PB5 to PB6)||May involve considerable internal effort, especially where obsolete functions / concepts are involved.||PowerSoft upgrades PFC itself while websites (e.g. PFC Guide) offer advice on how to upgrade your own PFC extension layer.|
|Enhancements||All internal.||PowerSoft regularly enhances PFC. Also, the PFC development team has much earlier insight into coming releases than the industry at large. This lets them deliver PFC services that complement new PowerBuilder features as soon as a new PowerBuilder version becomes available.|
|Consistency between applications||Existing applications likely use the internal framework, providing consistency.||With a move to PFC, there will be a period where some applications use PFC while others still use the Internal Framework. The transition period could involve confusion for users.|
|Unique Requirements||If the organization has unique requirements that have been addressed by their Internal Framework, a move to PFC might provide a poorer "fit".||As long as unique requirements don't conflict with PFC, it should be possible to implement them in the PFC extension layer (or a "corporate" layer)|
|Third Party Tools||If it is even possible, making a third party tool work with your own framework will likely entail considerable costs.||Third party tools that both model applications for PFC and provide PFC extensions are available.|
Based on usage of specific PFC Services in PFC version 5, individual PFC Services have been assigned grades, as described below. In assigning a grade, the author has tried to take into account all the capabilities provided by the service, however, some services were used in more depth than others.
- A: work very well (big improvement, time saving)
- B: work well
- C: facility OK
- D: barely usable
- E: dangerous, useless
Note: The general release version of PFC 6.5 has been reviewed and it is included in this review. Many of the fundamental weaknesses in PFC 5 were partly or fully addressed in PFC 6/6.5. In addition, PFC 6 introduced several new useful services.
General Areas Evaluated:
|Error Service||- good place to consolidate messages
- nice ability: handles both text file source and DB source
- provides ability to Email and log messages, as well
|- no verification that data is loaded from
- in PFC5 & PFC6, you had to build your own facility to maintain messages in DB (search, update and print facility)
- PFC7 may provide a primitive message maintenance facility.
|Logon Service||- does provide the basic structure needed to logon. PFC6 includes a definable number of retries.||- Poor messages: all DB connection errors
result in the message is "invalid password". It shuts down the application after
last bad logon attempt, with no message at all.
- requires tweaks to work with Oracle
- doesn't use Windows colour scheme
|MicroHelp Service||- easy to use (once understood) and works well||- would be nice to have facility to display MicroHelp on pre-designated MLE or SLE on response windows||B+|
|File Services||- saves messy coding||- heard and ran into bugs with a few services
- missing some basic services (e.g. Find File on a drive)
|String Services||- several handy functions to search and manipulate strings||- very little support for arrays (e.g. sort, find, replace)||B|
|Numerical Services||- helpful for bitwise manipulation functions||- the functions are almost exclusively
techincally focussed -- with little to help with business processing.
- very little support for arrays (e.g. sort, find, replace, sum)
- nothing to count decimal places, etc.
|General||- good structure with different classes of
window and intervening w_master in PFE layer
- the addition of self updating objects and logical units of work in PFC6 greatly improve control over saving.
|- lacks built-in capability to handle logical
parent/child window relationships (i.e. close parent causes children to close)
- lacks capability to check context of windows so that a window class with a specific context (e.g. Cust 123) can only be opened once
|- nice series of events to work with (preopen, open, postopen)||B|
|-several good ideas and logic (going thru control array, suppressing messages)||- since no hooks in logic, shortcomings
require complete override
- before PFC 6.5, it did not set focus to the window before prompting for save. PFC 6.5 incorporated the idea behind my tip.
|- good default logic to process all updateable
DW's (accepttext, validate and save).
- PFC6 also provides a valuable alternative which allows each object on the window to specify its own validation, pre-save, save and post-save logic (so called "self updating objects")
|- should recalculate list of dirty DW's after
descendant pre-update logic
|- PFC6 has started to provide all the error details from DBError to this event (a significant concern in PFC 5).||- provides no simple hooks for descendant to handle some types of error while leaving others for the ancestor||C|
|-Status Bar||- nice options to choose from but ...||- a few ongoing bugs||B|
|PFC Service||Strengths||Drawbacks||PFC Grade|
|Main menu||- lots of good functionality in here
- structure fairly suitable for most projects
|- so much content in main menu that it leaves
- edit cut/copy/paste not enabled, disabled properly like in right-mouse (i.e. based on contents of clipboard)
- Arrange window logic is buggy
|Message Router||- the message router is very useful since it goes through a sequence of objects, instead of just sending the messsage (i.e. menu action) to the parent window.||A|
|Right mouse menu||- good enabling, disabling of menu items
- easy to control and extend
|- poor placement of right mouse menu (it depends on where right-mouse button is released not where it is pressed!)||B|
|PFC Service||Strengths||Drawbacks||PFC Grade|
|General||- there are a number of useful services that help support DW processing||- when indicating errors, DataWindows are not
aware of tab objects (e.g. DB Error and required column errors set focus to the DW but
fail to set focus to the tabpage)
- little (if any) thought has been given to filter buffer handling.
- a large number of standard supporting DW functions could be provided (40 such functions had to be developed to suppport one medium-sized project)
- little ItemError logic is provided (PFC could handle a number of common ItemError issues -- see sample code)
|Basic DW Services||- includes a few useful functions (e.g. populate DDDW's)||- as indicated under the General DW comments, many more standard functions should be provided||C|
|DB Error logic||- it provides no hooks for descendant handling
- filter buffer rows are not de-filtered (i.e. shown to the user) and there is no hook for the descendant to do so (this means that an override is necessary)
|Sort Service||- nice options for using both column header
and dialog box
- solid code
|- have to be careful that DW column header name corresponds to DW column with (with "_t" suffix)||B+|
|Row Selection Service||- reasonable options for single/multi-row select||- unlike Windows Explorer, doesn't support
shift-up/down arrow to do multi-row select of adjacent items
- no "post-clicked" logic to help descendant react to changes in row selection
|Reporting Service||- apparently has a number of useful functions to help support printing||- with the fundamental flaws in PreparePrint and RestorePrint (does not handle color or tab expressions), confidence in this service is not inspired||C-|
|DDDW Search Service||- works well||- it seems awkward to have to code three events to turn it on (perhaps this is necessary for performance)||A|
|Required Column Service||- it tries to overcome the default
PowerBuilder Required column weakness where the user can't leave a column without
providing a value
- easy to use for DW's with simple logic (i.e. little or no logic in ItemChanged or RowFocusChanged)
|- if you blank out a value in a required
column (which is allowable until save), there are very nasty side-effects. No ItemChanged
event is fired in PFC5 and RowFocusChanged becomes unreliable. This can play havoc with
otherwise predictable logic.
- the service is not usable for edit mask columns
-you cannot tell the service to treat a string column with all blanks (or a numeric columns with zero) as "empty"
- there are no hooks to customize the error message for certain columns (although PFC 6.5 now lets you customize the column name within its message)
- it doesn't provide an option to check rows in the filter buffer
** see a design for an alternate Required Column Service
|D (side effects)|
|Linkage Service||- complex, poorly documented and very buggy in
- after wasting too much time on the early version, have not revisited this service in PFC6
The unfortunate addendum to add to this discussion is that Sybase is no longer actively enhancing PFC (after PB 6). The minimal changes in PFC 7 seem to prove this point. Sybase is limiting its effort on PFC to bug fixes and minimal updates but it is apparently no longer investing in the class library. I understand that the company is planning to focus PowerBuilder at the middle tier (with web tools like PowerJ at the front-end). PFC is mainly oriented to front-end GUI development and is therefore no longer considered "strategic". To those of us who were very impressed with PFC 5 when it was released and again impressed with the improvements made in PFC 6, this is sad news.