in
Forums
Blogs
DevExpress.com
Client Center
Support Center
DevExpress Channel

Gary's Blog

XAF, XPO and the Squeaky Wheel

I love my granny, as all of us who are fortunate enough still to have one alive do I’m sure. My granny hails from Highland Perthshire and is, as we say in Scotland, of farming stock; that is to say that, before retiring, she worked a farm, as her forebearers before her did. This means, amongst other things, that she has a wealth of homespun advise, neatly packaged up into handy little sayings, each one perfect for a particular set of circumstances. For example

“Oh, look at the time and there’s no’ a carrot in the pot!”

Meaning that the day is slipping away and it looks like I might not get through all the tasks I had allocated to do today, and

“Behave yersel’ else I’ll come in aboot yer wa’s wi a tarry stick”

Which means if you do not moderate your bahaviour I’ll beat you about the ribs with the stick I use to stir the molasses for the cattle feed. However, one of my favourites, and one which is somewhat applicable to the situation I now find myself in, is

“It’s the squeaky wheel that gets the oil”

Meaning it’s the thing (or person) that makes the most noise (or complains loudest) that gets dealt with fastest. I say it is somewhat applicable to the situation that I now find myself in because, whilst taking my habitual morning “stroll” through our forums, I came across a post, in which the writer was praising Mark’s recent set of posts, showing how to write a plugin using DXCore, and wondering aloud why the XAF team couldn’t be more like Mark, and produce such real world examples.

Of course, if the writer had appreciated that DXCore and XAF/XPO cannot be compared like for like, he would have been a long way to answering his own question. You see, DXCore is an enabling technology facilitating the creation of a certain type of plugin, it does one thing, and it does it very well and so writing a real world example is easy, as each user’s view of the “world” is the same.

XAF however, is an application framework, allowing a developer to create winform or webform (or both) applications; it is strategic software that lays out the architectural steps for a developer, the tactical code that the developer then adds to that base, to form the solution to his business problem, is utterly dependent upon a myriad of things:- the industry, the sector of the industry, his company’s view of their market place, financial constraints on his company, financial constraints on his customers, etc, etc, etc; the list goes on and on.

The point being that there is not one “real world” from which to construct a “real world” example, instead the term takes its definition dependent upon the context of the individual developer. Take me as an example, before joining DevExpress I worked, for 18 years, as a programmer and architect in a number of industries including: Banking, Utilities, FMCG, Pharmaceuticals and Local Government. I can tell you that if you took an application from each of those industries and compared them, they would have little in common. In fact you would have to distil them down to their architectural parts (object persistence, reporting, etc.) before you would find much similarity. So any “real world” example, if it were to be of use to all of our customers equally, can only contain examples of how to use these architectural parts (or product features if you will). It’s no coincidence then, that our MainDemo application demonstrates these product features in a somewhat isolated way, it has to be that way to be of use to our customers as a whole. Again, it is no accident that our documentation takes the same approach of explaining the product features in this way.

But the “squeaky wheel” says “it’s hard to find information in your documentation”, so I begin a series of cookbook style posts that state a problem, in very simple terms, and then show the solution and a discussion of that solution. The “squeaky wheel” says “these posts are too simplistic” so I suggest a more advanced series, still in the cookbook style, to make it easy to find, called Black Belt XAF and I ask for topic suggestions. The majority of suggestions I receive are not XAF topics but general architectural topics (which I have no objections to covering if that is of benefit to our customers). The “squeaky wheel” says “these examples are not real world”. Although I’ve explained above how it is nearly impossible for us to provide “real world” examples, I decided to start a “Starring You” section in my blog so that actual real world customers can post actual real world examples and they are starting to come through now and yet the post above calls for the XAF team to provide more “real world examples”.

