LINUX.ORG.RU

Как сделать объектную модель для ситуации «мама мыла раму»?

 


0

3

Дополнительные требования:
1) мам много;
2) мамы являются подмножеством гуманоидов;
3) рам много;
4) вымытая рама приносит гуманоидам счастье;
5) со временем вымытая рама постепенно становится невымытой;
6) в зависимости от внешних условий, рамы становятся невымытыми за разное время загрязнения
7) у разных рам разные размеры и нормативы на время отмывки;
8) мытьё рам занимает время;
9) перемещение между рамами занимает время
10) кроме мытья рам, мамы могут отдыхать
11) фигня случается

модель должна быть событийной, т.е. время от времени происходят события
(разная фигня типа
«рама загрязнилась»,
«мама переместилась к раме»,
«мама вымыла раму»,
«вымытая рама нанесла счастье гуманоидам»)

Проектируемое/предлагаемое решение должно позволять менять текущее состояние
(загрязнять указанные рамы принудительно, направлять мам на отмывку указанных рам)
и выяснять текущее состояние
(количество полученного счастья от сотворения мира)

★★☆

Последнее исправление: Einstok_Fair (всего исправлений: 1)

Ответ на: комментарий от Einstok_Fair

Допустим, что рама хранит два массива

Второй массив (моющие в данный момент) нужен не всем рамам, а только тем, за которыми в данный момент идёт наблюдение. Поэтому классов нужно три: мама, рама, наблюдатель.

объекты попарно соединять при помощи подписки на события удаления. Удалилась мама - это событие должны обработать рама и наблюдатель. Удалилась рама - это событие должны обработать мама и наблюдатель. Удалился наблюдатель - это событие должна обработать рама и мама для того, чтобы подчистить свои списки рассылки уведомлений о событиях.

Два момента мне остаются не ясны:
1) бывают ли фильтры на события перед их отправкой (так, маме нужно получать события только о самой себе, а не о всех мамах, приписанных к раме).
2) как всё-таки организовывать многопоточность. Если работа с объектами идёт из разных потоков - то не будет ли возникать неконсистентных состояний даже при наличии блокировок? Ведь транзакций-то нет.

Einstok_Fair ★★☆
() автор топика

Итак, промежуточные итоги:

1) что такое ЧМЗ и как его делать на LOR-е никто не знает и никто не вспомнил. Кроме того, там патенты от IBM.

2) никто не посоветовал SQLite и его in memory database. А ведь это как раз почти то что нужно - транзакции и без durability.

К sqlite есть биндинги ко всем языкам - хоть к Java, хоть к C#. Однако зная контингент LOR нужно брать Java несмотря на то, что C# технически лучше за счёт Value Types.

Почему не JavaScript и orbit-db? Потому что в JS не очень с многопоточностью. Из этого следует, что orbit-db с высокой вероятностью не даёт возможности менять модель параллельно из разных потоков (это предположение, так как мало времени прошло от начала разработки orbit-db).

К Java для работы с Gtk+ есть java-gnome, есть надежда, что он будет работать и с mate.

Теперь дальше, если писать объектную модель на языке со сборкой мусора, то нужен какой-то ORM. И всё это вместе выглядит очень сложным и тяжеловесным.

Einstok_Fair ★★☆
() автор топика
Ответ на: комментарий от Einstok_Fair

В то же время в C# есть TransactionScope, попробовать использовать это вместе с SQLite. Но специальную объектную модель-то для этого всё равно надо делать, а как делать - неясно.

Einstok_Fair ★★☆
() автор топика
Последнее исправление: Einstok_Fair (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.