Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Вот вам задачка не для собеседования / 25 сообщений из 78, страница 1 из 4
18.02.2020, 18:07
    #39928121
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Создание кастомной анотации которая форматирует стринговое поле в соотсветсвии с патерном

дтошка
Код: java
1.
2.
3.
4.
public class User {
    @ContactNumberFormate
    private String phone;
}



интерфейс
Код: java
1.
2.
3.
4.
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ContactNumberFormate {
}



форматер

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Component
public class PhoneFormatter implements Formatter<User> {

    @Override
    public User parse(String phoneNum, Locale locale) throws ParseException {
        phoneNum = phoneNum.trim();
        String regex = "^\\(?(\\+*1)?[-.\\s*]?([0-9]{3})\\)?[-.\\s*]?([0-9]{3})[-.\\s*]?([0-9]{4})$";
        Pattern.compile(regex).matcher(phoneNum);

        User user = new User();
        user.setPhone(phoneNum);
        return user;
    }

    @Override
    public String print(User user, Locale locale) {
        return null;
    }
}



фабрика

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class PhoneFormatAnnotationFormatterFactory implements 
           AnnotationFormatterFactory<ContactNumberFormate> {
    @Override
    public Set<Class<?>> getFieldTypes() {
        return Collections.singleton(String.class);
    }

    @Override
    public Printer<?> getPrinter(ContactNumberFormate contactNumberFormate, Class<?> aClass) {
        return new PhoneFormatter();
    }

    @Override
    public Parser<?> getParser(ContactNumberFormate contactNumberFormate, Class<?> aClass) {
        return new PhoneFormatter();
    }
}


форматрегистр
Код: java
1.
2.
3.
4.
5.
6.
public class ApplicationFormatterRegister implements FormatterRegistrar {
    @Override
    public void registerFormatters(FormatterRegistry formatterRegistry) {
        formatterRegistry.addFormatterForFieldAnnotation(new PhoneFormatAnnotationFormatterFactory());
    }
}


конфиг
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="applicationConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="formatterRegistrars">
        <set>
            <ref bean="applicationFormatterRegistrar"/>
        </set>
    </property>
</bean>
<bean id="applicationFormatterRegistrar" class="ru.spb.dreamwhite.util.phoneUtil.ApplicationFormatterRegister"/>





проблема

And it does not work: phone-values saved in database, but in non-formatted form.

Note: when I run test in debug with breakpoint on PhoneFormatter, test passes susseccfully. That means, that my Formatter is out of process. But when I set breakpoint on PhoneFormatAnnotationFormatterFactory.getFieldTypes, test interrupted.

In particular, debug with breakpoint on return Collections.singleton(String.class); in

public Set<Class<?>> getFieldTypes() {
return Collections.singleton(String.class);
}
shows that the class PhoneFormatAnnotationFormatterFactory has no fields...
...
Рейтинг: 0 / 0
18.02.2020, 18:54
    #39928149
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
В чем вопрос-то? В том что вопрошающий совершенно не осознает что делает? Formatter<T> в методе parse должен преобразовывать строку в T, а в методе print - T в строку, соответственно, AnnotationFormatterFactory должна регистрировать класс T, а аннотация шлепаться над полем с типом T.

iJava

In particular, debug with breakpoint on return Collections.singleton(String.class); in

public Set<Class<?>> getFieldTypes() {
return Collections.singleton(String.class);
}
shows that the class PhoneFormatAnnotationFormatterFactory has no fields...
Ну да, у PhoneFormatAnnotationFormatterFactory, внезапно, нет полей - это из кода видно
...
Рейтинг: 0 / 0
18.02.2020, 19:01
    #39928152
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Андрей Панфилов,
код не мой ,человек вопрошает просто- я таким не занимался никогда,вот решил может тут кто ответ знает
...
Рейтинг: 0 / 0
18.02.2020, 19:52
    #39928172
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
iJava
Андрей Панфилов,
код не мой ,человек вопрошает просто- я таким не занимался никогда,вот решил может тут кто ответ знает


В подобного рода задачах обычно нет готового рецепта. Даже стековерфлов решает частные случаи.
Я скажу что я пока не знаю как решать эту задачу. И думаю что решать ее можно разными способами.

Я-бы предложил Стас тебе не заниматься фишингом а попробовать разбить задачу на шаги.
И решать ее по мере поступления информации.

Для начала например почитать какой вообще есть API для работы с аннотациями. А потом по AOP.

Кстати совершенно зря и вбестолку здесь указаны Спринговые фабрики. Эта задача решаема и без Спринга.

Нужно просто иметь vision of next step.
...
Рейтинг: 0 / 0
18.02.2020, 20:28
    #39928176
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
эт че снова стасик? а ну окей, расходимся пока он тут всех не отчленососил в 100500-й раз.
...
Рейтинг: 0 / 0
18.02.2020, 22:22
    #39928209
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
mayton
iJava
Андрей Панфилов,
код не мой ,человек вопрошает просто- я таким не занимался никогда,вот решил может тут кто ответ знает


