|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||||||||||
.NET 4.x Работа файлового менеджера и связанное с ним09.04.2021, 18:58. Показов 7394. Ответов 66
Метки нет (Все метки)
Тема создана в результате критики архитектуры приложения в теме Модальное Окно для выбора операции с файлами без зависаний при выполнении цикла.
И так. Я начал с нуля программу. Её основой файловый менеджер служит. И очень много вопросов. Во 1 файловый менеджер должен много каких операций выполнять. Во 2 ему также нужны доступ к данным параметров игры так сказать. Предыдущий код:
Но мне он сам не нравится особо так как взаимодействие с таким классом довольно таки тяжелая. И так. Сама реализация методов останется не изменным так как они исполняют именно то что нужно. Но надо сделать так чтобы взаимодействия с файловым менеджером была легкой. И от сюда проблемы у этого. Во 1 операции может выполнятся сразу несколько и паралельно. Основной операцией служит распаковка сохранений. Другое дело что в этот момент может также выполнятся и запуск игры (Который блин ну очень долгий и разделен на 2 этапа (1 - Игра запускается. 2 - Игра запущена)) и запуск редактора (который имеет этап редактор запущен) Основная проблема это отображение информации. Здесь я использую 1 класс и (наверное все же это ошибка) Вот приоритет отображение информации: 1. Распаковка сохранений 2. Запуск игры или игра запущена 3. Информация о запущенных других процессов. И от сюда вытекает то что у окна для этого всего 3 элемента. 1 Это отображения процента распаковки или загаловка о том что игра запускается или запущена. 2 Это полоска которая в 1 случае отображает процент распаковки в виде полоски а в остальных случаях используется просто как бегущий ползунок 3. Это текстовое поле но уже конкретно под распаковку. И также Файловому менеджору нужны данные (Параметры) игры которые конечно хранятся в отдельном классе settings и вот тут тоже не понятно. Их конечно можно передать в методы но с другой стороны хотелось бы сами данные сделать глобальными чтобы сами методы смогли получить доступ к данным. Данные конечно нельзя хранить в файловом менеджере так как они использоваться будут не только там. Добавлено через 9 минут И так. Есть вариант разделить операции под отдельные классы тоесть запуск игры отдельный класс. Запуск редакторов отдельный. Распаковка отдельный и запуск файлов тоже отдельный и создавать отдельные объекты для каждой операции соотвественно описать события которые повторятся будут в интерфейсе но с другой стороны это весьма затратно по памяти к томуже это все равно не решает приоритетов выполнения отображения информации о выполнении операций. Сами операции должны выполнятся паралельно это важно. Добавлено через 18 минут И более подробно о каких данных идет речь:
И список с сохранениями уже нужно создавать после того как данные загружены. Так как я говорил что данные эти и сам список должен быть глобальными то хранить объект с этими данными в cs окна отметаем. Но с друго йстороны где это вообще хранить. И вообще производить загрузка данных и запрос на данные если они отсуствуют.
0
|
|||||||||||
| 09.04.2021, 18:58 | |
|
Ответы с готовыми решениями:
66
Шаблон файлового менеджера Разработка файлового менеджера Реализация файлового менеджера |
|
Модератор
|
|||
| 19.04.2021, 20:36 | |||
|
У меня нет пока полного понимания требуемой функциональности приложения, но из того что понял, парсинг данных для настройки производится однократно при запуске приложения. И он никак не связан никакой логикой с другой функциональностью приложения. То есть это что-то типа кастомной реализации Properties.Settings.Default. По сути этот тип содержит в себе отдельную ветку приложения в которой полностью инкапсулирована логика работы с настройками. В том числе этот тип можно использовать и как Модель, и как View Model, и для прямых привязок в View. См. Запись из ViewModel в Setting.Properties (странность) Почему же нельзя сделать свой такой же тип? Ещё раз - я не утверждаю, что в данном случае это действительно будет правильным решения. Я не настолько понимаю общую логику функционирования приложения и все связи в нём, чтобы делать категоричные выводы. Но в общем случае, это вполне допустимый вариант. Добавлено через 2 минуты Понял.
0
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||
| 21.04.2021, 17:19 [ТС] | |||
|
А вот с диалоговыми окнами выбора файлов / папок вот тут без понятия. Я не могу выносить диалоговые окна выбора файлов / папок в главное окно потому что они должны вызываться только в том случае если данные игры из JSON небыли загружены. А загрузку данных я произвожу все также в DATAGame_Library DATAGame_Library это библиотека чтисто для получения и доступ к данным игры. Неважно к каким именно но она получает и хранит их в памяти для быстрого доступа. Например файловому менеджеру от туда нужно путь к игре для запуска игры. Или список сохранений для расшифровки сохранений чтобы их можно было редактировать. Также не понятно как сделать само закрытие программы. Если делать через событие ошибок и в случиях критических закрывать программу то нужно создавать отдельную библитеку ошибок. Думаю хороший вариант. Можно будет пользоваться в других программах но надо само событие тогда поместить в интерфейс а событие делается через делигат вот его я в интерфейс и не могу засунуть. С другой стороны даже не знаю. Целую библиотеку из за одного события так как ошибка это одно событие которое будет возвращать: 1. Тип ошибки Warning (Предупреждение) - Все ошибки которые не будут мешать работе программы Error или Critical Error - Ошибки из за которых работа программы станет невозможным. Естественно при таких результатах программа должна полностью прекратить работу включая все потоки созданные программой. 2. Заголовок ошибки. 3. Текст с ошибкой. Но как уже сказал это 1 событие и ради этого делать библиотеку даже не знаю но с другой стороны я смогу эту библиотеку юзать в любом месте. Добавлено через 5 минут На счет стандартных Properties.Settings то нет. Терпеть не могу c#'арповский Properties.Settings тупо потому что мусорка в системе так сказать ибо сохраняет данные фиг пойми где. Ладно я могу узнать где именно но а если комп чужой. А программа переносная всеже. Да и я люблю для хранения данных JSON а если это картинки или какието файлы то bin Так что использую серилизацию и десерилизацию так как очень удобно хоть и есть некоторые просадки по скорости но они не заметные. Всеже данные занимают всего то 1 КБ места. Даже меньше. Добавлено через 2 минуты Вот сами файлы они да. Много весят но путь к ним это всеголишь строка так что весит очень мало. Списки они не должны сохраняться. Просто в памяти висеть чтоб бес конца их не грузить. Добавлено через 9 минут Да. Конечно удобно свое диалоговое окно сделать чтобы выбрать все это проблема только в том что с ним возьни будет просто завались. Всеже у меня создания своего диалогового окна ну 1 день минимум если не больше. Во 1 это код а вторых это свое оформление делать и то это занимает без модели данных. С моделью данных будет гораздо сложнее. Так что гораздо проще мне просто юзать 2 диалога. Выбор файлов и выбор папки. Кокрас с оформлением у меня все очень плохо. Могу и 10 часов просидеть и все пойдет на помойку.
0
|
|||
|
Модератор
|
|
| 21.04.2021, 17:35 | |
|
Alexandr_7, я возможно не так вас понял.
Из предыдущих сообщений, я понял, что при загрузке вашего приложения сразу вызывается диалог загрузки настроек. Диалог этот никак не связан с другой логикой приложения, он просто создаёт экземпляр с данными настроек. Если загрузка настроек не была успешна, то происходит выход из приложения Environment.Exit(0);.Это так?
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||
| 21.04.2021, 19:01 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 21.04.2021, 20:54 | ||
|
Получается этот диалог можно оформить в виде отдельно проекта не связанного с остальными. По его результату можно будет принять решение о продолжении работы приложения или прекращении. Так же он должен вернуть некий контейнер с данными игры и на этом всё его взаимодействие с остальным приложением прекращается. Так?
0
|
||
|
|
||||
| 22.04.2021, 10:46 | ||||
|
2 - вы тратите время на какие-то "сверхправильные архитектуры", но при этом боитесь потратить лишний час на то чтобы сделать программу удобней?
0
|
||||
|
|
|
| 22.04.2021, 11:28 | |
|
По времени сообщению можете чекнуть сколько занимает набрать с нуля, то что я советую (включая диалоговое окно). В целом можете и дальше заниматся создавание еще одних либ исключительно ради ничего, при этом оставляя железобетоные завязки на wpf.
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||
| 22.04.2021, 11:39 [ТС] | |||
|
Срабатывания будет ну например в App.xaml или вынести в отдельное скрытое окно куда будет выводится журнал и при необходимости окно можно сделать видимым. Если ошибка критическая на пример не указаны нужные данные то просто прекращаем работу программы. Но у вас какойто другой способ. Не понял вас. Просто конструктор возвращать значения не может. А загрузку данных мне не хочется делать в главном приложения так как не относится к нему. Относится чисто к данным игры которые в отдельной библиотеки.
0
|
|||
|
Модератор
|
|||
| 22.04.2021, 11:53 | |||
|
Метод возвращает результаты своего выполнения и загруженные данные. Код который вызвал этот метод (CB App) по результатам выполнения метода уже сам решит что надо делать дальше: продолжить работу, вывести сообщение об ошибке, выйти из приложения и т.д. Добавлено через 2 минуты Даже если там будет десяток строк кода. Отдельный проект, в первую очередь, помогает избавиться от проникновения паразитных зависимостей. При недостатке опыта или в больших проектах, где это трудно контролировать, намного проще сделать отдельный проект, чем потом искать причину случайных ошибок.
0
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||||
| 22.04.2021, 12:02 [ТС] | ||||
|
Во вторых на счет MessageService. Интерфейс в 1 месте класс в другом. Не можно конечно и даже нужно в некоторых ситуациях но у меня данная блиблиотека скорее всего будет использоваться в других проекта поэтому и класс и интерфейс в 1 библиотеки будут находится. 2. Не нужно в 1 библиотеку пихать и файловый менеджер и данные игры так как файловый менеджер космвенно с ними связан а если точнее то практически вообще не связан. С другой стороны наверное может стоит и объеденить так как все равно будет использоваться только в 1 проекте. Ладно. Переименую библиотеку и объеденю. Но в любом случае не знаю на сколько этот проект по стандартам MVP Добавлено через 7 минут Его в томже классе оставлять или в отдельный выносить? Ведь это не 1 строка. Возвращать необходимо 5 строк.
0
|
||||
|
Модератор
|
|||
| 22.04.2021, 12:14 | |||
|
Если есть вероятность изменения, расширения данных, то либо Dictionary<string, object>, либо просто object. Возвращать метод будет результат выполнения: успешно, ошибка и т.п. Сами данные через out-параметр. Добавлено через 2 минуты Лично я обычно делаю в том же классе. Так как конструктор экземпляра скрываю (экземпляр MessageBox вы же не можете создать), и обратиться к нему можно только из статического метода этого же класса.
0
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||
| 22.04.2021, 12:35 [ТС] | |||
|
Добавлено через 11 минут Только щас понял минус. Мне параметром прийдется весь класс возвращать ибо сама загрузка это Десерилизация класса из JSON Или парсить вручную что не совсем удобно.
1
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||||||
| 22.04.2021, 13:33 [ТС] | ||||||
0
|
||||||
|
Модератор
|
|||
| 22.04.2021, 13:39 | |||
|
Там же, при обращении, проверяете результат и, если надо, закрываете приложение. Для App - это дозволенный функционал. Добавлено через 3 минуты Почему сразу не вызвать GetDataGame?
0
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|||
| 22.04.2021, 13:45 [ТС] | |||
|
0
|
|||
|
|
||||||||
| 22.04.2021, 13:49 | ||||||||
|
- будете развлекатся с постоянным подключение очередной библиотеке к проекту - нельзя сделать замыкание между двумя типами, если они в разных либах. - собирать потом весь этот зооопарк в том же TeamCity тоже весело (хотя это не ваш случай, но вроде же намылились делать по нормальному?) - если на практике нужно будет подложить другую версию, то одним файлом это делаеть проще. Учитывая что ваши мелкие либы в отрыве от основного проекта не шибко из себя что-либо представляют -- смысл вообще выносить отдельно? Ну и так: 1. Почитайте про DI и IoC. Очень сильно поможет пониманию как не делать жесткие зависимости, и накой существует interface (хотя это не единственное его применение). Чтива на полдня (если не меньше), зато сэкономит в будущем немало времени на разработку и понимание происходящего. 2. Не усложняйте себя жизнь. Серьезно, git был придуман для того чтобы проект можно було сопровождать и дорабатывать. Не хочется сейчас делать диалговое окно для настроек? Окей, оставляйте TODO в коде, закидывайте простыню и собирайте проект чтобы проверить что настройки в целом попадают в FileManager. Разнести один проект на 10 отедльных всегда успеете. Пока у вас пустой окно, пустая либа и наполеоновские планы. 3. в целом, раз я уже вязался в эту тему, могу еще ради приличия глянуть старые исходники. Возможно даже переделать под WPF, но это уже вам решать выкладывать ли это в общий доступ.
0
|
||||||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
|
| 22.04.2021, 13:49 [ТС] | |
|
У меня вопросс. Как библиотеку Eador_M_of_the_B_W_Library (Ну предыдущие название DATAGame_Library) сделать WPF библиотекой NET Framework. Просто в шарпе нет такого шаблона. А NET Core не подходит.
Мне просто важно чтобы в библиотеке Eador_M_of_the_B_W_Library добавлялись окна WPF а не WinForms
0
|
|
|
Модератор
|
||
| 22.04.2021, 13:52 | ||
|
Так как DATAGameModel у вас может быть нужен в любом UI элементе (Окне, UserControl и др.), то будет разумно его записать в одно из свойств локатора в ресурсах App. Если он нужен в каких-то VM, то передавать ссылку на него в конструктор VM.
0
|
||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
|
||||
| 22.04.2021, 14:05 [ТС] | ||||
|
Точнее Файловый менеджер я пока не добавлял. Мне сначало нужно решить работу самого DataGame Но MessageService останется отдельной либой тупо потому что удобно будет ее подключить к любому проекту. Даже несмотря на то что пока что там всего 1 метод. Так что пока что будет 2 диалога без объедениния в одно окно потому что так проще. Добавлено через 2 минуты Добавлено через 2 минуты Можно засунуть в App.xaml приложения Eador_M_of_the_B_W_Launcher Но мы хотели эксперимент на консольном приложении делать а значит надо другое место думать. Не в приложении а в библиотеке. С другой стороны закрывать нужно приложение.
0
|
||||
| 22.04.2021, 14:05 | |
|
Исходник файлового менеджера Оформление для файлового менеджера Основные функции файлового менеджера
Смена файлового менеджера по умолчанию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|