Wednesday, 21 August 2013

Unit of Work Design Pattern - Introduction

Master Enterprise Architecture & Java!

Subscribe to Ram N Java for clean, beginner-friendly software architecture tutorials.

👉 Subscribe Now on YouTube

What is the Unit of Work Design Pattern?

The Unit of Work Design Pattern is a foundational architectural pattern belonging to the Object-Relational Behavioral Patterns category within Martin Fowler's Patterns of Enterprise Application Architecture (PofEAA). It maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.

1. How Unit of Work Tracks Changes

As soon as you begin an operation that impacts database records, a Unit of Work object is instantiated to track everything that occurs:

  • Whenever an object is newly instantiated, modified, or marked for removal, you register that change with the Unit of Work.
  • Methods like registerNew(), registerDirty(), registerClean(), and registerDeleted() maintain distinct lists of affected entities.
  • Once your business transaction completes, the Unit of Work iterates through these registered lists and writes all database changes in a single coordinate batch.

2. Example: Person and Address Update

Consider an update scenario where a user changes both personal details and multiple addresses:

  • The application pulls the Person record (e.g., John) and related Address records from the database into memory.
  • When John's details and address fields are modified, instead of immediately issuing SQL UPDATE statements to the database, the changes are simply reported to the Unit of Work.
  • At the conclusion of the workflow, the Unit of Work commits both person and address changes sequentially and reliably in a single transaction.

3. Why Avoid Direct Database Calls for Every Change?

Writing changes directly to the database for every small object modification introduces two major issues:

  1. Chatty Network Calls: Making dozens or hundreds of discrete database round trips drastically slows down performance.
  2. Long-Lived Open Transactions: Keeping a database transaction open across a lengthy user interaction or multiple requests is impractical and risks locking database resources.

Popular ORM frameworks such as Hibernate and .NET's Entity Framework implement this exact pattern behind the scenes to bundle changes and execute efficient batch updates.

Recommended Related Videos from Ram N Java

Deepen your understanding of enterprise and behavioral design patterns with these tutorials:


Click here to watch in Youtube : https://www.youtube.com/watch?v=6jYBdBCyrao

Click the below Image to Enlarge
Unit of Work Design Pattern Introduction














See also:

  • All Design Patterns Links
  • No comments:

    Post a Comment

    Tutorials