Код, подобный этому, не пахнет для меня хорошо.
Вы, вероятно, делаете свой собственный O / R-M, поэтому не знаете всех деталей.
Но использование интерфейсов может помочь (в этом случае сущность Payment будет иметь дело с кодом DAL) ... лучше не пахнет.
Так что, вероятно, регистрация классов сделает работу:
private void SavePaymentType(PaymentType )
{
if (paymentType == null)
throw new NotSupportedException("Handle nulls too");
IClassPersister persister;
if (!paymentType2Persister.TryGetValue(paymentType.GetType(), out persister))
throw new ORMException(string.Format("Cannot find persister for {0}", paymentType.GetType().Name))
persister.Save(paymentType);
}
И где-то во время запуска приложения вы можете зарегистрировать PaymentTypes:
paymentType2Persister.Add(typeof(XXXPayment), new XXXPaymentPersistor);
paymentType2Persister.Add(typeof(YYYPayment), new YYYPaymentPersistor);
// etc
Поэтому, когда вам нужно будет добавить другой тип платежа, вам нужно будет добавить для него персистор и зарегистрировать его.
Это выглядит намного лучше, чем оригинальный код для меня.
Приветствие.