Nie no, jak ma być elastycznie, to trzeba zrobić tak:
class Issue
{
public Map<string, bool> states;
}
Wtedy można zmieniać dynamicznie nie tylko stany, i mieć issue jednocześnie open i closed, ale nawet ich nazwy! I w ogóle jak mamy np. { { "Open": true"}, { "Closed": false } }
, to zmienić flow możemy zarówno zmieniając wartości, jak i nazwy kluczy. To jest dopiero elastyczność!
Zresztą, można nawet pójść dalej, bo bool to jednak mocno ograniczający jest, tylko dwie wartości, i zrobić public Map<string, string> states
. I wtedy nie ograniczamy się do true i false, ale możemy mieć też "don't care" albo "maybe tommorrow". I oczywiście "null".
UnassignedIssue, AssignedIssue, to złe podejście. Obiektów nie można robić tak dużo, bo zajmują pamięć. No i w ogóle nie mają nic wspólnego z modelem, bo przecież w modelu nie ma czegoś takiego jak przypisane i nieprzypisane zadanie. Absolutnie.