Имеется хранилище паролей, которое может быть JSON файлом или браться из SQLite. Иерархия следующая:
Storage-> Folder -> Item -> Data.
Хочется чтобы при изменении, или создании, Item'а или Folder'а Storage меняло своё состояние с Opened на Modified.
Пока имеется два варианта:
1. God Interface(поскольку проект на go), который содержит всякие методы по добавлению и удалению(их получается 8), к уже 5 имеющимся
2. Иерархия интерфейсов, которые содержат методы Storage(), Folder(), Item() для Folder'а, Item'а и Data соответственно, которые возвращают интерфейс "родителя".
God Interface решает проблему, но слишком много методов для одного интерфейса;
Иерархия интерфейсов разделяет логику, но для изменения состояния придётся городить штуки вроде item.Folder().Storage().SetStatus(Modified), но и сделать метод SetStatus() экспортируемым, чего не хотелось бы.
Есть какие-нибудь другие варианты реализации такой "иерархии"?