Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Исключительные ситуации  [new]
daniel43
Member

Откуда:
Сообщений: 2
Хотелось бы услышать мнение по поводу кода и получить совет по исправлению исключительных ситуаций.

public interface StoreFunc {
    void getIn (int gi); //вход в магазин
    void buyProds (int bp); //приобретение товаров
    void setState (int s); //изменение статуса кассира/магазина
    void show();
}
 
class Cashier {
    String badge; //бейдж, указывающий имя кассира
    int state; //состояние кассира (1 – за кассой, 0 – не на рабочем месте)
    Cashier (String bd) {
        this.badge = bd;
        this.state = 0; 
    }
    public String getBadge() {
        return badge;
    }
    public void setBadge(String badge) {
        this.badge = badge;
    }
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
}
 
class Store implements StoreFunc {
    String address; //адрес магазина
    int openingHours; //количество рабочих часов в день
    int state; //состояние магазина (1 – открыто, 0 – закрыто)
    static int maxProfit; //статическое данное – максимальный доход в день
    Cashier c;
    Store (String ad, int oh, String bd) {
        this.address = ad;
        this.openingHours = oh;
        this.state = 1;
        c = new Cashier (bd);
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getOpeningHours() {
        return openingHours;
    }
    public void setOpeningHours (int openingHours) {
        this.openingHours = openingHours;
    }
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
    public void getIn (int gi) {
        try {
            if (state != 1) throws IllegalArgumentException exc;
        }
    }
    public void buyProds (int bp) {
        try {
            if (state != 1) throws IllegalArgumentException exc;
            if (c.state == 0) throws IndexOutOfBoundException exc;
        }
    }
    static int getMaxProfit() {
        return maxProfit;
    }
    static void setMaxProfit (int maxProfit) {
        this.maxProfit = maxProfit;
    }
}
 
class Products {
    String farm; //название фермы-поставщика продукта
    String shelfLife; //дата – проверка сроков годности продуктов
    Products (String f, String sl) {
        this.farm = f;
        this.shelfLife = sl;
    }
    public String getFarm() {
        return farm;
    }
    void setFarm(String farm) {
        this.farm = farm;
    }
    public String getShelfLife() {
        return shelfLife;
    }
    void setShelfLife(String shelfLife) {
        this.shelfLife = shelfLife
    }
}
 
class ProductStore extends Store {
    Products prod;
    ProductStore (String ad, int oh, String bd, String f, String sl){
        super (ad, oh, bd);
        prod = new Products (f, sl);
    }
    void show() {
        System.out.println();
    }
}
 
public class Main{
    public static void main (String[] args){
        Store store = new Store(“Moskovskaya 2, 8, “Ivanov”);
        store.getIn (10);
        store.c.changeState(1);
        store.buyProds(15);
        ProductStore pStore = new ProductStore (“Krimskaya 5, 6, “Petrov”, “Green Farm”,04.06.2021);
        StoreFunc store1;
        store1 = store;
        store1.show();
        store1 = pStore;
        store1.show();
    }
}
23 май 21, 15:39    [22325867]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
Alexey Tomin
Member

Откуда: Самара
Сообщений: 1995
daniel43,

Вообще непонятно, что Вы хотите сделать.
Во-первых не хватает сущности "покупатель".
Соответственно "войти" должно принимать "покупать" и хранить его у себя. Ну и выйти надо.
"Войти" должно быть методом с результатов- удалось войти, или нет. То, что магазин закрыт- не исключительная ситуация, а нормальная. Ну не вошёл и всё - если дверь не взломал- то исключительной ситуации нет.

Аналогично попытка оплатить - это попытка.
Кассиров, кстати, в общем случае несколько ;)

Плюс ещё непонятно, кто открывает магазин :)
Ну и "время работы" - это не количество рабочих часов, а "от" "до", да ещё и по дням недели. В общем сущность "расписание".

В целом непонятна задача- поэтому можно писать долго, но уже лень.
25 май 21, 09:08    [22326549]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Не очень понятно какой нужно совет по "исправлению". Исправлять можно только то что не соответсвтует модульным тестам или ТЗ.

    public void buyProds (int bp) {
        try {
            if (state != 1) throws IllegalArgumentException exc;
            if (c.state == 0) throws IndexOutOfBoundException exc;
        }
    }


Можно дать такой совет - не использовать исключения для реализации основного (major) business-flow.

Исключения они ... на семантическом уровне должны быть редкими. Потому и называются - исключительные ситуации.
Сеть пропала например. Вот это наша ситуация. Исключительная.
25 май 21, 10:04    [22326576]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton

Можно дать такой совет - не использовать исключения для реализации основного (major) business-flow.

Исключения они ... на семантическом уровне должны быть редкими. Потому и называются - исключительные ситуации.
Сеть пропала например. Вот это наша ситуация. Исключительная.


тут ты не прав,использовать исключения в качестве логики- почему нет- собсвенно кто мешает ,кроме стереотипов
ты же базист - и там на основе исключений так же строиться логика причем даже по номеру ошибки,чем джава для этого хуже?
25 май 21, 19:40    [22327047]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
.

Сообщение было отредактировано: 25 май 21, 20:00
25 май 21, 20:06    [22327068]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
asv79
mayton

Можно дать такой совет - не использовать исключения для реализации основного (major) business-flow.

Исключения они ... на семантическом уровне должны быть редкими. Потому и называются - исключительные ситуации.
Сеть пропала например. Вот это наша ситуация. Исключительная.


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

Ну представь что я - бизнес. Я ставлю тебе задачу. Зашел поциент в магазин. Купил плазму. Оформил кредит
с рассрочкой. У меня есть 2 кейса. Кредитная система выдала кредит. Или отклонила.

Ты спрашиваешь - а где тут исключения? IllegalArgument*, IndexOut*, e.t.c.

Я говорю - я понятия не имею о чем ты говоришь. Если тебе это надо - делай. Но моё описание
бизнес-процесса не содержит таких категорий.
25 май 21, 20:19    [22327076]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton
asv79
пропущено...


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

Ну представь что я - бизнес. Я ставлю тебе задачу. Зашел поциент в магазин. Купил плазму. Оформил кредит
с рассрочкой. У меня есть 2 кейса. Кредитная система выдала кредит. Или отклонила.

Ты спрашиваешь - а где тут исключения? IllegalArgument*, IndexOut*, e.t.c.

Я говорю - я понятия не имею о чем ты говоришь. Если тебе это надо - делай. Но моё описание
бизнес-процесса не содержит таких категорий.

в чем проблема?я ловлю эксепшены ,могу делать далее что хочу с ними ,в том числе строить флоу на этом
и это как бы нормально сейчас - я прохожу сейчас академ курс всем изветсного иститута питерского,так вот там прям советуют
так что отбрасывай стереотипы
25 май 21, 21:06    [22327092]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
asv79
mayton
пропущено...

Ну представь что я - бизнес. Я ставлю тебе задачу. Зашел поциент в магазин. Купил плазму. Оформил кредит
с рассрочкой. У меня есть 2 кейса. Кредитная система выдала кредит. Или отклонила.

Ты спрашиваешь - а где тут исключения? IllegalArgument*, IndexOut*, e.t.c.

Я говорю - я понятия не имею о чем ты говоришь. Если тебе это надо - делай. Но моё описание
бизнес-процесса не содержит таких категорий.

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

Стас а что кредитный отдел тебе скажет? У тебя возникло исключение типа IndexOutOfBound?
Я просто хочу чтоб ты понял мою мысль.
25 май 21, 21:11    [22327096]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton
asv79
пропущено...

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

Стас а что кредитный отдел тебе скажет? У тебя возникло исключение типа IndexOutOfBound?
Я просто хочу чтоб ты понял мою мысль.

ну разные исключения по разному обрабатываются
согласись что если на акаунте нет бабок- то там возникнет иное исключение)
или если у человека неправильная кредитная история - то это вообще обабатывается немного иначе )
майтон - ексепшен флоу норм практика почитай новые статьи
25 май 21, 21:16    [22327101]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
asv79
mayton
пропущено...

Стас а что кредитный отдел тебе скажет? У тебя возникло исключение типа IndexOutOfBound?
Я просто хочу чтоб ты понял мою мысль.

ну разные исключения по разному обрабатываются
согласись что если на акаунте нет бабок- то там возникнет иное исключение)
или если у человека неправильная кредитная история - то это вообще обабатывается немного иначе )
майтон - ексепшен флоу норм практика почитай новые статьи

Ты хочешь сказать что я не пользуюсь исключениями? Конечно пользуюсь.

Но посмотри сюда. Бизнесовый метод. Купить товары. И что? Он бросает обще-системные исключения.

 public void buyProds (int bp) {
        try {
            if (state != 1) throws IllegalArgumentException exc;
            if (c.state == 0) throws IndexOutOfBoundException exc;
        }
    }


Ты-бы так сделал?
25 май 21, 21:18    [22327103]     Ответить | Цитировать Сообщить модератору
 Re: Исключительные ситуации  [new]
asv79
Member

Откуда: Тверь
Сообщений: 3319
mayton
asv79
пропущено...

ну разные исключения по разному обрабатываются
согласись что если на акаунте нет бабок- то там возникнет иное исключение)
или если у человека неправильная кредитная история - то это вообще обабатывается немного иначе )
майтон - ексепшен флоу норм практика почитай новые статьи

Ты хочешь сказать что я не пользуюсь исключениями? Конечно пользуюсь.

Но посмотри сюда. Бизнесовый метод. Купить товары. И что? Он бросает обще-системные исключения.

 public void buyProds (int bp) {
        try {
            if (state != 1) throws IllegalArgumentException exc;
            if (c.state == 0) throws IndexOutOfBoundException exc;
        }
    }


Ты-бы так сделал?


нет конечно,за это я бы уволил
но в тех местах ,где такая необходимость бывает - нет ничего плохого в ексепшн флоу
25 май 21, 22:22    [22327123]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить