Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Разработка информационных систем Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Нужен совет по проектированию  [new]
miron_baton
Member

Откуда:
Сообщений: 26
Добрый день,
Введение: моя работа не связана с программированием, но как хобби пишу приложение для автоматизации своей работы. За последние два года код сильно разросся, оброс связями, дублированием кода, что с трудом могу в нем разобраться, новые функции внедряются все труднее. И вот в третий раз сел все переписывать, но уже по науке – с проектированием, паттернами и пр. Прочитал две книги по паттернам - GoF и «Паттерны проектирования» Фримена, все интересно, а как применить эти знания к моей задаче не соображу. Что-нибудь я конечно придумаю, но прошу опытных помочь мне советом т.к. знакомых опытных программистов нет.
Задача: есть модель корабля [М], которая состоит за нескольких помещений А1..An, каждое помещение может содержать несколько помещений (B1..Bn, C1..Cn, D1..Dn, E1..En), более низкого класса (A> B>C>D>E) или вообще ничего не содержать. Каждое помещений это трехмерная модель+свойства. Свойства есть как уникальные для каждого класса, так и общие для всех помещений. Все это используется для вывода разных расчетов, таблиц, 3д.
Как лучше организовать такую структуру данных, чтобы получать список всех помещений заданного класса (A, B,C,D,E) был удобный доступ к каждому помещению и его содержимому?
Картинка с другого сайта.
14 фев 14, 15:43    [15568914]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47680
Паттерны в современном их понимании - бесполезная вещь.
Олдскульные структуры данных - рулят.
На картинке изображено типичное дерево с которым нет проблем ни в ООП, ни в процедурном программировании.
Тебе нужен удобный доступ исключительно при спуске сверху вниз или начиная из любого узла?
14 фев 14, 16:19    [15569202]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
miron_baton
Member

Откуда:
Сообщений: 26
Dimitry Sibiryakov,
Из любого узла вниз. У меня опыта мало, в итоге только в конце понимаю как это нужно было делать.
14 фев 14, 16:38    [15569337]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
ViPRos
Member

Откуда:
Сообщений: 9546
Dimitry Sibiryakov,

где ты там увидел дерево?
14 фев 14, 16:46    [15569387]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
ViPRos
Dimitry Sibiryakov,
где ты там увидел дерево?

А ты переверни вверх ногами))
14 фев 14, 19:04    [15570051]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
ViPRos
Member

Откуда:
Сообщений: 9546
Petro123,

да хоть раком, нет там дерева
14 фев 14, 19:14    [15570110]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
guest_20040621
Guest
> нет там дерева

А что есть?

Классическое дерево. Классическая реализация: узлы отдельно, структура отдельно. Не наводите тень на плетень, Сахават.

Геморрой в этой задаче связан не со структурой, а с описанием ограничений и свойств.
14 фев 14, 19:48    [15570270]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
ViPRos
Member

Откуда:
Сообщений: 9546
guest_20040621,

а где ты видел, что одно и то ж яблоко росло на разных ветках дерева?
14 фев 14, 22:34    [15570912]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
guest_20040621
Guest
> одно и то ж яблоко росло на разных ветках дерева

Не одно и то же яблоко, а яблоки одного типа на разных ветках. Тривиально:

node (id, name, ...);
graph (node_id, node_pid, ...);

Проблема в том, что характеристики node могут быть контекстно-зависимыми и могут быть заданы возможным диапазоном или сочетаниями.
14 фев 14, 22:48    [15570962]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
ViPRos
Member

Откуда:
Сообщений: 9546
guest_20040621,

ладно , кто че хочет то и видит все как всегда
15 фев 14, 03:20    [15571408]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
guest_20040621
Guest
Сахават, напишите graph в виде (id, pid, node_id, node_pid, depth, ...), - всё сразу станет нагляднее.
15 фев 14, 03:50    [15571410]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
фывайцук
Guest
я бы для узла дерева взял такой объект или структурку: (предок, следующий_близнец, первый_потомок, (остальные свойства)) - неважно, указатели это, индексы в массиве или ID-ы (тогда еще плюс ID самого узла)
т.е. все узлы одного уровня ("близнецы") - как бы в односвязном списке, родитель ссылается только на первого
и сделал бы рекурсивную процедурку обхода дерева, строящую после его обновления все нужные "списки всех помещений заданного класса"
15 фев 14, 07:06    [15571436]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
guest_20040621
Guest
> (предок, следующий_близнец, первый_потомок, (остальные свойства))

