Silverlight Event on Tue, April 20, 2010

Who: Adam Grocholski
What: Windows Phone 7 and Silverlight - Don't Make Any Assumptions
When: Tuesday, April 20, 12:00 - 1:30 PM
Where: Microsoft Office at 8300 Norman Center Dr., Suite 950, Bloomington, MN 55437
Cost: Free

Registration is required. Click here to register.

March Architect: Domain Model Structure - Part 4: Value Objects

In the Part 2 and Part 3 of the Domain Model Structure series, we continued our discussion around how to organize classes inside your domain model. We defined Entities, looked at their relationships, and reviewed options for loading them into memory. This month, we will take a look at Value Objects.

Discovering Value Objects

Value Objects are domain model elements with no conceptual identity. They represent descriptive aspects of the domain and are fully defined by their state. Their behavior depends on what they are, not who they are. If they need to be tracked, they should be tracked with the elements they describe. Thus, they do not need an identity of their own.

We prefer to keep Value Objects immutable, i.e. changeable by full replacement only. Immutable Value Objects are safe to share (which increases performance), and easy to understand (which allows you to build complex behaviors). Let me give you an example based on a classical OO problem:

Assume you have two buckets of paint: b1 and b2. The first bucket b1 contains 1 gallon of yellow paint. The second bucket b2 contains 1 gallon of blue paint. Without looking into the code, could you answer the following questions about the results of the operation b1.Add(b2)?:

  1. What will be returned by the Add method? Is it 2 gallons of green paint or nothing?
  2. What will be in the the first bucket b1? Is it 2 gallons of green paint or 1 gallon of yellow paint?
  3. What will be in the second bucket b2? Is it 1 gallon of blue paint or nothing?

If you notice, we do not have a requirement to track buckets of paint. Thus, I will assume that Bucket is a Value Object and should be immutable. Since both buckets are immutable, they will contain their original values of 1 gallon of paint each and the result of the Add operation will be 2 gallons of green. With no convention in place, it would be impossible to answer these questions without checking the code or better yet unit tests first.

You domain has many Value Objects, a lot more than Entities. If you are having troubles seeing them in your system, take a closer look at the Entities. How are they being described? What are their attributes and properties? How are they being searched for or ordered by? The chances are you will be talking about Value Objects.

Examples: Address, DayPoint, Money, Range, SSN, etc.

Domain Model Structure

Value Objects along with Entities are main elements of the domain model. Many of them are small simple classes that will be widely used in your application. Place them together in a sub-folder under the Domain Model root. We name this folder "Capability":

Domain Model Structure - Capability folder

You are likely to have a number of very complex Value Objects as well. I will try to discuss some of them in my future articles.

Summary and Additional Tips

  1. Never define an identity for a Value Object.
  2. Consider overriding equality operators to match Value Objects using object attributes rather than object references.
  3. Keep Value Objects immutable.
  4. Place Value Objects used across many applications into a dedicated Domain Kernel library.
  5. If you are interested in creating a simple base Value Object class, you can start with the one listed below:

    Domain Model Structure - Value Object Template

Happy coding! To be continued...

Videos from MIX10 conference available to download

Check out these session recordings from the MIX10 conference in Las Vegas (March 15-17, 2010): Enjoy!

Visual Studio 2010 and Silverlight 4 launch date announced

Microsoft announced the launch of both Visual Studio 2010 and Silverlight 4 on April 12, 2010 at the ASP.NET and Silverlight conference and expo in Las Vegas. Click here for the conference details.

Happy coding!

OTUG event on Tue, March 16, 2010

Who: Denis Ahearn and Casey Helbling
What: An Overview of Ruby and Ruby on Rails from the Trenches
When: Tuesday, March 16, 2010, 6:00 - 8:00 PM
Where: Brady Educational Center (BEC) room LL03, University of Saint Thomas, St. Paul Campus
Cost: Free

Visit OTUG for more information.

Illuminating video on leadership, followers, and movement

Derek Sivers posted an excellent 3-minute video on leadership, followers, and movement on his blog. Enjoy!

Follow me on Twitter

In addition to blogging, I am now using Twitter for quick updates and announcements. Follow me at: The updates are also visible on my LinkedIn page.

Book Review: Working Effectively with Legacy Code

Michael Feathers
Working Effectively with Legacy Code

Legacy code is defined by Michael Feathers as code that lacks tests. Lack of tests makes the code hard to understand and difficult to change. When the code is changed, new subtle bugs are often inadvertently introduced. When the code breaks, countless hours are spent troubleshooting.

Does it sound familiar? If you are writing software professionally, the chances are you have worked with legacy code many times before. You may be working with legacy code now. If this is the case, you will find Michael Feathers' book invaluable.

Michael describes practical strategies and techniques to working effectively with both large and small untested code bases. He explains the mechanics of software change and provides insights into adding tests to and ultimately taking control of legacy code.

I recommend this book to all software developers. Happy reading!

Five principles for increasing employee engagement

The following five principles are listed in the Harvard Business Review magazine, March 2010, page 24:

  1. Keep people informed
  2. Listen
  3. Set clear objectives
  4. Match the person with the job
  5. Create meaningful work

Online systems increase transaction costs?

An interesting study was mentioned in the March 2010 issue of the Harvard Business Review magazine. The study suggests that while bank online systems improve customer retention rates, they also increase transaction costs to serve each customer.

The conclusion is rather unexpected, isn't it?

Welcome to ModelBlog

Thank you for visiting ModelBlog. We hope the time you spend with us will be both entertaining and worth your while. Have fun!