eXpress App Framework Team

This Blog

April 2008 - Posts

  • Writing code is not a workaround

    As programmers we are regularly faced with the task of creating computer applications, which is a good thing. One of the reasons we are regularly faced with this is that no computer application is exactly like any other - the requirements vary in some detail, the look&feel of an existing application isn't exactly what the user wants, the programmer isn't quite happy with the implementation... On the surface, perhaps from the viewpoint of some manager type person (not a slight - just referring to a particular high level view of things), many applications sound like they are really the same thing.

    The task for the programmer is to reach the goal of creating an application that satisfies all the requirements exactly, from a technical point of view as much as with regard to end user functionality. To reach this aim, he (or she - just using the masculine form for simplicity) looks around for reusable components that can be the building blocks of the new application. Obviously this can't cover everything he needs to do - since the task is to create something new and unique, there can't possibly be building blocks around that cover every single detail. So at some point he'll have to fall back onto what some would regard the "real" work for a developer: start developing, i.e. analyzing problems, designing architecture, writing code.

    In the XAF discussion forum, I have recently noticed a certain tendency. Customers will ask us for a way to solve a certain problem. We provide them with a solution, which of course in each instance is of varying elegance, but usually solves the problem. We see customers turn around and ask for the particular solution to be included in the default feature set of XAF. In this context, words like "workaround" or even "hack" are regularly used to describe the solution we provided, and hint at the understanding on the customer's side that this feature should surely be an integral part of XAF.

    Think about this: if you wanted to create a simple Windows Forms application that let you handle a contact list, you could probably make use of some building blocks from the .NET framework. You'd be using standard controls, for instance, or perhaps ADO.NET to help you store the data. You might use third party controls to improve the UI experience. But in the end you'd also write code to implement that part of your functionality which is really the purpose of the whole application, which distinguishes this application from any other contact management application out there. It might be high-level code to collect all your closest friends from the complete collection of contacts, or it might be low-level code to facilitate certain visualization features beyond what the UI controls do by default. You have to write this code, because the .NET Framework doesn't provide you with ready-made building blocks to collect friends, or to do that creative visualization you have in mind. But the framework is flexible enough to let you reach your goals anyway, and in the process you have a chance of distinguishing yourself and your application and to create unique selling points for your application as well, things that perhaps other programmers can't implement or just don't have the ideas for.

    Would you say that this code you're writing is a workaround or a hack, to accommodate the unfortunate fact that the .NET Framework doesn't have these features yet? I wouldn't say that.

    In many of the cases I've seen in our forum, the features in question are really quite specific. If we wanted to include them in XAF, they'd have to be abstracted first, since it doesn't make sense to integrate a specific option, special class implementation or the like for every single use case out there, regardless of how often or rarely that use case applies. By implementing an abstraction of a feature, we widen the scope of use cases that can benefit from it. Of course, for every single one of our customers, this means that our abstracted feature doesn't solve the exact problem they're facing. Instead it enables a solution for that problem, which is then easier to achieve on the basis of a certain extent of framework support.

    Does that sound familiar? It brings us back to the exact point where we already are right now. At this time, we have a very strong framework in our hands, which enables solutions to the vast majority of problems. There are steps a programmer has to make to apply those solutions to his own use cases. It speaks to the strength of the framework that this is possible, and it speaks to the imaginative skills of our support team that they can deliver these application specific solutions to you. So please don't call these use-case specific solutions workarounds or hacks. That's not what they are. What they really are is this: the creative part of your application that sets it apart from other applications. They are the valuable parts of your work that makes it your work instead of being something that anybody could have created by choosing some options from a list.

    Can our framework be improved? It sure can. We're constantly looking out for things to include, problems to abstract, in order to enable further solutions in areas that weren't previously covered. We also look at things we can make easier, giving higher priority to those features that are used by most of our customers. But first and foremost we are in the business of providing a general purpose business application framework, and it is not a goal we have to allow any given specific application to be created only by clicking options with the mouse.

  • The state of things for XAF 8.2

    As some of you have noticed already, we have recently had to make a few changes to our plans for XAF 8.2. One important reason for this is that we are busy working on important architectural modifications/features, mainly to support our Reusable Domain Model plans that Roman has blogged about a few times. Other reasons are related to the amount of support work we're doing, as we're seeing large numbers of suggestions and questions for XAF, and of course also a fair number of bug reports. Our aim is to incorporate many "small" suggestions and requests for minor improvements, since we want to make the basis of XAF as flexible and stable as possible.

    There's no way we can provide a feature out of the box for every use case out there, but it is our goal to be able to provide a solution for the vast majority of problems, even if it involves some manual work. That's why your feedback is important to us and we're spending a fair amount of time evaluating it and acting on it. Thank you very much for being involved!

    Of course a lot of support work is also being done to answer customer questions, about implementation details of XAF, approaches to certain solutions, and ever so often about basic information around the parts of your applications that we can't write for you, such as how to create working domain class hierarchies, where and how to implement business logic and so on. We are aware of this need for information, which we find to be much greater for XAF than for any other Developer Express product. Our new technical evangelist Gary and I have been busy working on an outline of content we want to publish on a variety of topics. Gary will soon be blogging about his experiences with XAF, and you will see technical articles appear as well (within a few weeks is my best guess at this time). Slightly longer term plans (talking a few months here) also involve publishing more video content, which is something that many have requested. As usual we're having to prioritize, but we'll pick up on additional ideas as soon as time allows.

    The architectural work we're doing is a problem for our 8.2 plans in two ways: first, it consumes time, second, it means that features or changes which depend on base class implementation had to be put on hold for 8.2. The second reason is why our workflow plans are being delayed, for example, and a few other things as well. On the other hand we're building a solid basis for the implementation of these features, and I don't think I'm promising too much if I say that 8.3 will contain more than the usual amount of new things, partly due to this "preparative" work we're doing.

    Finally let me say that in spite of all this the 8.2 release is not going to be boring by any means - I wouldn't want this post to be misunderstood that way. Of course the usual disclaimer applies - these are our current plans, and since we're working towards a specific deadline for the 8.2 release, it is possible that they will have to be changed. But if things go the way we think they will, 8.2 is going to have these new features (not an exhaustive list, just a few highlights):

    • Ribbon support in Windows Forms
    • A data analysis tool based on the XtraPivotGrid and XtraCharts
    • IIS Medium Trust support
    • ASPxScheduler support
    • An abstracted data layer - use XAF without XPO - important update, see below

    Keep the feedback coming!

    Update to the "abstracted data layer" entry - There are two things that must be added to this. First, my language wasn't very good when I wrote the entry - it does actually sound like we're going to create a new data layer, which is not what we're doing. What I meant is that we're working on abstracting the existing data layer, in other words decoupling it from the rest of our architecture. Second, while the purpose of this work is of course that other data access technology than XPO can be used with XAF, the team tells me that we're not quite at the point where they would be comfortable with a recommendation to go ahead and start creating additional data layer implementations. Our current work will take away direct dependencies between XAF and XPO, but there are still functional areas like criteria support as well as certain assumptions about the way the data layer works, which might make it very hard to implement a compatible data layer that is not based on XPO. So up until the point where we create a new data layer ourselves and see that it is possible, we can't really call this a fully supported extensibility point. My apologies for any confusion in this regard.

  • VBUG Conference in Birmingham last week

    VBUG, a large .NET user group in the UK, did their spring conference 2008 last week in Birmingham. Smaller than the "main" yearly conference in fall, it was still a great event that saw slightly over 50 delegates in the five technical sessions during the day. Mark Quirk of the DPE group at Microsoft UK showed what's new in VS 2008, Dave McMahon talked about MOSS (he did in fact talk about moss, but that's not what I meant when I previously said he talked about MOSS), I did my "Business Apps with WPF" double talk and Richard Costall and Richard Costall (not a typo) presented their Silverlight Showcase.

    Gary was there as well, but only for the women.

    Okay, I admit that's not true - he jumped in on short notice to do his Workflow 101 talk (warning: don't try to understand his bio on that page!) in place of the original workflow speaker. Thanks, Gary!

    Finally we managed to get rid of a license of DXperience Universal as the top price of the raffle. Thanks to everybody I spoke to on the day!

  • Upcoming events - VBUG Spring conference and lots of DDDs

    There are several events coming up in the next few weeks, where I'm going to be speaking. Hope to meet some of you there!

    If you haven't considered coming to any of these events, now is the time to do so - there's lots of stuff going on, and since all of these events happen "off the beaten track", we hope to see some people there who couldn't easily make it to the more "standard" event locations in Reading or Dublin.

    Here's where I'm going to be:

    VBUG Spring Conference, Birmingham, UK - April 24th

    DDD Ireland, Galway - May 3rd

    DDD Scotland, Glasgow - May 10th

    I believe I'm also going to be at the North East Scotland .NET User Group on May 14th, but they don't have an announcement for the event yet. Hope to confirm that later.

  • MVP Summit next week

    I'm going to be in Seattle next week for Microsoft's annual global MVP Summit. If you see me around there, please say hi, or contact me if you want to sort something out to meet me. It would be great to talk to some of our customers over there (or just to other people interested in talking to me <g>).

  • Back from my Ireland tour

    Okay okay, I've been back for a few days. But I've had a great time, and so I want to take the opportunity to thank everybody over there for having me, organizing all the details, and of course for coming to my sessions! Thanks a lot to Mick Lohan, Joe Gill, Clare Dillon and Barry Alistair, and everybody else I happen to forget.

    I was in Galway first, where I did a WPF session at GMIT. Not a huge crowd there, but that was good, since the session turned into a workshop type event, and so people could really take away some interesting information relevant to their own situation. In the evening of the same day, I talked about functional programming in C# at the user group in Galway, which was very well received. I also showed some of our Developer Express products, even at direct request from some members of the audience (XPO - great choice!), and I gave away a license of CodeRush and Refactor!.

    I travelled on to Cork next and did another WPF session there. Attendee numbers kept creeping upwards, so we were almost in trouble due to the size of the meeting room at the hotel. Again, lots of good questions, some DX product demos towards the end, freebie giveaway and of course pints afterwards (Have I mentioned pints yet? They do love them over there, especially after a hard day's work. Or during a hard day's work. You know. ;-)).

    Finally it was Dublin for me and the IMTC conference. I did two sessions there and had time for a lot of interesting conversations with delegates and other speakers. A great event - if you've missed it, make sure you're there next year!


Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at or call us at +1 (818) 844-3383


DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, Delphi, HTML5 or iOS & Android development. Whether using WPF, ASP.NET, WinForms, HTML5 or Windows 10, DevExpress tools help you build and deliver your best in the shortest time possible.

Copyright © 1998-2018 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners