Ваша BillBundle
идея выглядит хорошо для меня. Вы говорите, что вам приходилось многократно писать код:
Billbundle billBundle = new BillBundle();
billBundle.setFives(fives);
billBundle.setTens(tens);
billBundle.setTwenties(twenties);
billBundle.setFifties(fifties);
depositCash(billBundle);
Но вы действительно или вы просто думаете, что можете?
A BillBundle
, как это действительно должно быть сделано, только когда счета подсчитаны , и я был бы удивлен, если бы это произошло более чем в паре мест.
Код, который на самом деле не изменяется и не определяет номер каждой купюры, должен просто передавать пакет купюр. Метод, который регистрирует, сколько счетов каждого вида было внесено? Передайте это BillBundle
, которое вы получили от подсчета. Метод, который складывает общую сумму денег? Передайте это BillBundle
, которое вы получили от подсчета. и т. д.
Это намного лучше, чем обойти все 4 параметра по двум причинам:
Гораздо меньше возможностей запутаться - каждая функция, которая принимает 4 счета-фактуры и передает их в другое место, имеет шанс передать их в неправильном порядке или в неправильных положениях параметров. Это особенно проблематично, поскольку фактические значения имеют одинаковый тип (т. Е. int
), и многие аргументы используют этот тип для совершенно разных вещей.
Гораздо меньше кода на самом деле зависит от видов счетов, которые вы поддерживаете. Допустим, ваша страна переключается на монету в 5 долларов, или вы просто не хотите, чтобы они были в машинах больше ... сколько кода нужно изменить, чтобы избавиться от пятерок? Вам нужно будет изменить код, который считает счета, и все остальные вещи, которые на самом деле заботятся о суммах каждого счета, но вам не нужно менять код, который просто проходит эти счета. Они могут просто обойти оригинал BillBundle
и не беспокоиться об этом.
Одно изменение, которое я хотел бы предложить, - сделать ваш BillBundle неизменным. Тогда вам не нужно беспокоиться о том, чтобы кто-нибудь изменил его, когда вы его передаете.
Что-то вроде:
class BillBundle
{
public final int fives;
public final int tens;
public final int twenties;
public final int fifties;
public BillBundle(int fives, int tens, int twenties, int fifties)
{
this.fives = fives;
this.tens = tens;
this.twenties = twenties;
this.fifties = fifties;
}
}
Я предупрежу вас, что большинство Java-программистов предпочитают методы getter вместо открытых полей final, но для этого нет веских причин.