В идеале вы используете или создаете по мере необходимости классы, которые отражают то, как все работает в реальном мире, то, что вы моделируете в коде. Такие классы дают нам уровень абстракции, поэтому мы можем кодировать с точки зрения того, что мы моделируем / симулируем. Кроме того, при кодировании какой-то сложной вещи помогает использование знакомой парадигмы. То есть: О, этот класс Fuzzinator использует стек. Я знаю, что такое стек и как он работает.
Во-вторых, этот класс более высокого уровня абстракции дает нам код, который работает (мы предполагаем, что .NET Framework была протестирована) и экономит нам время и усилия на повторное изобретение колеса.
В-третьих, код легче читать, легче понимать, легче изменять и так далее. Это более ремонтопригодно.
Использование классов с более утонченной функциональностью помогает ограничить использование этого метода.
В целом ваше приложение просто лучше , если оно закодировано на соответствующих уровнях абстракции.
Стек является одним из этих классов.
Мой калькулятор HP-41X выполняет свою арифметику с использованием стека. Этот способ расчета называется RPN - обратная польская запись.
Если бы я имитировал кафетерий, стек был бы идеальным для этой стопки тарелок. Тарелки входят и выходят из стопки сверху. Не середина, не конец; только верх. Стек. Я могу только использовать Push () и Pop (), что делает код более простым и понятным.
В качестве альтернативы, представьте себе кодирование с использованием эквивалента C # субатомных частиц - универсальной коллекции или универсального IEnumerable и т. Д. В итоге я использую общие служебные методы и свойства с общими именами с несколькими переменными номерами параметров, которые в совокупности скрывают факт, что я укладываю тарелки.