Разделение функциональности и кода
От: Crystalizer Украина  
Дата: 05.05.11 11:26
Оценка:
Всем привет!

В учебниках по ООП мы видели примеры типа

Shape shape = new Circle()
shape.draw();

для изображения принципов полиморфизма.
В принципе, такой код выглядит наглядно.

Но вот в J2EE например, принято разделять данные и функциональность:
отдельно простейшие классы с полями данных, отдельно классы функциональности.

В каком случае какой подход лучше применять?
Re: Разделение функциональности и кода
От: dimgel Россия https://github.com/dimgel
Дата: 05.05.11 12:39
Оценка:
Здравствуйте, Crystalizer, Вы писали:

C>В каком случае какой подход лучше применять?


Я думаю, тебе никто не отвечает, потому что уже устали сраться на эту тему. Вот, почитай одно из обсуждений: http://rsdn.ru/forum/design/3406168.aspx
Автор: GlebZ
Дата: 27.05.09
Re[2]: Разделение функциональности и кода
От: Crystalizer Украина  
Дата: 05.05.11 12:43
Оценка:
Здравствуйте, dimgel, Вы писали:

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


C>>В каком случае какой подход лучше применять?


D>Я думаю, тебе никто не отвечает, потому что уже устали сраться на эту тему. Вот, почитай одно из обсуждений: http://rsdn.ru/forum/design/3406168.aspx
Автор: GlebZ
Дата: 27.05.09


о, большое спасибо за ссылку
Re[2]: Разделение функциональности и кода
От: Sorc17 Россия  
Дата: 05.05.11 15:01
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Вот, почитай одно из обсуждений: http://rsdn.ru/forum/design/3406168.aspx
Автор: GlebZ
Дата: 27.05.09


Хех, ничего не знал про эти модели, но в своей игрушке интуитивно стал переходить на стройную модель, когда получил ад с изменениями и синхронизациями объектов в множестве потоков, вообще перестав понимать что и где происходит. Поэтому решил отказаться от возвращения ссылок и передачи ссылок на объекты, и вместо этого переделать всё на сервисы, которые будет что-то делать по всяким там id и результаты тоже возвращать в подобном виде.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[3]: Разделение функциональности и кода
От: Crystalizer Украина  
Дата: 10.05.11 12:35
Оценка:
Здравствуйте, Sorc17, Вы писали:

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


D>>Вот, почитай одно из обсуждений: http://rsdn.ru/forum/design/3406168.aspx
Автор: GlebZ
Дата: 27.05.09


S>Хех, ничего не знал про эти модели, но в своей игрушке интуитивно стал переходить на стройную модель, когда получил ад с изменениями и синхронизациями объектов в множестве потоков, вообще перестав понимать что и где происходит. Поэтому решил отказаться от возвращения ссылок и передачи ссылок на объекты, и вместо этого переделать всё на сервисы, которые будет что-то делать по всяким там id и результаты тоже возвращать в подобном виде.


во. вот и мне кажется что когда логика обработки сущностей очень ветвистая — то она должна стоять отдельно. иначе это всё становится безумно сложно...
Re[4]: Разделение функциональности и кода
От: Sorc17 Россия  
Дата: 10.05.11 13:22
Оценка:
Здравствуйте, Crystalizer, Вы писали:

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


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


D>>>Вот, почитай одно из обсуждений: http://rsdn.ru/forum/design/3406168.aspx
Автор: GlebZ
Дата: 27.05.09


S>>Хех, ничего не знал про эти модели, но в своей игрушке интуитивно стал переходить на стройную модель, когда получил ад с изменениями и синхронизациями объектов в множестве потоков, вообще перестав понимать что и где происходит. Поэтому решил отказаться от возвращения ссылок и передачи ссылок на объекты, и вместо этого переделать всё на сервисы, которые будет что-то делать по всяким там id и результаты тоже возвращать в подобном виде.


C>во. вот и мне кажется что когда логика обработки сущностей очень ветвистая — то она должна стоять отдельно. иначе это всё становится безумно сложно...


У меня одни и те же игроки были во множестве разных списков (список всех игроков, список игроков видимых игроку 1, игроку 2, ...) Было много тредов, которые выполняли всякие задачи и которым постоянно нужен был доступ ко всяким данным (тред захвата цели башней и инициирования атаки, тред синхронизации внутреигрового времени с клиентами, тред, обрабатывающий попадание снарядов после того как они долетят до цели). И я всюду передавал ссылки на игрока, ссылки на текущую позицию, ссылку на объект снаряда, чтобы можно было вызвать у них соответствующие методы. В итоге я получил хаос, такой что перестал понимать где и что меняется, где и кто вызывает методы и решил всё полностью переделать. Теперь игра будет состоять из отдельных сервисов, которые будут общаться между собой с помощью внутреннего протокола, не вызывая методы объектов непосредственно, а лишь оставляя запрос на их выполнение и параметры для вызова метода. И эти запросы будут складываться в очередь внутри каждого сервиса и выполняться внутренним тредом сервиса. Не знаю пока всё ли у меня получится таким образом сделать, поживём увидим.
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.