• Ensuring that Dispose() gets called on your IDisposable types

    31 May 2012

    Here is a neat trick to make sure you IDisposable classes have their dispose method called. In the finalizer, call Debug.Fail and only include it in Debug builds:

    public class DisposableClass : IDisposable
    {
        public void Dispose()
        {
            //The usual cleanup
    #if DEBUG
            GC.SuppressFinalize(this);
    #endif
         }
    
    #if DEBUG
            ~DisposableClass()
         {
            Debug.Fail(string.Format("Undisposed {0}", GetType().Name));
         }
    #endif
    }
    

    This will give you an in-your-face dialog to let you know of your fail:

    Assertion Failed

    I can't claim that I came up with this, but I can't remember where I saw it either.

    Read more...


  • Questions to ask whenever set based business concerns come up in a DDD-CQRS-ES based application

    08 Dec 2011

    One of the biggest brain speed bumps for people who come from a centralized data-model first \ RDMBS world is the issue of duplicates. "What if we have duplicate names?" "What if we have duplicate accounts?" etc. This can be of special concern in distributed systems, where your aggregate roots may be created in different places.

    Before I engage in any sort of implementation, I have several business questions that must be answered first:

    Read more...