Celko начитались?

(id, pid, node_id, depth, model_id, ...) - это наиболее простое и очевидное решение.
15 фев 14, 08:35    [15571470]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
фывайцук
Guest
guest_20040621, причем тут целко, когда речь вообще о структуре данных - в памяти, очевидно (мне так хрустальный шар показывает, а датабазникам с их молотками везде гвозди мерещатся)
сложить эту структуру в БД и считать из неё - уже вторичная задача
и как вы от родителя детям перейдете, если НЕ БУДЕТ возможности "селекта"?
15 фев 14, 10:47    [15571552]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
miron_baton
Member

Откуда:
Сообщений: 26
Действительно, речь о структуре данных в памяти, а не о бд. Подгружаю файлы (автокад, рино) с моделью, беру из нее, то что мне нужно, в итоге получаю структуру как на картинке в первом посте, с ней дальше и работаю. Вот интересно мнение о об организации такой структуры в памяти, т.к то что сделано у меня сейчас уже трещит по швам и уходят часы чтобы разобраться в том что сам писал год назад.
15 фев 14, 12:37    [15571678]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
miron_baton,
В памяти можно сделать Любую структуру. Начни тогда с UML
15 фев 14, 14:13    [15571810]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
miron_baton,
Переведи последний пост.
15 фев 14, 14:16    [15571812]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
bidon_kordon
Guest
miron_baton, в 15571436 что-то непонятно?
15 фев 14, 18:33    [15572207]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
а в чом проблема-то? как я понял, ТС уже сделал программу, и она работает.
15 фев 14, 22:10    [15572762]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
iscrafm
Member [заблокирован]

Откуда:
Сообщений: 35350
kmaw
а в чом проблема-то? как я понял, ТС уже сделал программу, и она работает.


miron_baton
За последние два года код сильно разросся, оброс связями, дублированием кода, что с трудом могу в нем разобраться, новые функции внедряются все труднее.
15 фев 14, 22:28    [15572793]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
miron_baton
уходят часы чтобы разобраться в том что сам писал год назад.


не месяцы, же.
15 фев 14, 22:29    [15572797]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
kmaw,
)))
15 фев 14, 22:39    [15572820]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47680
miron_baton
то что сделано у меня сейчас уже трещит по швам и уходят часы чтобы разобраться в том что сам писал год назад.

Именно для этого человечество уже давно изобрело комментарии в коде.

Не знаю что там наворочено у тебя, но эта структура легко укладывается в класс, хранящий в себе ссылки на дочерние узлы. Для отображения на экране такой структуры обычно используется TreeView. Потому что, как я уже сказал, это обычное дерево.
16 фев 14, 16:33    [15573910]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
guest_20040621
Guest
> причем тут целко

Видимо, при том, что начальных источников идиотских решений не так много.

> сложить эту структуру в БД и считать из неё - уже вторичная задача

Дружище, нельзя быть настолько тупым. Стыдно. Противоестественно.

> если НЕ БУДЕТ возможности "селекта"?

Если бы вы взяли на себя труд читать, а не только писать, то легко обратили бы внимание на особенность предложенного решения: иерархия - отдельно от узлов. Хранить подчинённые узлы - ни одной проблемы.
16 фев 14, 17:21    [15574032]     Ответить | Цитировать Сообщить модератору
 Re: Нужен совет по проектированию  [new]
ViPRos
Member

Откуда:
Сообщений: 9546
guest_20040621,

ну вот
котлеты отдельно, а всякие мухи, собаки... отдельно
несущее дерево, елка рождественская
16 фев 14, 18:36    [15574263]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Разработка информационных систем Ответить