Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по стилю / 25 сообщений из 25, страница 1 из 1
13.03.2012, 12:50:39
    #37702469
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Есть код примерно такой по смыслу
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void method(){

  Map map=new HashMap();
  Map map2=new HashMap();
  Map map3=new HashMap();
  doSomething(map1,map2,map3);

}

void doSomething (Map map1,Map map2,Map map3){
    map1.put("foo","bar");

}



т.е. в метод передаются в качестве параметров какие то объекты и внутри изменяются. Мне не нравится что при чтении кода "method" не понятно что эти объекты внутри метода изменяются.

Вопрос: на эту тему есть какие то конвенции? Название метода, аннотации, соглашение в таких случаях например возвращать мапу с измененными объектами и явно вытаскивать их оттуда?
...
Рейтинг: 0 / 0
13.03.2012, 12:56:16
    #37702479
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Если метод приватный, то нормально. Если туда все кому не лень скармливают данные, то лучше так не делать.
Почитайте про mutable\immutable объекты, в принципе.
Лучше если метод будет возвращать результат. Ещё лучше, если результат будет другой Map. Потому как параметр, ведь может оказатся UnmodifiableMap в какой-то момент.
Если там 3 mutable объекта в параметрах и метод не приватный, то это более чем странно.

Хотя, конечно же, в конкретных ситуациях могут быть нюансы.
...
Рейтинг: 0 / 0
13.03.2012, 13:03:25
    #37702503
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Метод приватный. Сам люблю когда возвращается конкретный результат и явно видно что метод что-то поменял в переменных но просто получается что заполнение оных мап не является основным смыслом метода - то есть сетером его назвать как то рука не поднимается. Я думал может какие то аннотации есть типа что параметр такой то является одновременно и инпутом и аутпутом - ведь если такая возможность предусмотренна (менять переданные внутрь объекты напрямую) то может есть и стандартные способы оформления этого.
...
Рейтинг: 0 / 0
13.03.2012, 13:18:29
    #37702537
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
МарсМетод приватный.
Тогда и париться не стоит. Главное чтобы в контексте класса было легко понять что метод делает.
Правда встаёт вопрос, почему это параметры метода, а не поля класса.

Вообще сложно обсуждать на абстрактном примере. В конкретных случаях всегда есть куча аргументов того или иного подхода.
Никаких специальных аннотаций нет. Напишите JavaDoc к методу, где явно укажите что параметры - mutable.
...
Рейтинг: 0 / 0
13.03.2012, 13:39:57
    #37702589
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
МарсЯ думал может какие то аннотации есть типа что параметр такой то является одновременно и инпутом и аутпутом - ведь если такая возможность предусмотренна (менять переданные внутрь объекты напрямую) то может есть и стандартные способы оформления этого.
Аннотацию на метод можно самому сделать. Это просто интерфейс по своей сути.

Я обычно помечаю жирным и красным в javadoc. Идея про аннотации понравилась.
...
Рейтинг: 0 / 0
13.03.2012, 13:41:30
    #37702594
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
МарсЯ думал может какие то аннотации есть типа что параметр такой то является одновременно и инпутом и аутпутом - ведь если такая возможность предусмотренна (менять переданные внутрь объекты напрямую) то может есть и стандартные способы оформления этого.
Аннотацию на метод можно самому сделать. Это просто интерфейс по своей сути.

Я обычно помечаю жирным и красным в javadoc. Идея про аннотации понравилась.
...
Рейтинг: 0 / 0
13.03.2012, 13:43:53
    #37702600
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
LeonidvАннотацию на метод можно самому сделать. Это просто интерфейс по своей сути.

Можно даже на параметр. Вопрос только в том, нужно ли?
...
Рейтинг: 0 / 0
13.03.2012, 14:11:34
    #37702677
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Марс,
я всегда пишу приставку Set
SetXXXXX или WriteXXXX
но это когда это основное назначение метода.
В ООП есть инкапсуляция, т.е. мало ли что происходит внутри объекта. Да ещё такого как Main()
...
Рейтинг: 0 / 0
13.03.2012, 14:14:11
    #37702688
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
счас подумал, в Java это наверно пересечётся с сеттерами - "Set"
?
...
Рейтинг: 0 / 0
13.03.2012, 14:16:27
    #37702693
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Petro123счас подумал, в Java это наверно пересечётся с сеттерами - "Set" ?
На абстрактном примере обсуждать смысла нет. Но еслм метод приватный и занимается обработкой Map. То это точно не set()?
...
Рейтинг: 0 / 0
13.03.2012, 14:18:46
    #37702699
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Blazkowicz,
я вот не помню, где имеет значение эти 3 буквы.
То ли в генераторе сеттеров, то ли в IDE.
Зарезервировано ли 3 буквы для публичных? И где это проявится?
...
Рейтинг: 0 / 0
13.03.2012, 14:22:03
    #37702708
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Petro123Blazkowicz,
я вот не помню, где имеет значение эти 3 буквы.
То ли в генераторе сеттеров, то ли в IDE.
Зарезервировано ли 3 буквы для публичных? И где это проявится?

DI без доп атрибутов аннотаций будет искать для сеттинга поля

private Service service;
public void setService(Service service;) {
this.service = service;
}

Найдя такой сеттер спринг попробует заинджектит, если класс аргумента , конечно, совпадает с классом поля ;)
...
Рейтинг: 0 / 0
13.03.2012, 14:24:46
    #37702716
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Озверин,
OK

===============
вот, например, у меня есть публичный метод - Добавьте себя на события (как вариант)
COM.SetListEvent(список).
...
Рейтинг: 0 / 0
13.03.2012, 14:33:32
    #37702736
Марс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Конкретней был кусок кода который обрабатывает DTO и из него вытаскивает (попутно преобразуя) несколько мап и коллекцию. В качестве рефакторинга я вытащил этот код в отдельный метод (потому что по уровню абстракции вся эта логика была лишней в основном методе), но вставл вопрос как возвращать все те объекты которые из дто считываются. То есть это и не сетеры в явном виде (потому что их много и потому что кроме собственно сетера изнутри может дергаться другая логика)

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

Вопрос исключительно в удобочитаемости - чтоб при просмотре кода не залезая внутрь метода было понятно что метод изменяет входящие параметры которые потом используются дальше по коду. Например кто-то комментирует в явадоке такие поля как mutable,кто-то выделяет цветом кто-то свои аннотации пишет - я и подумал может стандарт какой-то есть потому что с аннотациями я в силу своей серости ( и проекта работающего на 1.42) не очень знаком.
...
Рейтинг: 0 / 0
13.03.2012, 14:37:35
    #37702753
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Марс,
я за понятность Названия метода.
Дай своему соседу имя, и спроси - что он делает.
2. Код на куски бьют по кускам логики, т.е. опять по НАЗВАНИЮ.
Удачи!
...
Рейтинг: 0 / 0
13.03.2012, 14:38:48
    #37702756
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
МарсКонкретней был кусок кода который обрабатывает DTO и из него вытаскивает (попутно преобразуя) несколько мап и коллекцию. В качестве рефакторинга я вытащил этот код в отдельный метод (потому что по уровню абстракции вся эта логика была лишней в основном методе), но вставл вопрос как возвращать все те объекты которые из дто считываются. То есть это и не сетеры в явном виде (потому что их много и потому что кроме собственно сетера изнутри может дергаться другая логика)

Ничего не понял. DTO не обрабатывают. Их тренсформируют в бизнес сущности. Обычно этим занимается отдельный слой реализованый как AOP - фильром, или другим интерцептором.
...
Рейтинг: 0 / 0
13.03.2012, 14:46:21
    #37702782
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Petro123Озверин,
OK

===============
вот, например, у меня есть публичный метод - Добавьте себя на события (как вариант)
COM.SetListEvent(список).

но не в твоем случае, Set - он не будет трогать.с большой буквы таки ;)..по идее)
...
Рейтинг: 0 / 0
13.03.2012, 16:40:29
    #37703131
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Я так понимаю, ТС пришел из C++, где есть const. В Java такого нет.
...
Рейтинг: 0 / 0
13.03.2012, 16:47:42
    #37703146
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Йуный джавистЪЯ так понимаю, ТС пришел из C++, где есть const. В Java такого нет.
вроде const тут ни при чём.
...
Рейтинг: 0 / 0
13.03.2012, 19:14:16
    #37703531
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Petro123Blazkowicz,
я вот не помню, где имеет значение эти 3 буквы.
То ли в генераторе сеттеров, то ли в IDE.
Зарезервировано ли 3 буквы для публичных? И где это проявится?
Прочитай про javabeans. Это оттуда.
...
Рейтинг: 0 / 0
15.03.2012, 14:39:19
    #37706702
PSV100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Марст.е. в метод передаются в качестве параметров какие то объекты и внутри изменяются. Мне не нравится что при чтении кода "method" не понятно что эти объекты внутри метода изменяются.

Вопрос: на эту тему есть какие то конвенции? Название метода, аннотации, соглашение в таких случаях например возвращать мапу с измененными объектами и явно вытаскивать их оттуда?

К сожалению, это не слабая проблема в java. Отсутствие гарантий неизменяемости объектов со стороны языка вроде позволяют сделать некоторые упрощения для языка, а также и избежать излишнего копирования объектов. Но на самом деле, например, в крупных технических проектах с месивом кода, когда работает куча людей, частенько разной квалификации, как потроха серверов приложений, не редко вынуждены заниматься дублированием объектов с целью каких-то "гарантий", что естественно сказывается на работе с памятью и на перфомансе. И серебряной пули в этих вопросах нет. В функциональных языках с принципами имутабельности объектов тоже есть и технические проблемы, и ряд неудобств. Как с ними пытаются бороться на платформе JVM, можно посмотреть на примере кложуры.
...
Рейтинг: 0 / 0
15.03.2012, 14:46:40
    #37706725
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
PSV100К сожалению, это не слабая проблема в java. Отсутствие гарантий неизменяемости объектов со стороны языка
imho раздутая проблема.
Нехватало ещё const объектов вводить.
И причём Java, если такое же в других ЯП (imho)
В Java обычную БЛ и код не надо разносить на 100 независимых кусков (imho)
...
Рейтинг: 0 / 0
15.03.2012, 16:49:31
    #37707065
PSV100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Petro123imho раздутая проблема.
Нехватало ещё const объектов вводить.
И причём Java, если такое же в других ЯП (imho)
В Java обычную БЛ и код не надо разносить на 100 независимых кусков (imho)
В том и дело, что проблема как раз и не раздутая, никто не парится, в освновном, (и я тоже), особенно в рамках бизнес-логики. А вот на около-системном уровне не всё так однозначно. Я не работаю на этом уровне, поэтому конкретными примерами сразу завалить не могу. Пару лет назад я читал блог какого-то разработчика из JBoss, он неплохо показывал к каким последствиям приводят многие "незапаривания" в жабе, и почему очень трудно реализовать эффективный жаба-сервер. Всего не помню, но тогда немного полазил в потрохах томката, действительно есть места, где делаются копии данных перед вызовами методов.
Можно почитать про JGit. Его разработчики неплохо раскрывали проблемные места в жабе, вплоть до того, что внутри реализации слоя I/O (как минимум вокруг mmap, если я не вру) тоже не избежать лишних копирований буферов. Их вердикт - оригинал гита по перфомансу им не догнать, но в целом вполне производительное решение.
Можно почитать на какие ухищрения пошли в Disruptor-е, в том числе и чтобы избежать лишние создания объектов.

И совершенно верно, что если ещё и плюсовый const для объектов ввести в язык, то можно закапываться. Лично мне и так жаба как язык не нравится, ни для системного уровня не ахти, ни для написания прикладной логики.
В Эрганге, например, живут без всяких const. Не всегда конечно система может оптимизировать и делать правки по месту вместо копирования, у эрланговцев есть вынужденные хаки. И в кложуре без transients (правок по месту) не обошлись, не сохранили "абсолютную чистоту". Увы, идеального ничего нет.
...
Рейтинг: 0 / 0
15.03.2012, 17:04:29
    #37707105
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
PSV100,
тут и проблема imho в Java, что нет чёткого деления по вертикали на системный и несистемный (прикладной).
Отчасти от Веб, который на компонентный ООП сильно не рассчитан.
-----
Если оптимизировать, то можно далеко зайти.
На GameDev совсем в другую сторону ЯП оптимизируют. И т.д.
Т.е. "проще - лучше", что в данном контексте - ДайИмяФункцииЧеловеческое.
Вроде все на этом сошлись.
...
Рейтинг: 0 / 0
15.03.2012, 21:52:29
    #37707559
PSV100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по стилю
Petro123тут и проблема imho в Java, что нет чёткого деления по вертикали на системный и несистемный (прикладной).
Отчасти от Веб, который на компонентный ООП сильно не рассчитан.
Ну, вроде, как раз некая ликвидация деления на системное и неочень и было одной из идеологических причин создания java-платформы. Создатели пытались ликвидировать потребность в связке C/C++ -> питон, луа, свой скриптинг, или какой-нибудь 4GL в ERP-системах и т.д. Причём идеология и архитектура в java-платформе вполне красива и грамотна относительно своих заложенных целей - раз уж взята политика ООП - то язык/платформа во всём объектны до глубины костей. Другое дело, что по прошествию немало лет ООП показало и свои плюсы, и не малые проблемы. Лично я сторонник простоты, например, меня очень привлекает гугловский Go как промышленный язык/платформа (речь не идет о возможности его применения на сегодняшний день). Без кривого ООП решаются те же проблемы, легко и красиво, даже без "функциональщины" (хотя их интерфейсы - те же хаскеловские классы типов или протоколы кложуры, только вид с боку).
Но с другой стороны, это сейчас можно быть таким "шибко умным", насмотревшись на многолетний опыт со стороны (и создатели Go тоже насмотрелись на много чего, при своём опыте в не один десяток лет).

Одним словом, java не идеальна.


Petro123Т.е. "проще - лучше", что в данном контексте - ДайИмяФункцииЧеловеческое.
Вроде все на этом сошлись.
Да, так оно и есть. Просто обидно, что это решение на уровне скриптовых языков с динамической типизацией, без железных гарантий, при этом жаба так и не имеет их лёгкости, несмотря на все чудеса жабских IDE, с их автокомплитами и прочими семантическими анализами.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по стилю / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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