активно изучаю блт.
разобрался как кешировать изменения бизнес-объекта на клиенте с помощью EditableObject.
разобрался как реализовать удаление бизнес-объекта из БД с помощью акссесора.
Но пока не могу разобраться как "кешировать" удаление бизнес-объекта.
как это сделать правильно в рамках блт?
Здравствуйте, Аноним, Вы писали:
А>активно изучаю блт. А>разобрался как кешировать изменения бизнес-объекта на клиенте с помощью EditableObject. А>разобрался как реализовать удаление бизнес-объекта из БД с помощью акссесора. А>Но пока не могу разобраться как "кешировать" удаление бизнес-объекта. А>как это сделать правильно в рамках блт?
эээ... нууу... попробую предположить что имелось ввиду нечто вроде EditableArray.DelItems
Re[2]: удаление бизнес-объекта
От:
Аноним
Дата:
23.07.09 14:57
Оценка:
Здравствуйте, ili, Вы писали:
ili>Здравствуйте, Аноним, Вы писали:
А>>активно изучаю блт. А>>разобрался как кешировать изменения бизнес-объекта на клиенте с помощью EditableObject. А>>разобрался как реализовать удаление бизнес-объекта из БД с помощью акссесора. А>>Но пока не могу разобраться как "кешировать" удаление бизнес-объекта. А>>как это сделать правильно в рамках блт?
ili>эээ... нууу... попробую предположить что имелось ввиду нечто вроде EditableArray.DelItems
по моему DelItems означает, что объект удален из списка, при этом он сам остается жить. поправьте если ошибаюсь.
Здравствуйте, Аноним, Вы писали:
А>по моему DelItems означает, что объект удален из списка, при этом он сам остается жить. поправьте если ошибаюсь.
да, это список удаленных из списка объектов.
но что значит "остается жить" я, честно говоря, не понимаю...
поясните подробней что вам надо получить в результате.
Re[4]: удаление бизнес-объекта
От:
Аноним
Дата:
24.07.09 11:22
Оценка:
Здравствуйте, ili, Вы писали:
ili>Здравствуйте, Аноним, Вы писали:
А>>по моему DelItems означает, что объект удален из списка, при этом он сам остается жить. поправьте если ошибаюсь.
ili>да, это список удаленных из списка объектов.
ili>но что значит "остается жить" я, честно говоря, не понимаю... ili>поясните подробней что вам надо получить в результате.
Попробую конкретизировать как я это себе представляю:
1. для объекта есть метод Delete, который отмечает его как удаленный
2. у объекта есть свойство IsDeleted, которое показывает помечен объект на удаление или нет
3. EditableList фильтрует объекты у которых IsDeleted=true
4. DataAccessor в вызове ExecuteObject вызывает для объекта DeleteCommand , если IsDeleted =true
Здравствуйте, Аноним, Вы писали:
А>в БЛТ ничего подобного пока не нашел.
ээээ...
EditableList<MyObject> list;
// как-то инициируем этот самый лист...
// из базы берем, руками делаем, или еще как
// далее выполняем над ним шаманства (добавляем, удаляем, правим элементы)
// теперь хотим "зскоммитить" изменения в базуif (!list.IsDirty) //в результате "шаманств" не изменилсяreturn;
using(DbManager db = new DbManager())
{
MyObjectAccessor da = MyObjectAccessor.CreateInstance(db);
da.BeginTransaction();
foreach(var toDel in list.DelItems)
da.Delete(toDel);
foreach(var toIns in list.NewItems)
da.Insert(toIns);
foreach(var e in list)
if(e.IsDirty)
da.Update(e);
da.CommitTransaction();
list.AcceptChanges();
}
Здравствуйте, ili, Вы писали:
ili>Здравствуйте, Аноним, Вы писали:
А>>в БЛТ ничего подобного пока не нашел.
ili>ээээ...
ili>
ili>EditableList<MyObject> list;
ili>// как-то инициируем этот самый лист...
ili>// из базы берем, руками делаем, или еще как
ili>// далее выполняем над ним шаманства (добавляем, удаляем, правим элементы)
ili>// теперь хотим "зскоммитить" изменения в базу
ili>if (!list.IsDirty) //в результате "шаманств" не изменился
ili> return;
ili>using(DbManager db = new DbManager())
ili>{
ili> MyObjectAccessor da = MyObjectAccessor.CreateInstance(db);
ili> da.BeginTransaction();
ili> foreach(var toDel in list.DelItems)
ili> da.Delete(toDel);
ili> foreach(var toIns in list.NewItems)
ili> da.Insert(toIns);
ili> foreach(var e in list)
ili> if(e.IsDirty)
ili> da.Update(e);
ili> da.CommitTransaction();
ili> list.AcceptChanges();
ili>}
ili>
Попробовал использовать такой подход и столкнулся с двумя проблемами:
1. бизнес-объект может загружаться и использоваться одиночно. Создание списка, используемого для хранения состояния удален/не удален приводит к лишным накладным расходам.
2. если бизнес-объект положен в список, то необходимо во всех местах где используется бизнес-объект, знать и про этот самый список.
И еще вопрос: описанный подход, "единственный-официальный-правильный" для данной задачи?
Здравствуйте, Ctraveller, Вы писали:
C>Попробовал использовать такой подход и столкнулся с двумя проблемами:
C>1. бизнес-объект может загружаться и использоваться одиночно. Создание списка, используемого для хранения состояния удален/не удален приводит к лишным накладным расходам.
если он пользуется одиночно, то вообще проблем не возникает — всегда известно что с ним делать
C>2. если бизнес-объект положен в список, то необходимо во всех местах где используется бизнес-объект, знать и про этот самый список.
эмн.. вообще не обязательно всегда и везде это знать, но это все зависит от того как архитектурно у вас все устроено.
если знать вездеи всегда, то нужен репозитарий (обеспечение ссылочной целостности). как таковой без этого паттерна вполне можно жить в большинстве случаев.
C>И еще вопрос: описанный подход, "единственный-официальный-правильный" для данной задачи?
нет более того "единственно-официально-правильных" подходов в BLT нет вообще. BLT — фреймворк для фреймворков — что хотите, то и воротите.