Обновить
1
0

Пользователь

Отправить сообщение
Как это сделать в Java: «И убрал бы != null»? :)
не знаю, тяжело или нет без extension methods. Но это данность, с которой мне придется мириться.
понял, что написал не проследил эту структуру ответа. думал, это относится к моему куску кода. комменты не валидны ;-0)
понял, что написал не проследил эту структуру ответа. думал, это относится к моему куску кода. комменты не валидны ;-0)
В этом коде много ошибок для людей, кто придерживается вашей точки зрения. Этот код компилируется и даже (сюрприз-сюрприз) работает.
*скопировал кусок кода не полностью из класса

Все становятся такие умные и с умным видом говорят «в этом классе не хватает закрывающей скобочки» думая про себя «какой я умный, а тот кто написал комментарий лох и нуб» вместо того что бы подумать на шаг вперед ;)
вы не подумали о том, что это филды класса и что я его скопировал?
Да уж наверное. И даже не поленилсчя посмотреть код на гитхабе, который оставляет желать лучшего
DetachedCriteria — это класс фреймворка. Враппить его в другой класс и делать тучу методов оберток ради того, что бы ОДИН раз использовать — не понятно, есть ли в этом большой смысл. Я конечно понимаю, что многие девелоперы стремятся к совершенству, совершенному коду и т.д. и т.п., Но как известно на другой стороне — девелоперы любят УСЛОЖНЯТЬ. А потом получаются очень сложные системы, дорогие в поддержке, и т.д. и т.п. И это называется Overengineering. Это как рассказ о том, что американцы вложили миллионы долларов на то, что бы создать ручку, которая будет писать в космосе в то время, как русские просто взяли карандаш.
Одно дело написание какого-то сверхгибкого фреймворка и декларативное программирование, другое дело использование его без надобности. Это что называется очень часто «write-only» подход. Если у тебя обвешан объект проксями и т.п, а ты пытаешься на прямую ему филды посеттить которые помечены как private. Ну зачем это через отражение делать. Что бы потом отлавливать баги там, где 99% населения их не отлавливает?

И кстати то, что я описал — это НЕ тупое копирвоание свойств из одного объекта в другой. Это приведение объекта в нужное состояние. Через отражение это сделать можно. Но зачем усложнять и без того сложные вещи? Это как забивать гвозди микроскопом — не удобно, не практично и поломкоопасно.
с тем же самым успехом я мог бы писать:

if (itemTypeId != null) criteria.add(sqlRestriction("{alias}.item_type_fk = ?", itemTypeId, BIG_INTEGER));

и тем самым тоже сэкономлю строчку кода.
К тому же типы аргументов будут разными, соотвественно проверки нужные тоже разные. И т.д. и т.п. В общем из простого но не очень компактного кода получатся макароны, которые сложнее читать.
Короче ко всему стоит подходить с головой.
Я видел такие просты решения через reflection. Вообще отражение — это зло, которое должно использоваться В ИСКЛЮЧИТЕЛЬНЫХ случаях. Написать просто, а вот поддерживать очень сложно. Мне приходилось через такой код построенный на «отражениях» продираться НЕДЕЛЮ. Пока не нашел причину. Когда я ее нашел, я подошел с красными глазами к товарищу, кто это написал и спросил «зачем?» на что получил ответ старый как мир: «так было проще».
где здесь копипаст? Ткните конкретно. А что хорошего в add_critera_if. С тем же успехом можно было бы выкинуть скобочки и заинлайнить. Проку с этого мало, если он вообще есть.
Конфигурировать как? Очень похоже на наколенную студенческую поделку с изобретением велосипеда. Если кому и надо будет такое, то это делается за 2 минуты путем враппинга slf4j/log4j/logback или что у вас там используется
Хороший пример такой вещи, которая плохо дробится — использование Detached criteria в Hibernate. Вернее его формирование

Отрефакторите мне этот метод таким образом, что бы это реально принесло смысл. Я серьезно. Я долго бился над этой проблемой, но решения не нашел:
    public DetachedCriteria build() {
        final DetachedCriteria criteria = DetachedCriteria.forClass(Item.class);
        criteria.add(eq("singleItem", singleItem));
        if (itemId != null) {
            criteria.add(eq("id", itemId));
        }
        if (StringUtils.isNotEmpty(itemName)) {
            criteria.add(ilike("name", wildcard(itemName)));
        }
        if (itemSalePrice != null) {
            criteria.add(eq("salePrice", itemSalePrice));
        }
        if (itemStorePrice != null) {
            criteria.add(eq("storePrice", itemStorePrice));
        }
        if (StringUtils.isNotEmpty(itemProducer)) {
            criteria.add(ilike("producer", wildcard(itemProducer)));
        }
        if (StringUtils.isNotEmpty(itemProducerCode)) {
            criteria.add(ilike("producerCode", wildcard(itemProducerCode)));
        }
        if (StringUtils.isNotEmpty(itemDescription)) {
            criteria.add(ilike("description", wildcard(itemDescription)));
        }
        if (StringUtils.isNotEmpty(itemSerialNo)) {
            criteria.add(ilike("serialNo", wildcard(itemSerialNo)));
        }
        if (supplierEnterpriseId != null) {
            criteria.add(sqlRestriction("{alias}.supplier_enterprise_fk = ?", supplierEnterpriseId, BIG_INTEGER));
        }
        if (itemTypeId != null) {
            criteria.add(sqlRestriction("{alias}.item_type_fk = ?", itemTypeId, BIG_INTEGER));
        }
        if (upperItemId != null) {
            criteria.add(sqlRestriction("{alias}.upper_item_fk = ?", upperItemId, BIG_INTEGER));
        }
        if (unitTypeId != null) {
            criteria.add(sqlRestriction("{alias}.unit_type_fk = ?", unitTypeId, BIG_INTEGER));
        }
        if (!attributes.isEmpty()) {
            addAttributeSearchConditions(criteria);
        }

        criteria.addOrder(Order.asc("id"));
        return criteria;
    }

Хоть автор и тролль и зареган вчера, но...
Ко всему нужно подходить со здоровой долей прагматизма и включенной головой. А не «я буду использовать это потому, что я прочитал это в такой-то книге от такого-то клевого автора».
да, именно этот смысл я и вложил в «загнется», извиняюсь за каламбур со словами
Сегодня каждый второй причисляет себя к айтишнику. Так что объективизма вряд ли удастся добиться. Да и основная проблема айтишников в том, что жизнь она пробегает мимо, пока мы сидим уткнувшись мордой в мониторы/книжки и проч и проч. По крайней мере это моя проблема.

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность