Я не уверен, как именно описать этот вопрос, но здесь идет.У меня есть иерархия классов объектов, которые отображаются в базе данных SQLite.У меня уже есть весь нетривиальный код, написанный для связи между объектами .NET и базой данных.
У меня есть базовый интерфейс следующим образом:
public interface IBackendObject
{
void Read(int id);
void Refresh();
void Save();
void Delete();
}
Этоосновные операции CRUD над любым объектом.Затем я реализовал базовый класс, который инкапсулирует большую часть функциональности.
public abstract class ABackendObject : IBackendObject
{
protected ABackendObject() { } // constructor used to instantiate new objects
protected ABackendObject(int id) { Read(id); } // constructor used to load object
public void Read(int id) { ... } // implemented here is the DB code
}
Теперь, наконец, у меня есть мои конкретные дочерние объекты, каждый из которых имеет свои собственные таблицы в базе данных:
public class ChildObject : ABackendObject
{
public ChildObject() : base() { }
public ChildObject(int id) : base(id) { }
}
Пока что это прекрасно работает для всех моих целей.У дочернего объекта есть несколько методов обратного вызова, которые используются базовым классом для правильной реализации данных.
Теперь я хочу сделать это немного более эффективным.Например, в следующем коде:
public void SomeFunction1()
{
ChildObject obj = new ChildObject(1);
obj.Property1 = "blah!";
obj.Save();
}
public void SomeFunction2()
{
ChildObject obj = new ChildObject(1);
obj.Property2 = "blah!";
obj.Save();
}
В этом случае я создам два совершенно новых экземпляра памяти, и в зависимости от порядка вызова SomeFunction1 и SomeFunction2, Property1 или Property2 могут не бытьсохранены.Я хочу добиться того, чтобы оба этих экземпляра каким-то образом указывали на одну и ту же область памяти - я не думаю, что это будет возможно, если я использую ключевое слово «new», поэтому я искал подсказки относительнокак продолжить.
В идеале я бы хотел сохранить кэш всех загруженных объектов в моем классе ABackendObject
и возвращать ссылки на память на уже загруженные объекты по запросу или загружать объект из памяти, если онне существует и добавьте его в кеш.У меня есть много кода, который уже использует эту платформу, поэтому мне, конечно, придется изменить много вещей, чтобы это заработало, но я просто хотел несколько советов о том, как действовать.
Спасибо!