Dokładnie, są tylko 3 rozwiązania:
1)rzucanie wyjątków
2)Optional (pusty dla nieprawidłowej wartości)
3)Either
inne sa po prostu złe
@scibi92: Nie byłbym taki kategoryczny, u nas we wiosce mówią: jakbyś nie obrócił to i tak d..a zawsze zostanie z tyły. Każde z rozwiązań ma swoje "ale":
- rzucanie wyjątków - cóż to za wyjątkowa sytuacja, że user się powyli, wyjątki wprowadzono dawno temu jako jednolitą formę reakcji na tak różne błędy od krytycznych po drobnostki
- Optional - ok ale jak chcemy dowiedzieć się dlaczego nie udało się obiektu utworzyć to brak informacji o przyczynie
- Either - ma to do siebie, że w razie niepowodzenia można zwrócić wszystko, co dusza zapragnie, chcę utworzyć pesel a dostaje opakowanie w którym może być pesel albo nie.
Jak dla mnie rozwiązanie zależy od sytuacji, czyli w którą stronę chcesz się obrócić i co tam chcesz zobaczyć. Szukanie rozwiązania, że nam z tyłu d..a zniknie jest utopią.
@danek
Problem z Either jest taki, że metoda wytwórcza klasy A powinna tworzyć obiekt tej klasy, a tu wyskakuje jakiś Either, który może zawierać żądany obiekt albo coś innego. Czy to jest intuicyjne?
To o co mi chodziło w tym rozwiązaniu to to, żeby metoda wytwórcza zwracała zawsze obiekt danego typu, a przez dziedziczenie segreguje, który obiekt jest poprawny a który kulawy. Poprawny ma metody przetwarzające dane, o których wiemy, że są na 100% poprawne, a błędny może mieć metody informujące, dlaczego nie jest taki, czego mu brakuje i zawiera surowe dane.