Как мне узнать, обладает ли класс высокой ответственностью и как мне устранить эту проблему

#java #oop

#java #ооп

Вопрос:

Я делаю проект о ресторане, в этом ресторане много продуктов (food), у меня есть комбинация блюд класса, и эта комбинация состоит из 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. Вы исследовали принцип единой ответственности? «Сколько классов я должен создать» звучит так, как будто вы хотите лично ознакомиться с принципом, независимо от того, сколько примеров этого принципа существует в Интернете.

2. Вам следует прочитать о принципах SOLID, изучить некоторые шаблоны кодирования, чтобы вы могли, наконец, попытаться применить некоторую архитектуру к вашим будущим продуктам.

3. @VinceEmigh я немного изучаю это, но вы правы, я должен изучить это подробнее, спасибо за ваш отзыв 🙂

4. @ingkevin понял, спасибо, братан

Ответ №1:

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

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

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

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

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

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

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

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

Комментарии:

1. Спасибо за ваш отзыв, сэр, второй абзац превосходен, я собираюсь применить некоторые из этих вещей к моим будущим проектам и к этому.