Как я узнаю, что у класса много ответственности, и как мне устранить эту проблему? - PullRequest
1 голос
/ 20 марта 2019

Я делаю проект о ресторане, в этих ресторанах много продуктов (продуктов питания), у меня есть класс Food Combo, и этот комбо соответствует 1 напиток, 1 основное блюдо и 2 блюда. У этого класса есть много методов и атрибутов, немногие из них выполняют математические операции и проверки, когда это должно только возвратить цену и принести его дополнительную цену

public class FoodCombo {

private ArrayList<Product> list = new ArrayList(); //Each Product has his own price
private boolean refill; //Do you want your drink to have refill?
private boolean supersizing; //
private final double COMBO_DISCOUNT = 0.20;
private final double REFILL_PRICE = 300;
private final double SUPERSIZING_PRICE = 300;

public FoodCombo() {
}

public void addProducto(Product product) {
    list.add(product);
}

/* This class needs one Main Dish, two Extras, and One Drink to be considered
as a Food Combo*/
public int countMainDishes() //1  


public int countExtras();     //2

public int countDrinks() //3  


public boolean isItCombo() {
}

;  //Use above methods to verify

//Calculate Methods
public double calculateSubPrice();

public double calculatediscount()

public double calculateRefill();

public double calculateSuperSize();

public double calculateTotal();

public String toString();

// Я бы оценил ваше предложение:)

}

Я размышляю над разделением ответственности этого класса на несколько классов, поэтому, сколько предложений я должен создать, чтобы реализовать передовые методы программирования?и что они должны делать?

1 Ответ

1 голос
/ 20 марта 2019

Первое: забудьте о реализации.Таким образом, «немногие из методов выполняют математические операции и проверки, когда это должно только вернуть цену и принести его дополнительную цену», не имеет значения.

Если вы хотите знать, делает ли класс слишком много, запишитедля чего предназначен этот класс и что он делает с точки зрения высокого уровня.Затем взгляните на то, что вы написали, и вы сможете сказать, слишком ли много он делает.Посмотрите, сфокусирована ли его ответственность.

Например, если у меня есть класс:

"Этот класс отвечает за взаимодействие с устройством NRI G13 Acceptor Acceptor, предоставляя API для приема монетобрабатывать ошибки и сообщать о сумме полученных денежных средств. "

Тогда, даже несмотря на то, что его реализация может делать много, сам класс не делает слишком много.

В качестве альтернативы, если яиметь класс:

"Этот класс читает из базы данных, обрабатывает данные, отправляет их на другой сервер и отправляет копию в браузер."

Тогда даже если его реализация может бытьдовольно простой (все эти операции обычно имеют одну функцию для вызова из библиотеки), класс делает слишком много, потому что несет ответственность за достижение слишком большого количества результатов.

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