Константный для себя и неконстантный для другого
От: Misha87  
Дата: 06.02.11 19:36
Оценка:
Есть некий класс, объект которого не должен уметь менять ничего в себе, то есть сам для себя он const.
Но есть другой класс, который может изменять эти объекты.

Как называется такая пара паттернов?
Re: Константный для себя и неконстантный для другого
От: Temoto  
Дата: 06.02.11 20:17
Оценка: +1
Здравствуйте, Misha87, Вы писали:

M>Есть некий класс, объект которого не должен уметь менять ничего в себе, то есть сам для себя он const.

M>Но есть другой класс, который может изменять эти объекты.

M>Как называется такая пара паттернов?


Это называется "инкапсуляция наоборот", а по-простому — п-дец. Первое место, где следует делать имутабельность — это как раз для внешних пользователей.
Re: Константный для себя и неконстантный для другого
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 06.02.11 20:29
Оценка:
А, ммм. Поэтому это называется "кривой дизайн". Обычно наоборот делают, кто-то близкий может менять сущность, а кто-то далекий не может. Тогда есть ReadonlyInterface.

Какую задачу решаете, наверняка лучше есть решение?
http://jvmmemory.com — простой способ настройки JVM
Re[2]: Константный для себя и неконстантный для другого
От: Misha87  
Дата: 06.02.11 20:50
Оценка:
Здравствуйте, LeonidV, Вы писали:

LV>Какую задачу решаете, наверняка лучше есть решение?


Есть объект "стена". Внутри стены есть объекты "бревна". Бревно не может менять само себя. А вот стена при изменении геометрии меняет все бревна внутри себя.
Re[3]: Константный для себя и неконстантный для другого
От: IT Россия linq2db.com
Дата: 07.02.11 00:10
Оценка: +3 -1
Здравствуйте, Misha87, Вы писали:

M>Есть объект "стена". Внутри стены есть объекты "бревна". Бревно не может менять само себя. А вот стена при изменении геометрии меняет все бревна внутри себя.


Лучше, если стена будет не менять брёвна, а заменять их новыми, более подходящими.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Константный для себя и неконстантный для другого
От: minorlogic Украина  
Дата: 07.02.11 05:26
Оценка: -1 :)
Баблик Морозов кажется ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[4]: Константный для себя и неконстантный для другого
От: Misha87  
Дата: 07.02.11 07:34
Оценка:
Здравствуйте, IT, Вы писали:

IT>Лучше, если стена будет не менять брёвна, а заменять их новыми, более подходящими.


Нет, не лучше. Создание объекта — тяжелая операция. Редактирование — гораздо быстрее
Re[5]: Константный для себя и неконстантный для другого
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.02.11 08:34
Оценка: :)
Здравствуйте, Misha87, Вы писали:

M>Здравствуйте, IT, Вы писали:


IT>>Лучше, если стена будет не менять брёвна, а заменять их новыми, более подходящими.


M>Нет, не лучше. Создание объекта — тяжелая операция. Редактирование — гораздо быстрее


Там сделай immutable и так чтобы копирование было дешевле.
Re[5]: Константный для себя и неконстантный для другого
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.02.11 13:42
Оценка:
Здравствуйте, Misha87, Вы писали:

IT>>Лучше, если стена будет не менять брёвна, а заменять их новыми, более подходящими.


M>Нет, не лучше. Создание объекта — тяжелая операция. Редактирование — гораздо быстрее


Раздели объект на две части — константная и редактируемая. Получится нечто вроде Property Bag + Handle.

class Block : PropertyBag
{
...
}

class Wall
{
...
   public HandleCollection<Blocks> Blocks
...
}
Re[5]: Константный для себя и неконстантный для другого
От: IT Россия linq2db.com
Дата: 07.02.11 18:08
Оценка:
Здравствуйте, Misha87, Вы писали:

IT>>Лучше, если стена будет не менять брёвна, а заменять их новыми, более подходящими.

M>Нет, не лучше. Создание объекта — тяжелая операция. Редактирование — гораздо быстрее

Это зависит от дизайна объектной модели. Можно спроектировать так, что создание объекта не будет тяжёлой операцией. Например, всю тяжесть вынести в другие объекты.

В любом случае, это беспредметный спор без знания деталей твоего проекта. Одно можно сказать точно — не на ту дорожку ты свернул.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: Константный для себя и неконстантный для другого
От: LeonidV Ниоткуда http://vygovskiy.com
Дата: 08.02.11 04:46
Оценка: 1 (1)
Здравствуйте, Misha87, Вы писали:

M>Здравствуйте, IT, Вы писали:


IT>>Лучше, если стена будет не менять брёвна, а заменять их новыми, более подходящими.


M>Нет, не лучше. Создание объекта — тяжелая операция. Редактирование — гораздо быстрее

После редактирования объекта никаких дальнейших операций типа обновления экрана не будет? Если будет, то ПМСМ, создание объекта это будет незаметная операция на фоне других.
http://jvmmemory.com — простой способ настройки JVM
Re[3]: Константный для себя и неконстантный для другого
От: GarryIV  
Дата: 08.02.11 14:22
Оценка: +1
Здравствуйте, Misha87, Вы писали:

LV>>Какую задачу решаете, наверняка лучше есть решение?


M>Есть объект "стена". Внутри стены есть объекты "бревна". Бревно не может менять само себя. А вот стена при изменении геометрии меняет все бревна внутри себя.


Ну значит и не нужна геометрия для бревна.
Log {
int getLenght() {
   return wall.getLenght();
}
WBR, Igor Evgrafov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.