Как сделать общую функцию удаления для разных бизнес -объектов в C#C#

Место общения программистов C#
Ответить
Anonymous
 Как сделать общую функцию удаления для разных бизнес -объектов в C#

Сообщение Anonymous »

У меня есть несколько классов (

Код: Выделить всё

bizMember
, Bizparsha и Bizearningyear ), все из которых наследуют от общего базового класса Bizobject . Каждый из этих классов имеет метод удаления (INT ID) , который удаляет элемент из базы данных. из передаваемого объекта с использованием , затем вызывает соответствующий метод Delete . Однако этот подход не является масштабируемым. Я хочу более общий способ справиться с этим, чтобы я мог пройти в любом классе, который наследует от bizobject и автоматически вызвать его метод удаления.
Вот мой Текущая реализация: < /p>

Код: Выделить всё

private async Task DeleteItem(object item)
{
if (item is bizEarningYear bey)
{
await bey.Delete(bey.EarningYearId);
await _viewmodelbinder.LoadEarningYearList();
}
else if (item is bizParsha bp)
{
await bp.Delete(bp.ParshaId);
await _viewmodelbinder.LoadParshaList();
}
else if (item is bizMember m)
{
await m.Delete(m.MemberId);
await _viewmodelbinder.LoadMemberList();
}
}

private async void Delete_Clicked(object sender, EventArgs e)
{
if (sender is Button b && await PromptBeforeDelete(b.Parent.BindingContext))
{
try
{
await DeleteItem(b.Parent.BindingContext);
}
catch (Exception ex)
{
await DisplayAlert(this.ToString(), ex.Message, "Close");
}
}
}
< /code>
Что мне нужно: < /p>
[list]
[*] Масштабируемый способ удалить проверку типа (это операторы). < /li >
 Общая функция, которая работает с любым BizObject и вызывает его метод
DELETE Dynamical. < /li>
< /ul>
ограничения: < / P>

 Классы (bizMember
, bizparsha , bizearningyear ) все наследует
from bizobject .
[*] Каждый класс имеет удаление (Delete ( INT ID) < /code> Метод, который принимает идентификатор объекта
в качестве параметра. < /li>
Мне нужно обновить соответствующий список в _ViewModelbinder после
deletion.
[/list]
Как я могу рефактор deleteitem быть более общим и масштабируемым?
Я попытался использовать дженерики, такие как: < /p>

Код: Выделить всё

private async Task DeleteItem(bizObject item) where T : bizObject, new()
{
//code here
}
Тем не менее, я столкнулся с проблемой при попытке передать BindingContext из события нажатия кнопки. Во время события я не знаю тип объекта, поэтому я не могу поднять его на правильный общий тип.

Подробнее здесь: https://stackoverflow.com/questions/794 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»