|
|
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororТак что, как видите очень простой пример, когда разработчик не смог предусмотреть, то что будет нужно пользователю. При этом, если придерживаться вашей логики, то я должен ждать несколько месяцев, пока нужный доступ откроют официально. Либо пользоваться рефлекшн. Но рефлекшн в более сложных случаях - громоздок. Поэтому нужно альтернативное решение, например такое как fork внутри кода, с использованием фич из АОП. Зачем рефлекшен?! Вы можете просто сделать форк (реальный) И реализовать собственный класс. При условии, что исходники имеются. Можно, конечно, если "очень надо" сделать костыль ч/з рефлекшен. Но это костыль. И относиться к нему надо как к кастылю. Правильнее было бы 1) Связаться с разработчиками и предложить свое решение (патч) 2) Взять исходники (если они в свободном доступе) и сделать форк Если же нужна "полная свобода", то используйте C/C++, например. Там можно делать все и немного еще. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 07:49 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororА недавно, спустя несколько месяцев, я увидел новый класс ScriptUtils (если не ошибся с названием), где появились методы wrap и unwrap, чтобы работать со ScriptObject напрямую. И заметьте мне такой метод был нужен несколько месяцев назад и очевидно не мне одному тоже. Все ошибаются. И не сделать метод доступа к private-полю там, где он надо- это ошибка проектирования класса. Бывает. Бывает и хуже. Много хуже. Но предлагать отменить private из-за того, что не все умеют им пользоваться- это перебор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 09:57 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Fororмне проще будет реализовать fork фичу в виде плагина для eclipse, правда я пока не знаю, где там копаться, чтобы расширить валидатор для таких конструкций: Код: java 1. 2. 3. 4. 5. Ну допустим валидатор в еклипсе вы расширите, а как насчёт компилятора? Он-то (компилятор) не научен frok распознавать. Компилятор кастомный возьмёте - валидатор байт кода такой класс не пропустит и JVM откажется его загружать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 11:50 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
For All, данная конструкция затем будет преобразована в нормальный java синтаксис, автоматически. На вскидку, смержить код и скомпилировать, положив в тот же пакет. А можно даже заместить форкнутый класс, новым, так даже интереснее ) В общем, это тот же форк в файловой системе, только все делается гораздо проще, автоматически, через IDE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 19:33 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Т.е. заместо того, чтобы создавать новый бранч в гите, просто объявляешь в коде, своего проекта, форк нужного класса. Пишешь тут же реализацию, а дальше все делается автоматом, когда проект билдится или ранится. Форкнутый класс подменяется вашим классом, для этого можно юзать тот же AOP. И не нужно парится с бранчами, всё просто, удобно и прозрачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 19:38 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Вам уже говорили о побочных эффектах? Изменение класса требует, как минимум, пересборки. Как максимум - запуск всех тестов. И это ещё хорошо, что ява позволяет обойтись без перекомпиляции. Хотя и не всегда. P.S. Я, конечно, понимаю желание сократить собственные проблемы за счёт увеличения чужих, но должно же быть хоть какое-то чувство меры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 20:36 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, нужно понимать, что данный метод не для глобального изменения стороннего проекта, иначе, действительно, проще сделать отдельный бранч. Данный метод скорее для расширения класса, без удаления методов или полей. Поэтому пересобирать сторонний проект нет смысла. Достаточно подменить класс в jar'e. А вот запуск тестов, интересная идея, но тут не всегда получится их просто запустить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 08:40 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Мопжежвашуять ... Сегодня одному разработчику пришла гениальная мысль доработать класс сторонней библиотеки и он его форкнул, завтра - другому и он тоже сделал свой форк, а послезавтра - третьему, совершенно неповинному человеку, понадобилось развернуть оба приложения в одном контейнере. И тут выяснилось, что форки "немножечко несовместимы". И что этому третьему страдальцу делать? Слёзно умолять двух независимых разработчиков сделать общий форк? Может проще послать лесом их обоих? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 09:51 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
И вообще: то, что вы упорно изобретаете, существует с незапамятных времён и называется патч. Существует и более-менее стандартизированный способ "изготавливать" такие исправления. Как пример:Tomcat changelogAllow the JNDI Realm to start even if the directory is not available. The directory not being available is not fatal once the Realm is started and it need not be fatal when the Realm starts. Based on a patch by Cédric Couralet . (markt)Выделено мною. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 10:09 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Весь срач не читал, так что отвечу только ОП. С первого взгляда да, как и написал ОП, вынесение потрохов класса в public дает больше свободы клиентам и меньше головной боли на тему "как заставить эту либу работать так, как нужно нам". НО: - самая главная проблема - обратная совместимость. Код, который может использоваться клиентом, уже нельзя поменять без риска сломать компиляцию у зависимых проектов или, еще хуже, внести в них баги. Именно поэтому API так тщательно проектируется, а вся реализация засовывается в private/default область видимости. Злобных буратино с рефлекшном можно игнорировать - сами виноваты. - вторая проблема - понимабельность. Как правило, именно области видимости формируют у библиотеки API, т.е. что же надо у нее вызывать. Если сделать все public, потенциальный юзер библиотеки не сможет без вдумчивого изучения документации понять, как же ее дергать и какие классы надо использовать. - третья проблема - декомпозиция. Главное, о чем должен помнить программист - это об ограниченности своего мозга, неспособного одновременно обрабатывать много понятий. Именно поэтому придумана инкапсуляция и блочная структура программ. Чтобы, обдумывая проблему, не нужно было загружать себе в голову детали реализации отдельных модулей. Что же делать? Проектирование API - это сложная задача, требующая большого опыта. В качестве библиотеки, где реализация тщательно скрыта от клиента, могу рекомендовать Guava. Образец расширяемой библиотеки для меня - старые модули spring framework, spring-beans например. Изучай, как пишут умные люди и будет тебе счастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 10:44 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororFor All, данная конструкция затем будет преобразована в нормальный java синтаксис, автоматически.Хотелось бы деталей. Как вот эта конструкция: Код: java 1. 2. 3. 4. 5. будет выглядеть после преобразования с нормальный java синтаксис? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 12:12 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
scf, авторВесь срач не читал, так что отвечу только ОП А стоило, ваши ответы лишь повысили энтропию этого топика, не дав ничего интересного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 13:06 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, автор Слёзно умолять двух независимых разработчиков сделать общий форк? Зачем умолять? Если уж возникла такая ситуация, то всегда есть возможность сделать свой форк на базе предыдущих. В любом случае, это ничем не отличается от Dependency Hell, когда сторонние библиотеки тянут разные версии одной и той же либы в зависимостях. У меня только недавно возникла такая ситуация, когда одна либа тянет старую, борадатую lucene 3.0, а другая 5.0. Различия на порядки и пойди разбери, что делать. Только самому вникать в код и переводить либу на последнюю lucene. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 13:18 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
For All, Будет создан класс java.nio.file.StandardWatchEventKinds, который заместит изначальный java.nio.file.StandardWatchEventKinds сделав обычный merge текстовых файлов (исходников обоих классов), как это делается в любых vcs. Вообще, тут нужно продумать различные варианты, я лишь пока кидаюсь идеями, а как появится время, создам отдельный топик и распишу подробнее про fork. Вот только думаю его нужно не fork назвать, а как-то по другому, т.к. это лишь расширенный extends. Т.е. класс лишь расширяется как при наследовании, но с полным доступом ко всем полям и методам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 13:23 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Конечно, опасно делать сложные форки, с изменением тела методов, например, известных библиотек или JDK. Но с другой стороны не обязательно замещать оригинальный класс, может просто класть форк отдельно, с другим названием, в тот же пакет. Тогда будет гораздо безопаснее, но менее гибче. В общем, идея сложная, я для этого и вынес на обсуждение ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 13:31 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororБудет создан класс java.nio.file.StandardWatchEventKinds, который заместит изначальный java.nio.file.StandardWatchEventKinds сделав обычный merge текстовых файлов (исходников обоих классов), как это делается в любых vcs.А если нет исходников? И дизассемблирование не всегда поможет, т.к. имена приватных мемберов могут оказаться сгенерёнными дизассемблером, а не те, которые аффтар либы давал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 13:36 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororЗачем умолять? Если уж возникла такая ситуация, то всегда есть возможность сделать свой форк на базе предыдущих.Этот третий - ни разу не программист. Это сисадмин, который в деталях знает какие параметры и почему должны быть прописаны и в комстроке и в настройках. Имеет право даже синтаксиса java не знать. Но дело даже не в этом. В этой жизни и так достаточно геморроя с разными версиями одних и тех же библиотек - зачем ещё больше его увеличивать? В условиях, напомню, когда существует стандартный механизм: допилил, diff и - patch разработчикам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 15:51 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
FororНе устарел ли private? Откуда вам знать, что может понадобиться пользователю ваших классов? Может достаточно public и protected? Как ни странно, неофит не так уж и неправ -- есть много языков программирования с ООП, которые не поддерживают т.н. инкапсуляцию на уровне языка -- это делается на уговне соглашений о стиле программирования. В Java private не так уж и строг -- через reflection приватные поля доступны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 15:59 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Fororне обязательно замещать оригинальный класс, может просто класть форк отдельно, с другим названием, в тот же пакетИ как рантайм должен компоновать куски? Ваш и "того парня"? Как быть с Sealed: true в манифестах для библиотек "только чтение"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 16:04 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
MasterZivВ Java private не так уж и строг -- через reflection приватные поля доступны... пока не установлен диспетчер безопасности. Редкость - да, но всё-таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 16:05 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
У ТС вообще странный вброс. "почему разработчику знают, что нужно пользователю". И что, сидеть ровно и ничего не делать? Формальный ответ - из ТЗ. А не формально... С чего он вообще взял, что через задание области видимости разработчик определяет, что нужно _пользователю_???!. Прежде всего, разработчик определяет то, что нужно _самому_разработчику. Так он указывает, какие части хочет скрыть или, наоборот, показать. Если кто-то наплевал и залез в private, то проблемы индейцев ... - понятно; ни кто не гарантирует ему отсутствие "интересного поведения", когда скрытая реализация изменится (а что, разве кто-то обещал её не менять?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 23:53 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, автор... пока не установлен диспетчер безопасности. Редкость - да, но всё-таки. А разве нельзя его точечно настраивать, скажем для таких-то классов можно рефлекшн, для всех остальных нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 10:49 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
Foror, я бы вообще при дизайне избегал бы наследования и иерархий. Любая иерархическая структура содержит в себе подвохи. И хотя мы видим их повсеместно, программы наши могут быть не такими сложными, какими они бывают при использовании иерархических структур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 17:26 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
way2bariton, у меня недавно начало складываться впечатление, что этап дизайна может растянуться на долгое время в связи с корректировками. А иерархическая структура будет являться лишь подведением итогов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 23:45 |
|
||
|
Видимость private, почему разработчику знают, что нужно пользователю?
|
|||
|---|---|---|---|
|
#18+
way2baritonForor, я бы вообще при дизайне избегал бы наследования и иерархий. дизайн чего? Слишком широкий термин. Упростить Модель предметки - обязанность программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2014, 11:28 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38737449&tid=2126630]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 548ms |

| 0 / 0 |
