Los Techies : Blogs about software and anything tech!

Inconvenient Accessibility Makes Self-Documenting Code


Intentional use of access modifiers (public, private, etc.) is like a clear memo to your team. This came up during Steve Bohlen's Virtual Alt.Net talk on domain-driven design.

Steve explained the distinction between Entity objects, which have a unique identity independent of their properties (Even when I change my name, I'm still me.), and Value objects, which are defined by their properties (If you change the house number in an address, you have a new address.). When dealing with Entities, code should not be able to change the unique id—that would be like someone claiming your social security number and thereby becoming you. Therefore, Entity classes should have private setters for their unique identifiers.

A meeting attendee asked why, since this gets inconvenient when you're creating an object based on a record fetched from the persistence repository. It's a big pain; why bother? The analogy I would offer is this. When you're defining a class to represent an Entity in your business domain, you know it's an Entity. You intend for it to behave and be treated like an Entity. You don't want any of your teammates setting its unique id in their code. So you send them an email: "Don't set Person.UniqueId, okay?" Uh hunh. How well is that going to work over time?

Instead, if you simply don't provide a public accessor to the UniqueId property, your teammates will get the message loud and clear. Granted, someone could edit the code and change the accessibility, but the fact that he or she needs to is a flashing neon sign saying "Stop. Think. Are you barking up the wrong tree?" You've made your code communicative. Its structure conveys your intent. No need for comments; this is an example of self-documenting code.

Kick It on DotNetKicks.com
Posted Jun 20 2009, 08:11 AM by Sharon J. Cichelli
Filed under:

Comments

Reflective Perspective - Chris Alcock » The Morning Brew #373 wrote Reflective Perspective - Chris Alcock » The Morning Brew #373
on 06-22-2009 3:35 AM

Pingback from  Reflective Perspective - Chris Alcock  » The Morning Brew #373

yield return and more! « Adam: Be Explicit wrote yield return and more! « Adam: Be Explicit
on 06-22-2009 5:44 PM

Pingback from  yield return and more! «  Adam: Be Explicit

Add a Comment

(required)  
(optional)
(required)  
Remember Me?

Enter the numbers above:
Copyright Los Techies 2008, 2009. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems