|
|
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. Класс B Код: java 1. 2. 3. Как сделать так, чтобы somePublicMethod был доступен только классу B? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 11:08 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Нестед не предлагать, класс В большой и я не хочу держать его в А. Есть еще рефлекшн, но не нравится. Еще есть варианты какие-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 11:14 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Перенести somePublicMethod в B Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 11:39 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
По моему такая шняга называется друзья классов. Не проверял, но мб прокатит:Заменить сампабликметод на прртектед, добавить пустой класс в A (Afriend) , сделать B extends Afriend implements... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 14:11 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
В классе А(который синглтон), хранится мапа, которая является общей для всех экземпляров В. В классе А есть метод для удаления элемента из мапы: public removeTask. Мне очень не нравится, что этот метод паблик, т.к. любой может вызвать его и удалить элемент. Сделать приват, тогда не будет доступа из В. Хранить мапу в В тоже не вариант, т.к. это раннейбл и он убивается в определенный момент времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 15:20 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulTВ классе А есть метод для удаления элемента из мапы: public removeTask. Мне очень не нравится, что этот метод паблик, т.к. любой может вызвать его и удалить элемент. вы путаете стройную Модель с правами. Сделайте чтобы любой не мог вызвать другими средствами. public removeTask - интерфейс класса чтобы с ним можно было работать снаружи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 15:37 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulT, есть ещё модификаторы доступа в пределах пакета. Снаружи пакета никто не вызовет. А в пакете никто кроме тебя не напакостит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 15:40 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
no56892По моему такая шняга называется друзья классов. Не проверял, но мб прокатит:Заменить сампабликметод на прртектед, добавить пустой класс в A (Afriend) , сделать B extends Afriend implements... "пустой класс в A" а может интерфейс ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 16:07 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulT, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 17:22 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
UsmanJulT, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Круто, спасибо. Интересно, как часто используется такой подход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 17:40 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulT, если вы расширите описание задачи, то возможно и решений будет больше. - если это сервисный слой и БЛ, то почему класс В такой тупой и ему нужен метод somePublicMethod из внешнего класса. Тогда перенести поведение (метод) в этот класс. - если тут потоки, то почему синглетон? Для того чтобы конкурентности было выше? - если в методе только какие то вычисления без состояния, то можно вынести эти методы в статический класс с именем С. Запуск будет делать А, а В использовать справочный метод у С. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 18:18 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulT Код: java 1. 2. 3. 4. 5. 6. 7. 8. Класс B Код: java 1. 2. 3. Как сделать так, чтобы somePublicMethod был доступен только классу B? 1. Если бы это был eiffel то легко. Но, увы, Гослинг не читатель, Гослинг писатель - он ничего кроме С++ не изучал :( 2. Сложить в один пакет и надеяться, что никто не будет достаточно настырным, чтобы не назвать пакет так же. 3. Сделать метод protected, а в B внутреннего наследника. Но это каждый дурак может. 4. Подумать, зачем тебе это надо и понять, то этого НЕ надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 19:04 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Также можно реализовать через АОП: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 19:40 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulTВ классе А(который синглтон), хранится мапа, которая является общей для всех экземпляров В. В классе А есть метод для удаления элемента из мапы:public removeTask. Если для всех В общий, то так: Код: java 1. 2. 3. 4. 5. 6. 7. JulTХранить мапу в В тоже не вариант, т.к. это раннейбл и он убивается в определенный момент времени. Еще для такого можно использовать Weak мапу. Но там надо смотреть подробней. Этот вариант может подойти не всегда. И кстати, в конструкторе публиковать this в другой калсс - говнокод, плохо, не exception-frendly. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 19:55 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Petro123JulT, если вы расширите описание задачи, то возможно и решений будет больше. - если это сервисный слой и БЛ, то почему класс В такой тупой и ему нужен метод somePublicMethod из внешнего класса. Тогда перенести поведение (метод) в этот класс. - если тут потоки, то почему синглетон? Для того чтобы конкурентности было выше? - если в методе только какие то вычисления без состояния, то можно вынести эти методы в статический класс с именем С. Запуск будет делать А, а В использовать справочный метод у С. imho Краткое описание задачи: Пользователь создает заказ, получаем id заказа для которого необходимо в отдельном потоке запустить поиск исполнителя заказа. Создание заказа происходит в сервисном классе А, здесь же лежит мапа Код: java 1. для хранения запущенного на выполнение экземпляра B(implements Runnable). Мапа нужна для того, чтобы никто больше не смог запустить другой поток поиска для этого же заказа. В классе В начинается карусель, которая останавливается когда находится исполнитель, в этот момент в В я вызываю метод из А, который чистит мапу по текущему id заказа (tasks.remove(id)). Синглетоном у меня является только сервисный класс А. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 21:15 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
мне одному кажется, что решение какое-то запутаное у автора? есть сервис клас, в котором мапа заказов. нужно найти исполнителя по id заказа в карте. в чем трудность - сначала найти, а потом прибить этот заказ из карты? p.s. возможно нужно пересмотреть общий подход к решению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 21:30 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
ИМХО Да, здесь что-то не так. К тому же это не будет работать в кластере (я так понимаю В так или иначе обращается к БД) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 21:46 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Плюсую к AOP. Добавлю еще. У Хостмана есть пример. Вполне себе коробочное решение для изысканных запретов на какое-то действие. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 22:52 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
rema174мне одному кажется, что решение какое-то запутаное у автора? есть сервис клас, в котором мапа заказов. нужно найти исполнителя по id заказа в карте. в чем трудность - сначала найти, а потом прибить этот заказ из карты? p.s. возможно нужно пересмотреть общий подход к решению Поиск исполнителя это всего лишь поиск доступных, далее я беру список доступных и по очереди, в течении определенного времени(например 20 секунд) каждому из них предлагаю взять заказ на исполнение(шлю нотификацию). Как только заказ взят кем-то, поиск прекращается, поток останавливается, а заказ удаляется из мапы. Пока сделала так, если есть варианты как проще, советуйте. И спасибо всем откликнувшимся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 00:20 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
maytonПлюсую к AOP. Добавлю еще. У Хостмана есть пример. Вполне себе коробочное решение для изысканных запретов на какое-то действие. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Мэрси) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 00:20 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin3. Сделать метод protected, а в B внутреннего наследника. Но это каждый дурак может. А чего НЕ может "каждый дурак" (если захочет), с учётом наличия reflection API? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 00:23 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
JulTКак сделать так, чтобы somePublicMethod был доступен только классу B?Убрать public и разместить классы в одном пакете. Опционно - выставить "Sealed: true" в манифесте jar-файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 06:55 |
|
||
|
Вопрос по ООП
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovУбрать public и разместить классы в одном пакете. +1 А то наворотить можно...проверяльщиков прав в самой модели. Т.е. кроме бизнес-логи ещё и Системную логику. JulTПоиск исполнителя это всего лишь поиск доступных, далее я беру список доступных и по очереди, в течении определенного времени(например 20 секунд) каждому из них предлагаю взять заказ на исполнение(шлю нотификацию). Как только заказ взят кем-то, поиск прекращается, поток останавливается, а заказ удаляется из мапы. Пока сделала так, если есть варианты как проще, советуйте. Без аппСервера, в БД делают разные бизнес процессы: - Один БП по заведению задачи разбивают на 2-3 - Сохранить задачу + Поиск исполнителей по JOB + Мессенджер. У тебя получается что при Новогодних праздниках зависнет N заданий (не будут удалены из мапы). Т.е. постоянно шуршит сервер. Все 3 модуля можно выполнить независимыми друг от друга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39190497&tid=2124279]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 565ms |

| 0 / 0 |
