-
Ensuring that Dispose() gets called on your IDisposable types
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:
I can't claim that I came up with this, but I can't remember where I saw it either.
-
Questions to ask whenever set based business concerns come up in a DDD-CQRS-ES based application
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: