Проблема родительской / дочерней архитектуры - PullRequest
0 голосов
/ 29 сентября 2010

мое приложение имеет следующую структуру:

public class Transaction
{
   public int TransactionID { get; set; }
   public TransactionTypes Type { get; set; } // Enum for the type of transaction
   public decimal Amount { get; set; }
   public virtual decimal GrandTotal { get; set; } // In this case this would simply be the Amount
}

public class MembershipTransaction : Transaction
{
   public decimal ExtraAmount { get; set; }
   public override decimal GrandTotal { get { return base.GrandTotal + ExtraAmount; } }
}

Мне было интересно, должен ли GrandTotal для транзакции автоматически включать ExtraAmount.Преимущества этого состоят в том, что если я получу все транзакции, показатель GrandTotal будет правильным независимо от типа транзакции.С помощью приведенной выше логики мне в настоящее время приходится переключать каждый тип транзакции и возвращать GrandTotal для производного типа.

Я был бы признателен, если бы кто-то мог прояснить это для меня.Спасибо

Ответы [ 3 ]

2 голосов
/ 29 сентября 2010

Я бы рекомендовал вам включить его в базу, чтобы вы могли использовать интерфейс / абстрактный класс.

Каждый отдельный тип транзакции должен знать, как рассчитать свою собственную дополнительную сумму (равную нулю, процент отСумма (фиксированные суммы в скобках), чтобы бизнес-логика находилась в классе, переопределяющем базовый / абстрактный класс.

Это позволит вам использовать итоговую сумму, не зная, какой фактический тип транзакции.

2 голосов
/ 29 сентября 2010

Общий итог - это общий итог, и поэтому он имеет смысл, если он включает ExtraAmount.Это также имеет смысл в контексте того, что для получения правильного значения GrandTotal в коде могут потребоваться только знания о базовом классе Transaction.Какую цель имеет перечисление TransactionTypes?Разве недостаточно изучить тип самого объекта транзакции?

1 голос
/ 29 сентября 2010

Наличие дополнительной суммы в составе унаследованного класса и перерасчет общей суммы, насколько мне известно, нарушит принцип замещения Лискова.ExtraAmount и расчет GrandTotal должны быть включены в ваш базовый класс.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...