Во-первых, судя по вашему описанию предметной области задачи (всего один тип объектов, фиксированный набор атрибутов объекта), база данных – то, что вам нужно. Не надо бояться инициализации объектов, потому что способа избежать восстановления объекта из хранилища (какое бы оно ни было) в данном случае нет: храните в базе – придётся инициализировать объект значениями столбцов таблицы; храните, скажем, в JSON – придётся инициализировать объект значениями, полученными из JSON-объекта (что, кстати, ещё менее удобно); используете Java-сериализацию – и там тоже будут накладные расходы на восстановление объекта из формата, в котором вы его сохранили, ну и так далее. А БД – очень удобный формат. К тому же, никто вас не заставляет инициализировать все-все объекты на старте программы: если у пользователя очень много заметок, то можно просто подгружать новые по мере листания списка.
Во-вторых, по поводу
напоминания — это объекты, с которыми удобно было бы работать, непосредственно обращаясь к ним, вызывая методы
Есть такая вещь, как
single responsibility principle (и
то же самое на русском), суть которой вкратце состоит в том, что класс должен выполнять только конкретный ограниченный круг обязанностей, и больше ничего. В данном случае ваша ошибка в том, что вы думаете о том, чтобы дать классу заметки обязанности, которые ему по идее не свойственны. Заметка в данном случае – просто сущность, отображающая хранимые данные, больше ничего, и она ничего не должна знать об уровне хранения и т.п. Так что методов типа delete(), save() и подобных у неё точно не должно быть. А вам для удобства хранения и загрузки объектов я предлагаю сделать отдельный класс типа такого (написано на коленке просто чтобы передать идею):
public class NotesManager {
private final SQLiteDatabase db;
public NotesManager(SQLiteDatabase db) { this.db = db; }
public Note findById(int noteId) {
Cursor c = db.query(...);
//тут чтение в локальные переменные значений
//отдельных полей из курсора,
//если он вернул какой-то результат
return new Note(...ранее считанные значения полей как аргументы конструктора...);
}
public void save(...перечисление полей...) {
//после проверки введённых данных делаете
//insert в базу с переданными значениями полей
}
}
Также вам понадобятся методы create и delete, но если вы поняли идею, то наверняка справитесь :) Задавайте ещё вопросы, если что-то непонятно.