Поддерживаемость лучше в сценарии 2, потому что улучшена инкапсуляция OrderLine (т.е. кто-то, поддерживающий этот код, поблагодарит вас за , а не , включая логику, что должен быть в OrderLine в Order вместо этого).
Производительность будет хуже в сценарии 2, поскольку (вероятные) оптимизации компилятора будут означать, что вызовы getArticle (). GetPrice () и getQuantity () оптимизировать так же, как , напрямую получая доступ к цене и количеству переменных в памяти (будучи примитивами , они будутв стеке , предполагая, что эти методы get являются простыми средствами доступа), тогда как subTotal () не будет оптимизировать таким образом, поскольку это не простой метод доступа (т.е.он содержит саму логику), что означает, что вы вынуждены проходить к куче (где живут экземпляры OrderLine), чтобы получить доступ к переменным price . Доступ к стеку намного быстрее, чем кучи.
Таким образом, в сценарии 1 переменные цены и количества доступны непосредственно в стеке с помощью цикла в Order.В сценарии 2 вы заставляете указатель / указатель перемещаться в кучу из-за вызова метода subTotal (), который требует времени для обработки, хотя и незначительной разницы в реальности для сегодняшних скоростей процессора и шины памяти.
Стек = примитивы (то есть цена, количество) и ссылки / указатели.Куча = объекты (т.е. экземпляры Order, OrderLine и Article).