Что лучший способ состоит в том, чтобы обработать сосуществование “международного перечислимого” шаблона с перечислениями Java, поскольку API развивается?

Я думаю, что нет прямой замены HystrixCommand в Resilience4j. Наиболее похожая вещь будет CircuitBreaker.decorateCompletionStage или CircuitBreaker.executeCompletionStage. С помощью этих методов вы можете украсить любой тип на CompletableFuture поставщика. Другим вариантом будет полагаться на нашу интеграцию с различными асинхронными модулями, такими как rxjava2 или reactor. И, конечно, если ни одна из этих опций вам не подходит, пожалуйста, не забывайте, что Resilience4j - это очень незавершенная, модульная и компонуемая библиотека. Вы можете установить наш автоматический выключатель в любую библиотеку с парадигмой параллелизма, используя наши 3 метода самого низкого уровня:

  1. CircuitBreaker.isCallPermitted
  2. CircuitBreaker.onError
  3. [ 1110]

То же самое верно и для других наших основных компонентов. Надеюсь, этот ответ поможет хоть немного. Если у вас есть другие вопросы, я буду рад помочь. Счастливого взлома

5
задан Gabriele Petronella 2 November 2013 в 18:04
поделиться

5 ответов

Личное мнение - то, что это, вероятно, не стоит усилия по попытке преобразовать. С одной стороны, "общедоступная статическая заключительная международная" идиома не уходит в ближайшее время, учитывая, что она опрыснута подробно на всем протяжении JDK. Для другого, разыскивая использования исходного ints, вероятно, будет действительно неприятно, учитывая, что Ваши классы скомпилируют далеко ссылку, таким образом, Вы будете вероятны не знать о повреждении чего-либо, пока не слишком поздно (которым я имею в виду

class A
   {
       public static final int MY_CONSTANT=1
   }

   class B
   {
           ....
           i+=A.MY_CONSTANT; 
   }

компилируется в

i+=1

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

Это - довольно известная идиома, вероятно, не настолько ужасная для оставления его внутри, конечно, лучше, чем альтернатива.

3
ответ дан 13 December 2019 в 19:38
поделиться

Как, вероятно, это, что потребители API собираются перепутать VitaminType с NutrientType? Если это маловероятно, то, возможно, лучше поддержать непротиворечивость дизайна API, особенно если база пользователей устанавливается, и Вы хотите минимизировать дельту работы/изучения, требуемой клиентами. Если беспорядок вероятен, то NutrientType должен, вероятно, стать перечислением.

Это не должно быть оптовой торговлей, в течение ночи изменяются; например, Вы могли выставить старые международные значения через перечисление:

public enum Vitamin {

    RETINOL(0), THIAMIN(1), RIBOFLAVIN(2);

    private final int intValue;

    Vitamin(int n) {
        intValue = n;
    }

    public int getVitaminType() {
        return intValue;
    }

    public static Vitamin asVitamin(int intValue) {
        for (Vitamin vitamin : Vitamin.values()) {
            if (intValue == vitamin.getVitaminType()) {
                return vitamin;
            }
        }
        throw new IllegalArgumentException();
    }

}

/** Use foo.Vitamin instead */
@Deprecated
public class VitaminType {

    public static final int RETINOL = Vitamin.RETINOL.getVitaminType();
    public static final int THIAMIN = Vitamin.THIAMIN.getVitaminType();
    public static final int RIBOFLAVIN = Vitamin.RIBOFLAVIN.getVitaminType();

}

Это позволяет Вам обновлять API и дает Вам некоторый контроль, когда удержать от использования старый тип и планирование переключения в любом коде, который полагается на старый тип внутренне.

Некоторый уход требуется, чтобы сохранять литеральные значения в синхронизации с теми, которые, возможно, были встроены со старым потребительским кодом.

6
ответ дан 13 December 2019 в 19:38
поделиться

Ожидайте следующей главной версии, измените все на перечисление и предоставьте сценарий (sed, жемчуг, Java, Groovy...) для преобразования существующего исходного кода для использования нового синтаксиса.

Очевидно, это имеет два недостатка:

  • Никакая совместимость на уровне двоичных кодов. То, насколько важный этот, зависит от вариантов использования, но может быть приемлемым в случае новой главной версии
  • Пользователи должны сделать некоторую работу. Если работа достаточно проста, то это также может быть приемлемо.

Тем временем добавьте новые типы как перечисления и сохраните старые типы как ints.

1
ответ дан 13 December 2019 в 19:38
поделиться

Существует слух, что создатель "делает" реализованными, что синтаксис Make-файлов был неверен, но чувствовал, что он не мог изменить его, потому что у него уже было 10 пользователей.

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

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

1
ответ дан 13 December 2019 в 19:38
поделиться

Лучшее было бы то, если Вы могли бы просто зафиксировать опубликованные версии, если это возможно. По-моему, непротиворечивость была бы лучшим решением, таким образом, необходимо будет сделать некоторый рефакторинг. Мне лично не нравятся удержанные от использования вещи, потому что они входят в путь. Вы смогли ожидать до большего выпуска версии и использовать те ints до тех пор и осуществлять рефакторинг все в большом проекте. Если это не возможно, Вы могли бы считать себя застрявшими в ints, если Вы не создаете некоторые виды оберток или чего-то.

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

Клиент мог бы фрагментировать проект и купить другой продукт, если что-то идет не так, как надо. Обычно это не проблема клиента, может Вы предоставлять рефакторинг или нет, они просто покупают то, что является соответствующим и применимым им. Таким образом в конце это - хитрая проблема, и заботу нужно соблюдать.

0
ответ дан 13 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: