Udi Dahan na swoim blogu umieścił ciekawy wpis poświęcony programowaniu według wzorca Domain Model. Jeden z wniosków płynących z tego artykułu, to rezygnacja z wyrzucania wyjątków poza Domain Model, czy też szerzej, poza całą warstwę logiki biznesowej. Jest to zdecydowanie inne podejście od większości promowanych reguł budowania aplikacji złożonych z warstw, gdzie zazwyczaj zaleca się, aby w danej warstwie zdefiniować własny wyjątek i wszystkie przez nas generowane lub wyłapane wyjątki z warstw niższych (zależnych) opakowywać wyjątkiem warstwy i przekazywać dalej.
Rozwiązanie z bloga Dahan'a zdecydowanie bardziej mi się podoba niż przekazywanie wyjątków z warstwy biznesowej do warstwy prezentacji. Jedyne moje zastrzeżenia budzi klasa FailureEvents, służąca do obsługi błędów płynący z logiki biznesowej. Razi mnie to, iż jest ona statyczna. Osobiście wydaje mi się, przynajmniej jeśli mówimy o programowaniu w ramach Windows Forms, iż znacznie lepiej byłoby wprowadzić fasadę umożliwiającą wywoływanie klas Domain Model i zawierającą niestatyczne zdarzenia obsługi sytuacji błędnych.
Polecam również komentarz Ayende Rahien'a twórcy Rhino.Mocks, który między innymi proponuje zastąpienie zdarzeń metodami zwrotnymi (tutaj w pełni zgadzam się z Ayende).