Eric Evans: Why do efforts to replace legacy systems fail?

June 19th, 2009

Gojko Adzic has an interesting piece by Eric Evans about replacing legacy systems.

In summary, focus on the core domain – the part of the software that brings competitive advantage to the business – and use an anti-corruption layer to interface with the old system.

Tips for Domain Driven Design and TrueView

June 2nd, 2009

Here are some tips for DDD newbies.  It’s easy to fall back to doing ‘what you know best’, so use these tips to stay focused. Hopefully your design skills will get better (and faster) as a result. :)

  1. Don’t start with the User Interface
    Instead of asking “How will the user solve this problem?“, ask “What is the problem?
  2. Design Domain Models, not database schemas
    Most business users don’t understand database schemas – so don’t make them
  3. Design your Domain Model incrementally
    Defining too much detail early on is the fastest way to get side-tracked
  4. Get constant feedback from your Domain Experts
    Take advantage of TrueView’s auto-generated prototypes to get instant feedback
  5. Separate business concerns from technical concerns
    Writing technical infrastructure code can be counter-productive during the modelling phase
  6. Unit testing wisely
    Focus on testing non-trivial behaviour and complex business logic, possibly using BDD
  7. Think agile, be agile
    Your clients don’t have time to wait, so don’t make them

You can read the detailed version here.

When should you use a Value Object?

May 26th, 2009

Whilst in the middle of writing about “Entities vs Value Objects“  I discovered this post by Dylan Beattie.

I’ve observed that a lot of DDD newbies get hung up on Value Objects, persistence, how to normalise the database, and other implementation concerns.

Value Objects stem from the actual domain problem, not from  persistence.  Read Dylan’s post to understand why.

TrueView Release 1.2.0905.22 – Maintenance release, performance improvements

May 22nd, 2009

This release has some major UI rendering improvements, and a couple of enhancements to aid usability. TrueView DataBridge also has a couple of small fixes.  Download them here

Enhancements:

  • Drag/drop tip now explains the drop action
  • Drag/drop tip now tries to stay on-screen, regardless of curson position
  • Now allows new entities to be added to unsaved parent entities
  • “Save This” tooltip now shows reason for being disabled (where applicable)
  • Removed duplicate results in Search window
  • Friendly names are now generated for generic lists
  • Improved icons bitmap scaling quality
  • Removed error messages when using IQuerySpecification with FilePersistence provider class

Fixes:

  • UI refresh now updates all Entities
  • Fixed stack overflow when tracking dirty entities in circular object graphs
  • Corrected tracking of entities that are removed from lists
  • Dynamic listbox ensures that property value is automatically loaded
  • Fixed NullReferenceException when pressing Enter in an empty Queries List
  • Fixed DataTimePicker background colour on Windows Vista
  • Removed system beeps when entering/exiting edit controls (NumericUpDown is still a problem)
  • Correct sizing of PropertyGrid columns
  • Corrected enabled state for “Save This” menu item
  • Corrected bold text clipping in Search treeview
  • Allow NHibernate to use reflection-optimizer if configured to do so
  • Menu and toolbar items are now updated if Undo/Redo fails
  • Better alignment of Boolean radio-buttons
  • Better sizing of bitwise(flag) enum listbox
  • String compacting algorithm no longer creates null-terminated strings

Optimisations:

  • Massive improvements to UI rendering performance
  • Reduced startup time in MyApplication.Initialise (i.e. for unit testing)
  • FilePersistence now flushes to disk less frequently
  • Improved string building performance

Known issues:

  • NumericUpDown editor still beeps when Enter is pressed
  • Search Query Editor window doesn’t hide Boolean editors immediately (need to hit Escape twice)

Missing treenodes in Options/Preferences Editor

May 3rd, 2009

If you were running a previous version of TrueView, you may find tree nodes missing in the Preferences Editor.

The fix is to remove  the old user settings.  Open this folder in Windows Explorer:

  C:\Users\<your user name>\AppData\Local\Evolving_Software_Ltd\

And remove all folders for the application that is affected.

TrueView Release 1.2.0905.02 – Maintenance release (plus a few extras)

May 2nd, 2009

The latest maintanance release fixes some glaring errors (sorry!).

The UI has also been updated for better usability – and now supports dynamic drop-down lists using IQuerySpecification.  Read the user guide to learn more.

Enhancements:

  • Moved MDI window toolbar to top (tab-like appearance)
  • MDI window ‘tabs’ now toggle normal/maximised window state
  • Added support for dynamic UI ‘lookup lists’ using IQuerySpecification
  • User is prompted to email errors at shutdown
  • Added “Communication Settings” to Preferences
  • Added online version checking for Trial build
  • Added Vista style TaskDialogs
  • Dirty status is only shown for changed entities
  • Collapsible panel widgets now highlight on mouse-hover
  • Reduced flicker when changing between maximised windows
  • Search “Add” now uses “Query Bookmarks”, which can be viewed after saving
  • Added TransientEntityList class
  • Default settings of AutoSave is now False

Fixes:

  • Corrected UI updates when list Add/Remove is aborted
  • Improved UI refreshing after performing commands
  • Clearing a search form purges the internal cache
  • Corrected Action button panel flow layout when resized
  • Corrected tooltip rendering in Property treenodes
  • Text no longer truncated in Action buttons
  • Corrected MyApplication.IsStarted value
  • Dialogs no longer displayed when Workbench isn’t running (for unit testing)
  • Improved/optimised tracking of dirty entities within deep object graphs
  • Now handles hidden/new properties
  • Reattaches entities to NHibernate ISession before loading properties
  • Improved NHibernate session management during Save operations
  • Corrected ListView sorting for sub-items that are null
  • Corrected ListView header sort icons for Vista
  • Corrected lock-up when tabbing through PropertyGrid controls
  • Corrected validation when dragging items from the Class Library
  • Previous search results are cleared if query returns no matches
  • Corrected “Unit of work” check for method Actions
  • Added sync locking to allow rapid keyboard actions (e.g. keeping a key pressed)
  • Now supports icons named after Interfaces
  • Reset drag/drop label background colour

Optimisations:

  • UI widgets are only refreshed once where possible
  • Reduced amount of redrawing when listviews are refreshed

Known issues:

  • DateTime editor doesn’t change background colour on Vista
  • Preferences Editor doesn’t always render tree nodes

A quick chat with Eric Evans

March 26th, 2009

Eric Evans chatted with Alex Handy (SDTimes) about the primary aspects of DDD.  Read the interview here.

The BBC uses Domain Driven Design

March 24th, 2009

A little late :oops: , but still relevant…

Michael Smethurst (Information Architect at the BBC) describes how DDD is used to make websites.

The reality of UI mock-ups and DDD

March 19th, 2009

Casey Charlton is writing a sample application using DDD.  His first step was to create a UI mock-up to reflect a user story :(

“What’s so bad about that?” I hear you cry.  Well, here’s the problem:

UI prototyping is great for defining how a person is going to solve a business problem.  It’s not great at defining what the problem actually is (i.e. the business domain).

I’ve seen this happen many, many times:

  1. Developer sketches UI, to start discussions with the Domain Expert/Business Analyst
  2. Business Analyst adds/removes/repositions some widgets
  3. ‘Hand waving’ and ‘pointing at imaginary boxes’ becomes the communication technique of choice
  4. Developer agrees to ‘quickly code up’ an interactive prototype
  5. End user wants a different shade of blue

Although the Developer has good intentions of leveraging DDD, the urge to see working apps overrides everything else – leaving the Developer with a vague understanding of the business domain.

As the Developer does learn more about the domain, he usually finds that the original UI design is inadequate. And changing a UI is expensive (it’s a pity that most businesses don’t understand why).

This is where TrueView shines.  It automatically creates interactive UIs, but only based on domain definitions and relationships. Which means:

  • The Business Analyst must describe the business domain.
  • The Developer must start understanding the domain
  • Both must define and share the Ubiquitous Language.

TrueView doesn’t give you a totally customisable UI, but you do get an interactive prototype that models the business.  Once you understand the domain model, you’re in a perfect position to design a slick UI.

Press release – “TrueView for .NET” keeps software focused on business concepts, slashes development times.

March 10th, 2009

Cheltenham, UK, 10/03/2009

Evolving Software releases an update of “TrueView for .NET”, a framework for rapidly designing and creating business applications for Microsoft .NET.

TrueView helps .NET Developers and Business Experts share business knowledge, design interactive prototypes, and create flexible applications. Software teams use Domain Driven Design (an established technique for designing complex applications) to stay focused on essential business concepts.

“Absorbing business concepts can be pretty tough for development teams, especially when timescales are tight. Using TrueView, Developers can sit down with Business Experts, and use interactive prototypes to discuss the problem space. The feedback cycle reduces from days to hours.” explains Vijay Patel, founder of Evolving Software.

TrueView supports Agile development, Domain Driven Design, and the Naked Objects pattern. Combining these strategies allows developers to cut development times without compromising software quality.

Evolving Software is also offering personal licences to developers learning Domain Driven Design at discounted rates. Visit http://www.evolving-software.co.uk to learn more.