|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Добрый день, Введение: моя работа не связана с программированием, но как хобби пишу приложение для автоматизации своей работы. За последние два года код сильно разросся, оброс связями, дублированием кода, что с трудом могу в нем разобраться, новые функции внедряются все труднее. И вот в третий раз сел все переписывать, но уже по науке – с проектированием, паттернами и пр. Прочитал две книги по паттернам - GoF и «Паттерны проектирования» Фримена, все интересно, а как применить эти знания к моей задаче не соображу. Что-нибудь я конечно придумаю, но прошу опытных помочь мне советом т.к. знакомых опытных программистов нет. Задача: есть модель корабля [М], которая состоит за нескольких помещений А1..An, каждое помещение может содержать несколько помещений (B1..Bn, C1..Cn, D1..Dn, E1..En), более низкого класса (A> B>C>D>E) или вообще ничего не содержать. Каждое помещений это трехмерная модель+свойства. Свойства есть как уникальные для каждого класса, так и общие для всех помещений. Все это используется для вывода разных расчетов, таблиц, 3д. Как лучше организовать такую структуру данных, чтобы получать список всех помещений заданного класса (A, B,C,D,E) был удобный доступ к каждому помещению и его содержимому? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 15:43 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Паттерны в современном их понимании - бесполезная вещь. Олдскульные структуры данных - рулят. На картинке изображено типичное дерево с которым нет проблем ни в ООП, ни в процедурном программировании. Тебе нужен удобный доступ исключительно при спуске сверху вниз или начиная из любого узла? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 16:19 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Из любого узла вниз. У меня опыта мало, в итоге только в конце понимаю как это нужно было делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 16:38 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, где ты там увидел дерево? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 16:46 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
ViPRosDimitry Sibiryakov, где ты там увидел дерево? А ты переверни вверх ногами)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 19:04 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Petro123, да хоть раком, нет там дерева ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 19:14 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
> нет там дерева А что есть? Классическое дерево. Классическая реализация: узлы отдельно, структура отдельно. Не наводите тень на плетень, Сахават. Геморрой в этой задаче связан не со структурой, а с описанием ограничений и свойств. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 19:48 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
guest_20040621, а где ты видел, что одно и то ж яблоко росло на разных ветках дерева? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 22:34 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
> одно и то ж яблоко росло на разных ветках дерева Не одно и то же яблоко, а яблоки одного типа на разных ветках. Тривиально: node (id, name, ...); graph (node_id, node_pid, ...); Проблема в том, что характеристики node могут быть контекстно-зависимыми и могут быть заданы возможным диапазоном или сочетаниями. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2014, 22:48 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
guest_20040621, ладно , кто че хочет то и видит все как всегда ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 03:20 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Сахават, напишите graph в виде (id, pid, node_id, node_pid, depth, ...), - всё сразу станет нагляднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 03:50 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
я бы для узла дерева взял такой объект или структурку: (предок, следующий_близнец, первый_потомок, (остальные свойства)) - неважно, указатели это, индексы в массиве или ID-ы (тогда еще плюс ID самого узла) т.е. все узлы одного уровня ("близнецы") - как бы в односвязном списке, родитель ссылается только на первого и сделал бы рекурсивную процедурку обхода дерева, строящую после его обновления все нужные "списки всех помещений заданного класса" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 07:06 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
> (предок, следующий_близнец, первый_потомок, (остальные свойства)) Celko начитались? (id, pid, node_id, depth, model_id, ...) - это наиболее простое и очевидное решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 08:35 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
guest_20040621, причем тут целко, когда речь вообще о структуре данных - в памяти, очевидно (мне так хрустальный шар показывает, а датабазникам с их молотками везде гвозди мерещатся) сложить эту структуру в БД и считать из неё - уже вторичная задача и как вы от родителя детям перейдете, если НЕ БУДЕТ возможности "селекта"? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 10:47 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
Действительно, речь о структуре данных в памяти, а не о бд. Подгружаю файлы (автокад, рино) с моделью, беру из нее, то что мне нужно, в итоге получаю структуру как на картинке в первом посте, с ней дальше и работаю. Вот интересно мнение о об организации такой структуры в памяти, т.к то что сделано у меня сейчас уже трещит по швам и уходят часы чтобы разобраться в том что сам писал год назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 12:37 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
miron_baton, В памяти можно сделать Любую структуру. Начни тогда с UML ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 14:13 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
miron_baton, Переведи последний пост. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 14:16 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
miron_baton, в 15571436 что-то непонятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 18:33 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
а в чом проблема-то? как я понял, ТС уже сделал программу, и она работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 22:10 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
kmawа в чом проблема-то? как я понял, ТС уже сделал программу, и она работает. miron_batonЗа последние два года код сильно разросся, оброс связями, дублированием кода, что с трудом могу в нем разобраться, новые функции внедряются все труднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 22:28 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
miron_batonуходят часы чтобы разобраться в том что сам писал год назад. не месяцы, же. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 22:29 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
kmaw, ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2014, 22:39 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
miron_batonто что сделано у меня сейчас уже трещит по швам и уходят часы чтобы разобраться в том что сам писал год назад. Именно для этого человечество уже давно изобрело комментарии в коде. Не знаю что там наворочено у тебя, но эта структура легко укладывается в класс, хранящий в себе ссылки на дочерние узлы. Для отображения на экране такой структуры обычно используется TreeView. Потому что, как я уже сказал, это обычное дерево. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2014, 16:33 |
|
Нужен совет по проектированию
|
|||
---|---|---|---|
#18+
> причем тут целко Видимо, при том, что начальных источников идиотских решений не так много. > сложить эту структуру в БД и считать из неё - уже вторичная задача Дружище, нельзя быть настолько тупым. Стыдно. Противоестественно. > если НЕ БУДЕТ возможности "селекта"? Если бы вы взяли на себя труд читать, а не только писать, то легко обратили бы внимание на особенность предложенного решения: иерархия - отдельно от узлов. Хранить подчинённые узлы - ни одной проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2014, 17:21 |
|
|
start [/forum/topic.php?fid=33&msg=38561985&tid=1547623]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 181ms |
0 / 0 |