В подобного рода задачах обычно нет готового рецепта. Даже стековерфлов решает частные случаи.
Я скажу что я пока не знаю как решать эту задачу. И думаю что решать ее можно разными способами.

Я-бы предложил Стас тебе не заниматься фишингом а попробовать разбить задачу на шаги.
И решать ее по мере поступления информации.

Для начала например почитать какой вообще есть API для работы с аннотациями. А потом по AOP.

Кстати совершенно зря и вбестолку здесь указаны Спринговые фабрики. Эта задача решаема и без Спринга.

Нужно просто иметь vision of next step.

я так понимаю у него в проекте спринг - поэтому спринг необходим
но так на вскидку понятно что ничего у него там не работает )
я вообще если четно не пойму зачем анотация сдалась- создай метод в который ты свой юзер отдал а получил с полем отформатированным-какие то фабрики в 2020 году ...
...
Рейтинг: 0 / 0
19.02.2020, 12:09
    #39928362
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
mayton,ради интереса решил дома сделать что то на подобии ,только по упрощеной схеме по примеру
удивительно,но анотация вообще не подхватывалась- тоесть по дебагу смотришь заходит параметр в метод с этой -анотацию игноририует ,но отрабатывает без ошибок
код былл что то типо такого

static String (@FormatterString("##-##-##-##")String value){
return value;}
...
Рейтинг: 0 / 0
19.02.2020, 12:24
    #39928372
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Чел я без исходников не отстреливаю ни дупля.
...
Рейтинг: 0 / 0
19.02.2020, 14:02
    #39928430
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
я чот не въехал аннотация должна менять по какой то логике значение поля. окей. я вот думал это для другого. ну снова океееей. как это сделать? ну я бы заюзал рефлексию. через какой-нибудь процессор выхватывал бы аннотации потом поля которые аннотированы и обновлял бы им значения. но это честно говоря говно. а чо можно как то иначе?
...
Рейтинг: 0 / 0
19.02.2020, 16:26
    #39928536
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
andreykaT,

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

вот такие у людей упоротые тим лиды бывают
...
Рейтинг: 0 / 0
19.02.2020, 16:31
    #39928539
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
А на каком этапе она должна "форматировать"?

На присвоении? А как процессить невалидные? На доступе? А как отдавать если невалидное было записано?

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

А если 10 разработчиков реализуют это задание 10 разными (разными! сцуко) способами - то задание
плохое. Неоднозначное и его просто делать нельзя. Его надо грумить и проговаривать.
...
Рейтинг: 0 / 0
19.02.2020, 16:54
    #39928552
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
mayton,
согласен на все 100
если например в метод в качестве параметра прилетит стринг с длинной больше или меньше допустимой то тогда что? нужно как то предусмотреть и этот механизм
вообщем и целом -сама задача поставлена технически безграмонтым человеком,который каким то образом стал тим лидом и мучает людей в своей фирме своей тупостью,причем настолько что его подчиненные уже денег готовы заплатить,лишь бы этот самодур увидел эту анотацию)))
...
Рейтинг: 0 / 0
19.02.2020, 17:35
    #39928588
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Ну вот поэтому ентерпрайз говно. Все эти аннотации превращают Java в нетипобезопасный аналог javascript, при том еще невозможно продебажить
...
Рейтинг: 0 / 0
19.02.2020, 17:53
    #39928600
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
странные и ничем не обоснованные выводы:
о энтерпрайзе
о самодурстве анотации
рассуждение о плохом ТЗ которого никто даже не видел

предложение делать форматирование "одной строчкой в статик методе" вообще за гранью добра и зла (в нормальном энтерпрайзе сотни таблиц/объектов и тысячи-десятки тысяч полей)

Вообще понять, что делает процетированный код - мне не дано. Даже представить, что по мнению авторов должен делать класс PhoneFormatter и почему он так называется я не могу.
...
Рейтинг: 0 / 0
19.02.2020, 18:05
    #39928607
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
iJava
mayton,
согласен на все 100
если например в метод в качестве параметра прилетит стринг с длинной больше или меньше допустимой то тогда что? нужно как то предусмотреть и этот механизм
вообщем и целом -сама задача поставлена технически безграмонтым человеком,который каким то образом стал тим лидом и мучает людей в своей фирме своей тупостью,причем настолько что его подчиненные уже денег готовы заплатить,лишь бы этот самодур увидел эту анотацию)))

Удивительно...

В ASP.NET Core MVC есть встроенные атрибуты проверки модели,
в том числе и [StringLength], что проверяет, что значение свойства строки не превышает ограничение по указанной длине.

И до фига народу пользуется и не считают это самодурством.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class Movie
{
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    public string Title { get; set; }

    [ClassicMovie(1960)]
    [DataType(DataType.Date)]
    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

    [Required]
    [StringLength(1000)]
    public string Description { get; set; }

    [Range(0, 999.99)]
    public decimal Price { get; set; }

    public Genre Genre { get; set; }

    public bool Preorder { get; set; }
}


