• Как оформить все свойства книг не через константы?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Надо разобраться что такое объекты.
    У вас, видимо, объект Книга с полями обложка, имя, описание, ссылки...
    Вот так это будет в коде:
    class Book {
      String cover;
      String name;
      String desc;
      // и т.д...
    }

    Такими объектами будет легко пользоваться и всегда будет понятно, к какой книге принадлежит то или иное описание или урл.
    Почитайте про ООП - там об этом обо всем.
    Затем уже про сериализацию/десериализацию объектов, а там уже и до БД дойдете...
    Ответ написан
    3 комментария
  • Как оформить все свойства книг не через константы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Рефакторинг introduce constant не является обязательным. Тоесть ты можешь просто в коде писать хардкодом строки если они используются только 1 раз. С точки зрения компиллятора все подобные строки будут константами в блоке констант класса поэтому декларация их отдельно имеет чисто эстетический характер.

    По поводу лесенки из if-else. Здесь можно два рефакторинга. Во первых убрать цепочку методов.
    Вот это
    if (backMessage.getCaption().contains(PZV_NAME)) {
                        whichBook(POD_COVER, POD_NAME, POD_DESC);
    } else if (backMessage.getCaption().contains(POD_NAME)) {

    заменить на
    val caption = backMessage.getCaption()
    if (caption.contains(PZV_NAME)) {
                        whichBook(POD_COVER, POD_NAME, POD_DESC);
    } else if (caption.contains(POD_NAME)) {

    И второе. Вот эта логика может быть сведена к вызову одной функции которая на вход получает атом и на выходе возвращает тройку атомов (tuple или triple). В этом случае логика if-else сводится к конфигурации таблички замен
    и к функции которая просто делает декодирование одного значения в другое.

    static final Map<String,Triple<String,String,String>> = new HashMap() {{
       put(PZV_NAME, ImmutableTriple.of(POD_COVER, POD_NAME, POD_DESC);
       put(POD_NAME, ImmutableTriple.of(KORR_COVER, KORR_NAME, KORR_DESC);
       .......
    }};
    
    Map<String,Triple<String,String,String>> transform(String arg) {
      return map.entrySet()
                    .stream()
                    .filter(x -> x.getKey().contains(arg))
                    .findFirst().get().getValue();
    }
    Ответ написан
    3 комментария
  • Как оформить все свойства книг не через константы?

    @Mootfrost
    C#, C++, JS, Python
    Используйте базу данных, ведь книг будет больше одной, возможно тысячи
    Ответ написан
    5 комментариев