
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.80.4.147] |
![]() |
|
![]() |
Сообщ.
#1
,
|
|
речь о яве, но жавистов спрашивать бесполезно, Я всю жизнь писал так
![]() ![]() public interface Constants { static final int responseCode = -1; } счас умные архитекторы мне говорят что я дурак ![]() ![]() ![]() public class Constants { public static final int responseCode = -1; private Constants () { // чтобы вдруг кто то не создал обьект } Чего Я не понимаю ? Только не шлите в интернет там любителей, никогда не писавших софт, пруд пруди, |
![]() |
Сообщ.
#2
,
|
|
sergioK, но они правы, ты --- дурак.
Цитата sergioK @ надо писать так И так писать не надо. У вас там в Израеле что, сборище дураков? |
![]() |
Сообщ.
#3
,
|
|
Цитата korvin @ sergioK, но они правы, ты --- дурак. Цитата sergioK @ надо писать так И так писать не надо. У вас там в Израеле что, сборище дураков? Это нам из Индии архитекторов дали, Ну и как надо, расскажи умник ? P.S. Сначала на это ответь, потом я еще расскажу про этих талатнливых пиджинов ![]() |
![]() |
Сообщ.
#4
,
|
|
Цитата sergioK @ Чего Я не понимаю ? Во-первых, у тебя там в одном случае интерфейс, в другов класс. Во-вторых, а в яве нет перечислений (enum)? |
Сообщ.
#5
,
|
|
|
Цитата Fester @ Насколько я понял, они там настолько убогие, что уж лучше как Сирожа сделать:Во-вторых, а в яве нет перечислений (enum)? ![]() ![]() enum Constants { responseCode(-1); private int value; Constants(int value) { this.value = value; } } |
Сообщ.
#6
,
|
|
|
Цитата sergioK @ счас умные архитекторы мне говорят что я дурак ![]() Архитектор ПО, тем более из Индии - дурак по определению. Архитектор вообще ПО не видит, ему плевать, хорошо работает ПО или нет. Главное для архитектора - соответствие паттернам. |
![]() |
Сообщ.
#7
,
|
|
Цитата Fester @ Цитата sergioK @ Чего Я не понимаю ? Во-первых, у тебя там в одном случае интерфейс, в другов класс. Праильно зачем писать класс с частным конструктором , если можно прописать константы в интрерфейсе, но вот есть люди утверждающие что класс лучше, а чем Я не догоняю, Добавлено Цитата Fester @ а в яве нет перечислений (enum)? Есть, иногда он лучше иногда нет только вопрос не о них, В яве из покон веков, для констант испоьзуют интерфэйсы, а вот зачем сlass с private ctor? Добавлено Цитата applegame @ Насколько я понял, они там настолько убогие, что уж лучше как Сирожа сделать: ![]() ![]() enum Constants { responseCode(-1); private int value; Constants(int value) { this.value = value; } } Убогие в сравнение чем ? Для чего тебе ксонструктор? что не так в ![]() ![]() interface Constants { final static long timeout= 1800; } |
Сообщ.
#8
,
|
|
|
Цитата sergioK @ Чего Я не понимаю ? Что такое интерфейсы, например ![]() А как ты потом изаешь константы эти из интерфейса? Если делаешь implements такого интерфейса в нужном классе, то точно говнокод. |
![]() |
Сообщ.
#9
,
|
|
![]() |
Сообщ.
#10
,
|
|
Цитата D_KEY @ Цитата sergioK @ Чего Я не понимаю ? Что такое интерфейсы, например ![]() А как ты потом изаешь константы эти из интерфейса? Если делаешь implements такого интерфейса в нужном классе, то точно говнокод. так и изживаю в любом месте программы, пишу имя интерсайса точка имя константы , зачем мне implements да и как контанта пишеться static в интерфэйсе, по другому нельзя, Добавлено ну так я так и делаю , а вот зачем вместо интерфайса класс писать, пока никто не ответил , Добавлено Цитата D_KEY @ Что такое интерфейсы, например ![]() Итерфэйс если говорит в контексте C++ это класс без мемберов, компилятор не даст, только статики, в яве не просто файлов как .h в С/С++, все должно быть в класах или интерфэйсах, как ты по другому определишь константы? да и в С++ чем плохо группу контант , вписать их в один класс, сделав его pv . |
![]() |
Сообщ.
#11
,
|
|
Цитата sergioK @ а вот зачем вместо интерфайса класс писать, пока никто не ответил Там именно это и написано, но если тебе сложно было читать, попробуй тут: https://dzone.com/articles/reasons-why-the-...pattern-is-disc |
Сообщ.
#12
,
|
|
|
Цитата sergioK @ Итерфэйс если говорит в контексте C++ это класс без мемберов При чем тут C++? В C++ интерфейсов нет. Интерфейс - это не класс без мемберов, а абстрактный тип для описания поведения/контракта, которому должен соответствовать любой класс, который реализует этот самый интерфейс. При чем тут константы? Добавлено Цитата sergioK @ все должно быть в класах или интерфэйсах, как ты по другому определишь константы? Ну раз в Java нет самостоятельных модулей, то в классе и определяем. закрываем конструктор, может быть даже делаем класс финальным. Всяко это ближе к нормальному коду, чем интерфейс. Добавлено Цитата sergioK @ да и в С++ чем плохо группу контант , вписать их в один класс, сделав его pv . Во-первых, для того, чтобы запретить инстанцирование объекта некоторого класса, не обязательно делать его абстрактным. Во-вторых, в C++ есть namespace, нет необходимости в классе в данном случае. |
![]() |
Сообщ.
#13
,
|
|
Цитата D_KEY @ Интерфейс - это не класс без мемберов, а абстрактный тип для описания поведения/контракта, которому должен соответствовать любой класс, который реализует этот самый интерфейс. При чем тут константы? то есть класс у кторого нет конструктора , ему нельзя сказать new у интефейса нет состояния, тоесть мемберы, что в классе описывает состояние, если не мемберы? |
Сообщ.
#14
,
|
|
|
Цитата D_KEY @ Почему ближе? Интерфейс как неймспейс, сойдёт для языка, в который не завезли нормальные перечисления. Завезли только адовое убожество, которое я привел выше. Всяко это ближе к нормальному коду, чем интерфейс. Добавлено Цитата korvin @ Цитата sergioK @ а вот зачем вместо интерфайса класс писать, пока никто не ответил Там именно это и написано, но если тебе сложно было читать, попробуй тут: https://dzone.com/articles/reasons-why-the-...pattern-is-disc Какое же все-таки говно эта Java. ![]() |
Сообщ.
#15
,
|
|
|
Цитата sergioK @ то есть класс у кторого нет конструктора , ему нельзя сказать new у интефейса нет состояния, тоесть мемберы, что в классе описывает состояние, если не мемберы? Ничего не понял. Ты не согласен с определением интерфейса, которое я привел? Или что? Добавлено Цитата applegame @ Почему ближе? Интерфейс как неймспейс, сойдёт для языка, в который не завезли нормальные перечисления. Ближе потому, что в таком языке класс - это более широкое понятие. И он вполне себе может быть использован в качестве пространства имен. А вот интерфейс имеет достаточно узкое предназначение. Не вижу смысла его тут использовать. Выглядит странно. |
![]() |
Сообщ.
#16
,
|
|
Цитата D_KEY @ Ближе потому, что в таком языке класс - это более широкое понятие Понятие не более широкое, просто это единственный доступный инструмент, вот и приходится велосипеды костылять. ) Добавлено Цитата D_KEY @ Во-вторых, в C++ есть namespace, нет необходимости в классе в данном случае. Ну, в Java тоже есть неймспейсы — пакеты. Проблема только в том, что это собственно просто неймспейсы, а не какие-нибудь модули/объектные файлы, имеющие, кроме различных определений, секции данных, кода, возможно, инициализации и финализации. Начиная с Java 9 там есть «модули», но по сути они являются просто более продвинутыми неймспейсами по сравнению с пакетами. |
![]() |
Сообщ.
#17
,
|
|
Цитата D_KEY @ Ничего не понял. Ты не согласен с определением интерфейса, которое я привел? Или что? Оно, как бы это сказать, ну слишком теоритическое, Добавлено Цитата korvin @ Начиная с Java 9 там есть «модули», но по сути они являются просто более продвинутыми неймспейсами по сравнению с пакетами. Я не видел что бы их кто-то использовал. Добавлено Цитата D_KEY @ Ближе потому, что в таком языке класс - это более широкое понятие. В Яве интерфайс это класс без состояния, stateless. Добавлено Цитата korvin @ Понятие не более широкое, просто это единственный доступный инструмент, вот и приходится велосипеды костылять. ) В понятиях Явы это не велосипед, его придумывают те кто пишет класс с private конструктором, хорошо еще double checking не имплементируют ![]() Добавлено Цитата applegame @ Какое же все-таки говно эта Java. ![]() Говно не Java/С++/D а мозг людей не способных понять как оно работает, ![]() и делающих такие выводы. |
Сообщ.
#18
,
|
|
|
Цитата D_KEY @ Тогда в плюсах таки есть интерфейсы: абстрактные классы. Они делают именно то, что ты описал. Кроме того, как минимум в Java/C++/D есть возможность пихать константы в интерфейсы/абстрактные классы. А значит определение интерфейсов в этих языках не соответствует твоему идеализированному определению. Ты же скорее описал не интерфейс, а трейт из Rust.Интерфейс - это не класс без мемберов, а абстрактный тип для описания поведения/контракта, которому должен соответствовать любой класс, который реализует этот самый интерфейс. При чем тут константы? Цитата D_KEY @ А интерфейс-то почему не может быть использован в качестве неймспейса? Считай эти константы частью интерфейса, примерно как абстрактный класс в C++. Разница скорее философская: "патамушта мне кажется, что так правильнее".Ближе потому, что в таком языке класс - это более широкое понятие. И он вполне себе может быть использован в качестве пространства имен. А вот интерфейс имеет достаточно узкое предназначение. Не вижу смысла его тут использовать. Выглядит странно. Из объективных аргументов только то, что такое "перечисление" не имеет собственного типа. Но частенько тебе нужен просто набор констант, а не перечисление и тут я не вижу никаких объективных преимуществ класса перед интерфейсом. Писать чуть больше, результат тот же. А для перечислений, еще раз повторю (почему-то вы все игнорируете эту конструкцию), в жабу ввели enum. |
Сообщ.
#19
,
|
|
|
Цитата applegame @ Тогда в плюсах таки есть интерфейсы: абстрактные классы. Они делают именно то, что ты описал. А еще могут много чего еще, что не имеет отношения к интерфейсам. Так что нет, в плюсах отдельной языковой конструкции для интерфейсов нет. Я не говорю, что она нужна. Цитата Кроме того, как минимум в Java/C++/D есть возможность пихать константы в интерфейсы/абстрактные классы. А значит определение интерфейсов в этих языках не соответствует твоему идеализированному определению. Хороший заход. Но на практике это значит, что просто нужно использовать эту дополнительную возможность разумно. Она вполне может помогать описать интерфейс. Тогда все ок. Цитата А интерфейс-то почему не может быть использован в качестве неймспейса? Потому, что это не имеет никакого отношения к понятию интерфейса. Цитата Считай эти константы частью интерфейса Наверно можно представить себе ситуации, когда это разумно. Но в данном случае это не так. Особенно если речь о том, чтобы делать implements для "импорта" констант в том классе, где мы хотим эти константы юзать. Это очевидно переворачивает все с ног на голову. |
Сообщ.
#20
,
|
|
|
Цитата D_KEY @ Так же как и к понятию класса. И то и другое просто костыль для обхода ограничения самого языка. Не вижу чем один костыль лучше другого. Потому, что это не имеет никакого отношения к понятию интерфейса. |
Сообщ.
#21
,
|
|
|
Цитата applegame @ Цитата D_KEY @ Так же как и к понятию класса. И то и другое просто костыль для обхода ограничения самого языка. Не вижу чем один костыль лучше другого.Потому, что это не имеет никакого отношения к понятию интерфейса. Класс в ООП можно рассматривать в качестве модуля. Интерфейс в этом качестве я бы рассматривать не стал. Ну и кроме того, я думаю, что интерфейс провоцирует делать implements ради констант. |
![]() |
Сообщ.
#22
,
|
|
Цитата D_KEY @ Особенно если речь о том, чтобы делать implements для "импорта" констант в том классе, где мы хотим эти константы юзать. Это очевидно переворачивает все с ног на голову. Это делают те кто не понимает, а в сети таких полно, Я за 15лет ни разу не делал, То что при прописании констант, интерфейс перестает быть тем чем ему дали с рождения все знают, Напиши свой язык, где никто ничего не переворачивает все с ног на голову ![]() |
![]() |
Сообщ.
#23
,
|
|
Цитата sergioK @ Я не видел что бы их кто-то использовал. Не удивительно. Цитата sergioK @ В понятиях Явы это не велосипед Ещё какой велосипед. |
![]() |
Сообщ.
#24
,
|
|
Цитата korvin @ Цитата sergioK @ Я не видел что бы их кто-то использовал. Не удивительно. Цитата sergioK @ В понятиях Явы это не велосипед Ещё какой велосипед. Покажи не велосипед |
![]() |
Сообщ.
#25
,
|
|
Цитата sergioK @ Покажи не велосипед ![]() ![]() val resultCode = -1 |
Сообщ.
#26
,
|
|
|
Цитата korvin @ Цитата sergioK @ Покажи не велосипед ![]() ![]() val resultCode = -1 А я бы предпочел что-то вроде: ![]() ![]() const resultCode = -1 Добавлено Хотя само наличие константы с таким названием смущает ![]() |
![]() |
Сообщ.
#27
,
|
|
Цитата D_KEY @ А я бы предпочел что-то вроде: Это то же самое. Цитата D_KEY @ Хотя само наличие константы с таким названием смущает Ага, и хотя это просто абстрактный пример, нормальное имя могло бы сразу дать понять, что место ей не в каком-то безликом Constants, а в соответствующем классе/модуле. ) |
Сообщ.
#28
,
|
|
|
Цитата korvin @ Цитата D_KEY @ А я бы предпочел что-то вроде: Это то же самое. Ну я тут имел в виду, что оно ещё и во время компиляции гарантировано вычисляется ![]() |
![]() |
Сообщ.
#29
,
|
|
Цитата D_KEY @ Ну я тут имел в виду, что оно ещё и во время компиляции гарантировано вычисляется В смысле? А если вместо ключевого слова const в языке используется val — то всё, приплыли? |
Сообщ.
#30
,
|
|
|
Цитата korvin @ Цитата D_KEY @ Ну я тут имел в виду, что оно ещё и во время компиляции гарантировано вычисляется В смысле? А если вместо ключевого слова const в языке используется val — то всё, приплыли? Ну val по мне уже должно быть в рантайме. Даже если оно неизменяемое. |
![]() |
Сообщ.
#31
,
|
|
Цитата D_KEY @ Ну val по мне уже должно быть в рантайме. Даже если оно неизменяемое. С чего ты это взял? ) |
Сообщ.
#32
,
|
|
|
Цитата korvin @ Цитата D_KEY @ Ну val по мне уже должно быть в рантайме. Даже если оно неизменяемое. С чего ты это взял? ) Ну хз ![]() |
![]() |
Сообщ.
#33
,
|
|
Цитата D_KEY @ Мне кажется логичным наличие в языке механизма для работы со значениями во время компиляции и так же логичным кажется использовать ключевое слово const. Это в тебе профдеформация говорит. |
Сообщ.
#34
,
|
|
|
Цитата korvin @ Цитата D_KEY @ Мне кажется логичным наличие в языке механизма для работы со значениями во время компиляции и так же логичным кажется использовать ключевое слово const. Это в тебе профдеформация говорит. Возможно. Но ты раскрой мысль-то про константы. |
![]() |
Сообщ.
#35
,
|
|
Цитата D_KEY @ Но ты раскрой мысль-то про константы. А что там раскрывать? Нет никакой разницы, как называется ключевое слово, хоть const, хоть val, хоть let, хоть def. Возможность работать со значениями во время компиляции от этого никак не зависит. |
Сообщ.
#36
,
|
|
|
Цитата korvin @ Нет никакой разницы, как называется ключевое слово, хоть const, хоть val, хоть let, хоть def. Возможность работать со значениями во время компиляции от этого никак не зависит. Суть не в названии, а в наличии возможности. Т.е. смогу ли я потом воспользоваться значением константы для условной компиляции, например? Или для определения размеров массива, хотя бы. Можешь погуглить про constexpr в C++ или про то, что в D есть. |
![]() |
Сообщ.
#37
,
|
|
Цитата D_KEY @ Суть не в названии, а в наличии возможности. Ну раз суть не в названии, то почему ты докопался до названия? ) Цитата D_KEY @ Т.е. смогу ли я потом воспользоваться значением константы для условной компиляции, например? Условная компиляция — зло. ) Цитата D_KEY @ Или для определения размеров массива, хотя бы. Сможешь. Цитата D_KEY @ Можешь погуглить про constexpr в C++ или про то, что в D есть. Спасибо, я знаю про constexpr. При чём тут это, не совсем понятно, но можешь тоже погуглить про eval-when в Common Lisp, например. ) Добавлено Или вот. |
Сообщ.
#38
,
|
|
|
Цитата korvin @ Цитата D_KEY @ Суть не в названии, а в наличии возможности. Ну раз суть не в названии, то почему ты докопался до названия? ) Да я ж просто сказал, что предпочел бы const для констант ![]() Цитата Условная компиляция — зло. ) В общем случае нет. Цитата Спасибо, я знаю про constexpr. При чём тут это, не совсем понятно Ну мой const это что-то близкое к constexpr. По поводу template haskell смотрел когда-то, что-то слабее даже плюсовых шаблонов показалось. Но я подзабыл уже. Добавлено В любом случае мы отделяем то, что происходит во время компиляции. О чем я и говорю. |
![]() |
Сообщ.
#39
,
|
|
Цитата D_KEY @ В общем случае нет. Да. В том числе и в общем случае. ) Добавлено Цитата D_KEY @ По поводу template haskell смотрел когда-то, что-то слабее даже плюсовых шаблонов показалось. Оно не совсем прямо соотносится с плюсовыми шаблонами, скорее ближе к макросам лиспа. |
Сообщ.
#40
,
|
|
|
Цитата korvin @ Цитата D_KEY @ В общем случае нет. Да. В том числе и в общем случае. Аргументы-то есть? |
![]() |
Сообщ.
#41
,
|
|
Цитата korvin @ Цитата sergioK @ Покажи не велосипед ![]() ![]() val resultCode = -1 не val а var и начиная с 10 версии, которая не LTS, с 11 пока мало где можно выходить в продакшен, ждем 17 вроде до сентября , А ты Я давно заметил крутой спец в Яве, раньше стеснялся говорить, ![]() |
![]() |
Сообщ.
#42
,
|
|
Цитата sergioK @ не val а var и начиная с 10 версии, которая не LTS, с 11 пока мало где можно выходить в продакшен, ждем 17 вроде до сентября , Не Java, а любой нормальный язык, начиная с… 1970-х примерно. |
Сообщ.
#43
,
|
|
|
Вроде не протухла же тема?
![]() Я как поимевший дела с индусами могу сказать, что, думаю, что они это делают, что бы от самих себя защититься. Вообще, делать интерфейсы с константами нормальная практика с незапамятных времен. И нет в ней ничего плохого. Другое дело, что люди не понимаю че делают (лично я ненавижу статический импорт) что бы не писать имя интерфейса могут сделать реализацию для интерфейса с константами. ХЗ зачем им это может понадобиться, лично я думаю, что они просто не в себе. В общем, интерфейсы с константами в яве это нормально (передней край индусской науки к сожалению не аргумент). Но для защиты от индусских дураков предлагается железобетонный способ. Ну и с архитекторской т.з. это все выглядит немного криво, потому что они в диаграммах в основном сидят. А тут прямоугольничек, который вроде как и можно использовать определенным способом, но никогда не нужно. Людей с ОКР это раздражает, я знаю ![]() |
![]() |
Сообщ.
#44
,
|
|
Цитата Felan @ Вроде не протухла же тема? ![]() Ой как раз в тему, У меня command pattern и при инициализация я свои классы с ключами гружу в map , И все бы хорошо, но вдруг главный индус архитектор мне его убирает - аргументация у них есть fresh developers и им тяжело использовать фабрику , обычный switch лучше ![]() ![]() switch key { case 1: return channel1Service.download(..) case 2: return channel2Service.download(..) и т,д } У было ![]() ![]() IService service = factory.getService(int key ) И тут Я понимаю что по неволе становлюсь расистом ![]() писали ? И только схемы рисовали ? Если у них fresh developer и счас не умеет работать паттернами , так как он научиться тогда , мои джуны прекрасно с фабрикой работали. |
Сообщ.
#45
,
|
|
|
Ну тут я с индусом соглашусь.
Насколько я понял из объедков кода, это не фабрика а фабричный метод. Хотя и он тут не к чему. Это должно называться Сервис локатор. Вообще, архитектурные паттерны очень похожи друг на друга. И они не про рантайм. Они про статическую структуру. Про то как взаимодействуют классы, а не объекты. Поэтому и важно привильно их применять. По сути, фабричный метод вполне может заменить сервис локатор. В принципе и то и то будет работать. Даже можно сказать одинаково. Но когда один архитектор будет разговаривать с другим, они буду понимать определенные нюансы связанные с каждым паттерном. Потенциальные пути расширения функционала. Не все что можно навесить на одно, можно навесить на другое без потери "архитектуры" извиняюсь за тавтологию ![]() А данном случае, зачем здесь фабричный метод? Его вывод не зависит от статики, от действительного типа объекта в рантайме. Он зависит только от параметра. Так что да. Простой кейс тут более уместен, ну в крайнем случае сервис локатор (я не знаю подробностей). А индусы они в общем тоже разные бывают. Как и все остальные. Но специфика культурного кода присутствует конечно ![]() ЗЫЖ Интересно посмотреть оригинал переписки... мало ли, че там они на ломаном басурманском накорябали, кто чего не понимает ![]() |
![]() |
Сообщ.
#46
,
|
|
Да Java вообще индусский язычок, даже higher-Kinded types нету.
|