Но Стасу-то конечно виднее
...
Рейтинг: 0 / 0
19.02.2020, 18:11
    #39928611
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
забыл ник
Ну вот поэтому ентерпрайз говно. Все эти аннотации превращают Java в нетипобезопасный аналог javascript, при том еще невозможно продебажить

Есть где-то юмористический пост на тему того почему языку LISP не нужны аннотации. Не нужны вообще.

Вот а если по сути - то аннотации не плохие и не хорошие. Это просто некое расширение синтаксиса тегами.
Что-то вроде мета-программирования. К сожалению его единственное ценное использование что я видел
это декларативное связывание сущностей мира БД с объектами (JPA).

Всё остально - это онанизм и плавный уход от классического программирования в программирование только
фреймворков. Доходит до смешного. SpringBoot разработчики уже не умеют на Java. Они уже мыслят
в категории SB-сущностей и решают задачи только в этом контексте. Попытка попросить их написать
что-то вне рамках SB - вызовет злые слёзы и истерику скорее всего. Поэтому пожалеем их.
...
Рейтинг: 0 / 0
19.02.2020, 18:18
    #39928615
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Да причем тут анотации? Кто нибудь может внятно объяснить:
1) что должен делать класс PhoneFormatter и почему он так называется
2) что делает метод parse данного класса, точнее строчка
Pattern.compile(regex).matcher(phoneNum);
почитал JavaDoc и у меня такое чувтсво. что данная строка вообще НИЧЕГО не делает.
3) занафига компилировать регэксп при каждом вызове (Pattern.compile)? почему не сделать это один раз в конструкторе?
...
Рейтинг: 0 / 0
19.02.2020, 19:11
    #39928625
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
andreykaT
я чот не въехал аннотация должна менять по какой то логике значение поля
Аннотация ничего менять не должна - она просто в байткоде торчит и все. Речь идет про Spring ConversionService : не все же данные на фронт и обратно через JSON/XML шлют, а есть еще те кто пользуется всякими thymeleaf, freemarker и пр. и данные принимают через multipart/form-data, вот для них оно и предназначено, т.е. эти аннотации в конечном итоге использует шаблонизатор (например: https://github.com/thymeleaf/thymeleaf/issues/223) и контроллер, а проблема в том, что в код криво написан (типы не совпадают) и примера вызова всего этого дела нет.
...
Рейтинг: 0 / 0
19.02.2020, 19:39
    #39928629
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
iJava
andreykaT,

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

вот такие у людей упоротые тим лиды бывают

ну как. декларативный стиль. по-сути аспект. когда то аоп был моден. но по ходу не очень взлетел когда поняли какие макароны намудили.
...
Рейтинг: 0 / 0
21.02.2020, 19:23
    #39929638
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
skyANA

Но Стасу-то конечно виднее

а при чем тут джава и твой недоязык)
и вообще я имел ввиду что имея такую простую задачу не нужно утежелчять проект бесполезными анотациями- достатточно утил класса с нужным методом ,вместо этих 5 - а делать будет тоже самое)
...
Рейтинг: 0 / 0
22.02.2020, 12:02
    #39929734
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Чтобы не создавать отдельную тему запостю здесь прикол

все тот же блинов в своей книге утверждает что в конструкторе класса нельзя использвать this и super что наводит меня на мысль,что у него биполярное расстройство

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Item {
   int x;

    public Item(int x) {
        this.x = x;
    }
}

public class SquareItem  extends Item{
    int y;

    public SquareItem(int x, int y) {
        super(x);
        this.y = y;
    }
}



что вы скажите по этому воводу?
...
Рейтинг: 0 / 0
22.02.2020, 12:08
    #39929737
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
Leonid Kudryavtsev
предложение делать форматирование "одной строчкой в статик методе" вообще за гранью добра и зла (в нормальном энтерпрайзе сотни таблиц/объектов и тысячи-десятки тысяч полей)

Интересно а что мешает ?у нас проект сотни тысяч классов,поля мы не считали),на каждый микросервис есть свои классы утилит
есть отдельный микросервис каффка комонс ,который динамически обновляется на всю структуру микросервисную
вы видимо давно не заглядывали в энтерпрайз
...
Рейтинг: 0 / 0
22.02.2020, 19:48
    #39929845
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
iJava
микросервис каффка комонс


спасибо, это было очень смешно))))))
...
Рейтинг: 0 / 0
22.02.2020, 21:24
    #39929861
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
iJava
Leonid Kudryavtsev
предложение делать форматирование "одной строчкой в статик методе" вообще за гранью добра и зла (в нормальном энтерпрайзе сотни таблиц/объектов и тысячи-десятки тысяч полей)

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

это какой то поток рандомных слов.
...
Рейтинг: 0 / 0
23.02.2020, 22:53
    #39930074
iJava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот вам задачка не для собеседования
fixxer
iJava
микросервис каффка комонс


спасибо, это было очень смешно))))))

интересно что тут смешного)
на этой архитерктуре работает добрый десяток русиш банков))
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вот вам задачка не для собеседования / 25 сообщений из 78, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]