I contemplated this for a few minutes before I dismissed the idea, I mean how ridiculous. If I were to write a series of blog posts showing how to build a solution from the Banking industry or from the Utilities industry, for example, it would only be useful for a vanishingly small percentage of our customers. Then I thought, wait a minute, maybe this is where I’m going wrong, making assumptions about how useful something would be, why not just ask them? So here we are; the “squeaky wheel” says we need to write a “real world” application and I’m asking you, if I were to create such an application, from start to finish, and even though the chosen industry may have little in common with yours, would that help you? If so, leave a comment below.

Technorati tags: ,
Digg This
Published Sep 16 2008, 11:45 AM by Gary Short (Developer Express)
Filed under: , ,
Technorati tags: Community, XPO, XAF

Comments

 

Jascha said:

Hi Gary,

I suspect I may have been one of those wheels in the past...

>Then I thought, wait a minute, maybe this is where I’m going wrong, making assumptions about how useful something would be, why not just ask them?

At last - the promise of the possibility of some oil ;) But seriously, that sounds eminently sensible and also avoids the possibility of patronising your customers by assuming that they are not capable of understanding or learning anything from a solution from outside their industry experience. Remember that a core skill of most commercial developers is to be able to adapt to differing industries. Also, while the feature emphasis may vary from industry to industry, most of the techniques that you need to employ to implement a real-world application with XAF are not industry-specific and are therefore valuable to all. I suspect that you are aware of this but there is a suggestion for such an applicaiton here www.devexpress.com/.../S92325.aspx.

So that is a yes from me then!

Cheers,

Jascha

September 16, 2008 7:54 AM
 

Adam Leffert said:

Gary,

There are many parts to the concept of a "real world" example.

Developers who ask for a "real world" example have a point, and are asking for something you can provide without

too much effort.

Your post focuses on the non-helpful parts of "real world", and explains why they are not helpful.

Let's make two piles of ideas contained in "real world": helpful and not helpful.

Not helpful:

- details specific to one industry (as you say)

- huge amounts of code

- a polished UI (not worth your time)

Helpful:

- huge amounts of data

can be generated by code run by the developer/user

don't waste time on cute names (call the records "Record #1", "Record #2" or whatever)

includes related data

100K records would be helpful

just run a loop, include logging, and show the developer how to run tail.exe

(www.baremetalsoft.com/baretail)

- a UI that is close enough to usable that the developer can fill in the rest

Huge data is self-explanatory.  Easy to create in code.  VERY useful to prove that XAF/XPO can handle huge amounts

of data.

Of course, too fussy or polished UI is too much investment for too little return for DevExpress.

As an example of UI that is too lame to be "real world" let's look at the example where DevExpress shows how to

link a web page to XAF.

The web page you link to fills up the whole screen, blowing the user out of the XAF UI.  This is not "real world".

What we need is an example of how to include a static HTML page into an XAF app, while keeping the XAF menus

intact.

If the only way to do this is:

- create a dummy class

- allow XAF to create a dummy ListView for the class

- write a ViewController that runs when the dummy ListView runs

- have the ViewController subscribe to the correct events

- have the ViewController code read in the HTML code

- as a placeholder?

- as an ascx control?

- have the HTML include links that continue with the XAF app, point to other ListView's without breaking the app

then the XAF developer/evaluator needs to know this, and needs to know how.

Enough for now.

Thanks for staying engaged in this discussion.

Let's dig into the "real world" concept and clarify what's useful to developers/evaluators and reasonably easy for

DevExpress to provide.

Back to work on my XAF apps!

Best,

Adam Leffert

September 16, 2008 9:00 AM
 

Luc DEBRUN said:

Any complete example is a good example, even if not from the industry am in.

But hey .. am one who loves the 60 min demo (even though it takes more than 60 min). The fact that it is a stupid application that would not exist in the real world is not important. I learned a lot from it.

Now, if you have difficulties in choosing a project, may I forward you some background documents on some of our XAF projects? I work in the United Nations. We use XAF because it help us solve immediate problems we have and it helps us solve them on a reduced budget. But importantly, all of those problems, I am 100% sure, will be the same in the real world. We track projects, we have paperbased processes that we need online, we have to document everything for auditors. And we have all these people some of them can do this and the others can do that. Perfect demos for your role base approach.

Care to help your clients by helping the UN?

Luc

September 16, 2008 9:10 AM
 

Norbert Kustra said:

Hi Gary, I agree with Luc, ANY complete example would be for me useful. What I need is to see have you polish some parts of the project... And I vote for an example with huge amount of (generated) data.

Norbert

September 16, 2008 11:06 AM
 

Bill Hazelwood said:

IMHO, there are alot of us out here that have used Microsoft's  sample database called Northwind. I can imagine that your Granny has used the saying "Familiarity breeds acceptance" or something similar.

Now I can hear what people are thinking. It is not as 'real-world' as they might like, but it would be a great platform to start.

Newbie XAFer

Bill

September 16, 2008 11:19 AM
 

Alberto Cortes said:

Hi, I would like to see COMPLETE examples from 'real world', maybe begining with 'easy' examples, but finish them please.

I agree about examples with huge amount of data.

September 16, 2008 12:03 PM
 

Rollie Claro said:

any "real customer" with "real web app (e-commerce)" that exploits XAF will be a convincing. what good does a framework brings when it isn't being use elsewhere?

i'd love to see a devex web app live in this website that actually is built using XAF. poor english but you know what i mean.

September 16, 2008 12:03 PM
 

Dave Hodge said:

I agree with Bill.  Perfect "simple" example everyone is familiar with.  It also has a fair amount of data.

September 16, 2008 12:07 PM
 

John Watson said:

I agree that it would be eminently useful. Take a simple use case - the (arguably) classic Northwind database from Microsoft Access fame. Real-world relationships - customers, orders, products, invoices, employees. A somewhat complex UI (order entry) and reporting (both online via grids and printing invoices, etc.). I've personally made a couple of attempts and found that I get bogged down and start slogging through the "muck" - spending more time searching forums, articles, snippets, etc. trying to pull together something "real world".

September 16, 2008 12:35 PM
 

Alain said:

Hi Gary.

For example, try to solve the following "common problems of real world application" using XAF and show us the recipe.

1. Concurrency in data edition: some user edit some record in workstation A, and other user in workstation B, need to be advised about the record changing.

2. Lock records when someone is editing this record to avoid others edit or modify this record.

3. How to limit the amount of records to load in a listview, and late paginate this?, for example, a listview of bills, when someone click on this BO (you know, server collections, and this kind of things).

4. Multi-threading in UI, invoke some process (activate the progress bar) and allow to continue the data entry.

thanks

Alain

September 16, 2008 12:43 PM
 

Roman Eremin said:

The DevExpress support and sales systems are written with XPO. The customer front-end is a custom asp.net application, but the internal part is written with XAF - it is a WinForms application.

We don't expose the source code for two reasons - firstly it was written when XAF was in pre-beta, so many approaches used are not really the recommended way to work with XAF/XPO, and the second reason is that it may help hackers to penetrate/cheat the system.

September 16, 2008 2:55 PM
 

Greg Munn said:

I would love an example "from the real world", it does not matter that it is not applicable to the industry I write software for.  Bring it on!

Cheers,

Greg

September 16, 2008 7:32 PM
 

John Botibol said:

Hi Gary

The idea is great, perhaps originated by Julian :-). It does not really matter what the application does, perhaps some sort of contact management type app. What is important is to show the full spectrum of XAF abilities and technologies with non trivial examples. So here's a very short list of possible contents:-

Interfacing with external products (e.g. Outlook)

Complex custom editor

Extended use of reports (scripts, non-visual application etc.)

The list could go on but I have not been XAFing for a few months due to other commitments. My experience is much like others in that the example code is too trivial and the learning curve very steep. Your XAF support team have been excellent - beyond excellent really. I am sure that a good, in depth example app would probably take a load off them?

Go for it!

John

September 17, 2008 3:55 AM
 

Dan Arnold said:

I wuld like to a real world application. Maybe Petshop would be appropriate, but more importantly, I think there is a lack of documentation on the extensibiliy aspects of XAF. As a "REAL WORLD" developer considering the framework, I need to understand the extent of the extensibility points first to make a decision to use XAF on a project.

The greatest fear when using a new framework on a business solution is finding out you can't make it do something that is critical to your client (or the application) too late n the development process.

Where can you bend XAF and where does it break?

September 17, 2008 8:56 AM
 

drew.. said:

excellent idea, but don't we already have this at least partly started with the Bootcamp effort? Simply hit that back up. But i would like to suggest that you expand the box a bit and look at our life cycle in more complete perspective. Go thru the motion of going live, as in web app live. Take requests for updates. Go through your procedure to manage the update. Go through the effort to manage report updates. Make it real from this perspective to form a KB of how to manage the basic pattern for your clients. Deal with the versioning issue required to manage web reports. Find an easy xaf-way to shutdown the web app, to reload. Find a way to add community notes about your xaf app to live clients to warn them of pending updates.

There is so much more than just learning each feature, there is actual implementation and maintenance. In my experience the least explored area of a framework is deploy/update/maintain sequences.

cheers, drew..

September 17, 2008 1:02 PM
 

Jascha said:

A lot of good points made so far. May I add that as well as being a valuable learning aid, a real-world application (I have typed that so much should we refer to it as an RWA?!) would provide a couple of other major benefits that we should all consider as part of the final mix.

Firstly, it would help focus everyone's minds on how well XAF meets the requirements of delivering RWA's. I.e. when implementing production-quality, end-user applications, how well do XAF's features meet the challenge and can we eliminate / reduce any points of pain that are encountered? For example, say DX were to implement a software development management system. During that process, real-world issues such as:

How can the system let multiple devs post to a project without concurrency violations causing lost work?

How can the system create reports rooted in a project that sum totals across detail reports?

How can the system restrict access to financial fields in the data so that only admins can see those properites?

How can the system restrict access to data so that developers only see the projects that they are assigned to?

How can the system provide change auditing without seriously impacting performance?

might well arise that require solutions for the end product to be market-worthy. Only by implementing an RWA will DX encounter a representative set of requirements and therefore be able to tune XAF for real-world usage.

Secondly, an RWA will be immensely valuable as a sales tool since it will provide definitive proof that XAF can create applications of a scope and quality that meet market expectations. This would increase XAF uptake, particularly amongst developers of more complex applications, and help ensure that XAF is successful and matures into a tool capable of serious development. Let's face it, the more successful XAF is, the more investment it will justify from DX and the safer our investment in using it long term will be.

Jascha

September 17, 2008 5:56 PM
 

Geoff Davis said:

Yes indeed a real world application example would be useful, things I've come across which I would like to have some insight:

1. Apply company information on reports; i.e. Name, Address, Logo etc without having to form a relationship between the reports objects and the company information object.

2. How to expand on existing controls in XAF. For example I want to add a scan menu item for an image but i'm not sure what to create and where to put the code.

3. I have a table that is 250k rows and is an album table which has about 7 relationships to other tables. I have to display artist name, title, format, country, label, condition, description, quantity, price for it's list view so there is quite a delay to show these items first time around even using server mode. I would like to know how I could for example how to implement a filter toolbar by alphabetic buttons, ABCD...

Now I know how to write code for above but i'm really struggling to understand where to put the code into XAF to make it all happen.

Likewise, one thing I hate about the layout designer in XAF is that you cannot lock position anything as you could do with using a normal layout control on a form. Whats that all about?

Anyway, I do like the fact that you are addressing the need for more information on XAF so keep that flowing Gary.

Give me the code :-)

Cheers, Geoff.

September 17, 2008 7:09 PM
 

Garth Henderson said:

Aloha Gary,

. . .  from the other side of the world.  Winter surf will start showing up next month on the North Shore.

I've got one question:  Does DevExpress use an accounting system (GL, AP, AR, Fixed Assets, Facilities Mgmt, etc.) written in XAF?  Including a financial report writer?

