|
Любитель чаепитий
|
|||||||||||
Задача проектирования архитектуры12.05.2017, 22:25. Показов 1589. Ответов 2
Метки нет (Все метки)
добрый день.
недавно дали первое моё самостоятельное задание. ну, как самостоятельное, просто мне дали в этом задании полную свободу действий и писал я с нуля, а не дорабатывал что-то. так вот, вкратце опишу, что имеется, что требовалось, возникшие проблемы и что получилось. вкратце задача состоит в том, чтобы сохранять разные виды структур в файлы, об этом далее. что имелось - объекты - подобъекты - часть подобъекта по сути просто иерархия:
суть в том, что каждый объект имеет разный тип записи в файл, но каждый объект может иметь только 1 вид записи в файл. что требовалось по требованию пользователя сохранять объекты/подобъекты/части подобъекта в файл.
проблемы
что получилось по сути получилось как-то так: (сразу оговорюсь, что названия для классов не самые удачные, а некоторые исковерканы.) SaveController - класс, к которому все обращаются с просьбой сохранить что-то.пример: к нему приходит список объектов для сохранения. он вынимает из каждого сохраняемого объекта подобъекты, из подобъектов вынимает части подобъектов и формирует их список, затем он смотрит тип объекта и на основании этого выбирает тип записи, затем отсылает дальше. SaverThreadController - прослойка, которая просто отсылает данные в отдельный поток, т.к. запись на диск - дорогостоящая операция, а при сохранении ~2Гб данных GUI просто виснет, а так мы тратим время только на вынимание всех частей подобъекта.Saver - собственно, реализует алгоритм сохранения, а именно открывает какой-то врайтер, записывает всё, что пришло, потом закрывает.ну и делает ещё всякие мелочи, которые не важны особо. WriterMng - руководит всеми врайтерами, по сути хранит по экземпляру каждого и отдает указатель на BaseWriter по типу записи, который ему приходит из Saver'a.хранится в Saver'e.BaseWriter - базовый класс, который имеет 3 чисто-виртуальные функции: init, write, close, так же имеет просто виртуальную функцию justWrite, которая реализуется простым вызовом write, но нужна в классе ParsedWriter для того, чтобы писать в него без парсинга(используется, когда мы сохраняем части подобъекта, потому что мы можем взять 1, 3, 5 и 6 часть подобъекта и этих данных просто будет недостаточно для парсинга(считаю это большим косяком, т.к. добавляем метод в интерфейс только для того, чтобы не парсить в особых случаях)).ParsedWriter - врайтер, который выступает в качестве интерфейса для парсера и как только сюда попадает часть подобъекта, то сразу же отсылается парсеру, как только парсер нашел новый фрагмент, он отсылает по интерфейсу буфер и в файл записывается этот буфер, затем файл переоткрывается с новым именем.проблемы тут состоят с тем, что нужно писать только целые фрагменты и постоянно держать в памяти, что же там в имени файла должно быть. наследуется от BaseWriter.HeaderWriter - врайтер, который при ините пишет глобальный хедер в файл, потом перед записью каждой части подобъекта пишет ещё хедер.наследуется от BaseWriter.TextWriter - думаю, в объяснении не нуждается, просто в файл текст пишет. наследуется от BaseWriter.примерно путь данных вот так описан у меня: Кликните здесь для просмотра всего текста
очевидно, что моя архитектура не особо выдерживает критику, так что на счет неё лучше не надо. лучше бы поговорить о том, что можно улучшить. или как переписать с нуля. честно, я не думаю, что кто-то до конца дочитает. а уж тем более не думаю, что кто-то заинтересуется данной темой. пишу только для того, чтобы в будущем посмотреть и сказать, какой же я был дурак, что так писал. ну и ещё вдруг я перечитаю сейчас и пойму, где очень большая ошибка. Не по теме: p.s. у меня, похоже, талант к говнокодингу :D
0
|
|||||||||||
| 12.05.2017, 22:25 | |
|
Ответы с готовыми решениями:
2
Объектно-ориентированного проектирования и проектирования на основе структур данных
Проектирование ОО архитектуры |
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||
| 12.05.2017, 23:43 | ||
|
Сохранение одного объекта по результату будет отличаться от сохранения всех его подобъектов по отдельности? То есть нужно ли дополнительно указывать какие-то хедеры/футеры предварительно? Аналогичный вопрос с подобъектами и частями подобъекта. Вообще откуда взялась эта "часть подобъекта"? Почему это не самостоятельный осмысленный объект? Добавлено через 48 минут Помочь то хочется, но пока всей сути задачи уловить не получается.
0
|
||
|
Любитель чаепитий
|
||||||||||||||
| 13.05.2017, 07:42 [ТС] | ||||||||||||||
Сообщение было отмечено GbaLog- как решение
Решениет.е. объект содержит какие-то подобъекты, а эти подобъекты содержат части подобъектов, которые и надо сохранить. по сути задача сводится к тому, чтобы формировать список частей подобъектов, а потом их всех сохранять разом. но проблемсы именно с парсящимся врайтером, т.к. он генерирует имена для файлов сам когда угодно,а это больше одного файла. я не придумал особо годной архитектуры на этот счет. вот псевдокод его, надеюсь, что все типы будут понятны. если что, то сессия - это подобъект, а фрейм - это часть подобъекта. Кликните здесь для просмотра всего текста
и это самостоятельный объект, но содержаться он может только в подобъекте. как-то так получается: Кликните здесь для просмотра всего текста
0
|
||||||||||||||
| 13.05.2017, 07:42 | |
|
Помогаю со студенческими работами здесь
3
Немного из архитектуры ЭВМ Организация архитектуры движка
Критика архитектуры набора планов Ошибка при построении архитектуры if-else Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|