У меня есть базовый класс, который объявляет частную нестатическую ссылку на экземпляр DataBase Handler
(DBH).
DBH - это класс, который мы используем для упрощения операций с базами данных производных классов. Он содержит обычные методы, такие как ExecuteScalar
, StartTransaction
среди других; и это обеспечивает дополнительные преимущества в контексте приложения, такие как кэширование и zero configuration
.
Экземпляры производных классов используют DBH для чтения / сохранения своего состояния в базе данных, и, поскольку их операции не являются атомарными, все производные классы используют эту транзакцию. Все происходит в одном месте: виртуальный метод с именем InsertUpdate()
объявлен в базовом классе.
Далее у меня есть коллекция (называемая Book) экземпляров производных классов. Я хочу принимать обновления коллекции как транзакцию.
Я хочу добиться чего-то похожего на это:
DatabaseHandler dbh = new DatabaseHandler()
t = dbh.StartTrasaction();
foreach( Type o in Book<Type> )
{
o.prop1 = ..
o.prop2 = ...
o.method1() ...
o.InsertUpdate(t); // uses its own instance of DatabaseHandler and starts its own transaction
}
dbh.EndTransaction(t);
В настоящее время метод InsertUpdate
не содержит параметров. Я думаю, мне придется ввести перегруженную версию, которая принимает объект транзакции.
Помимо решения моей текущей проблемы, есть ли какие-либо проблемы с дизайном, о которых мне нужно знать? Как я могу улучшить этот дизайн или создать лучший дизайн?