hmmm . . .  it's about time that .NET met ERP and DevExpress is the closest toolset I've found.  

There is still a lot of open territory up for grabs.  We want more architectural focus.  More documentation on wiring and how to traverse the robust world of the Application and View object stacks.  Workflow integration.  More application utility functions for transaction processing including IPv6 data package transfers between applications (both Schema and Data).

You folks have come up with some terrific ideas like XPO and XAF the Controller management.  The whole XAFML implemetation from the Schema is fantastic.  Let's beef it up for large team collaboration by using a database to store schema for Roles and Localization.  More integration at the top Model level (less duplicate coding).  How about a robust WPF/Silverlight combined UI?  A workflow enabled navigation would definately keep DevExpress in the lead.

Peace,

    Garth

September 18, 2008 4:40 AM
 

Gary Short (Developer Express) said:

LOL, well just as I suspected there is no consensus on what a "real world" XAF application should look like. However, it is clear that there is a consensus for one being written.

I've got an idea for one in my head at the moment, its one that I have real world experience of so the rules and requirements would be real (though the names would be changed to protect the innocent <grin>). I'm off to Germany tommorow (see later post for details) but I'll try and post more details of this RWA depending on connectivity. Until then, keep the suggestions coming, it's all "girst tae the mill" as my granny would say! :-)

September 18, 2008 12:55 PM
 

Ryan Britton said:

Another point worth mentioning is that, although the application of a "real world example" to an industry vertical may seem like it is only applicable to a "vanishingly small" segment of your existing audience, it will also appeal to any _potential_ customer from there on out.

Put a couple of these "vertical-specific RWA examples together and suddenly you have a set of tangible examples where XAF can be used successfully in many different sectors to use as a powerful sales tool (I mean - isn't "Outlook Before Lunch" industry-specific?). Imagine how much easier the sale of XAF will be with a suite of examples spanning several verticals (instead of trying to promote the abstract benefits of the framework - which are not always evident to a glance-over researcher).

I believe that it is for this specific reason that organisations like Microsoft always provide real-world examples of the application of their technologies. I don't know how many of these types of examples I've found useful even though I had no intention of opening a bookstore or running a pet shop :)

My recommendation for a good RWA application?

What about an application for a software company that allows the organization to manage  production, sale, invoicing, prospects and basic HR? Your audience IS software developers (regardless of the vertical) so I'm sure most people will be able to relate, and its a "retail-oriented" application so it avoids the vast differences between the provision of disparate professional services...

September 19, 2008 9:14 AM
 

Yann Duran said:

This all sounds really good, & definitely something many people will be clamoring for.

In addition to the excellent suggestions so far, I'd personally like to see some "how to's" involved, that go beyond the plain & simple stuff that the framework automatically does for you. In essence, how to customise the things that don't quite cut it for real-world applications.

And, as a number of people have stated, one of the hardest aspects of XAF that has to be dealt with is WHERE the code for a particular task needs to be put, followed closely by HOW.

There are MANY things I can think of that will need to be done in any decent-sized application, from things like customising columns in a ListView (justifying/padding text, conditional formatting etc), adding footers & summaries to ListViews, through to implementing replacements for some of the standard elements (forms, property editors etc).

There isn't even a decent way of entering time values in a DetailView. Dates? Yes. Times? No. Nothing acceptable anyway.

A number of controls won't handle "empty" or null values, so they might be fine for "ordinary" situations, but what do you do if you NEED those types of customisations?

So, to see how some of the existing property editors can be extended to fit situations where the out-of-the-box functionality isn't quite enough would be good too.

I think it's already been mentioned, but some guidance on XAF Best Prectices would be helpful as well.

Thanks for putting this together Gary! I can see it being VERY helpful.

Yann

October 17, 2008 1:47 AM

Leave a Comment

(required)  
(optional)
(required)  
Verification code: Required
   
Add
Copyright © 1998-2009 Developer Express Inc.
ALL RIGHTS RESERVED