Шаблон проектирования для приложения, ориентированного на данные - PullRequest
2 голосов
/ 16 июля 2011

У меня возникли небольшие проблемы с принятием решения о том, как структурировать создаваемое мной приложение.

Приложение должно анализировать текстовые файлы (по одной записи в строке) и загружать всю информацию вобъем памяти.Обычно существует от 100 000 до 500 000 записей.После этого данные должны отображаться в виде таблиц и очень подробных графиков / диаграмм для дальнейшего анализа.

Пользователь должен иметь возможность настроить представление этих данных.Например, существует много разных «типов» записей журнала (TypeA_Log, TypeB_Log и т. Д.). Пользователь должен иметь возможность выбирать / отменять выбор этих типов, которые будут отображать / скрывать их на дисплее.Существует несколько других типов фильтрации (фильтрация по дате и т. Д.)

-

По сути, у меня сейчас есть следующее:

У меня есть структура классакоторый представляет различные типы записей журнала.

Существует шаблон Singleton для хранения всех данных (почти как база данных в памяти), который включает списки <> экземпляров записей журнала.

Затем у меня есть класс «filter», который содержит информацию о том, что пользователь хотел бы просмотреть.«Фильтр» передается в Data-Singleton, а затем возвращает подмножество данных.Я в основном использую лямбда-выражения C # для выбора данных из списка <> записей журнала, аналогично тому, как вы можете передать инструкцию SELECT в базу данных SQL.

-

Этоработает хорошо, но я должен думать, что есть лучший способ справиться с этим.Прямо сейчас, каждый раз, когда пользователь вносит даже малейшее изменение (например, выбирает / отменяет выбор одного из многих типов записей журнала, новый набор данных должен быть извлечен из Data-Singleton, а затем все таблицы и диаграммы имеютчтобы быть обновленным / повторно объединенным / пересчитанным, чтобы отразить это изменение. В большинстве случаев все, что я действительно хочу сделать, это показать / скрыть определенные вещи.

Я использую C # .NET 3.5.

1 Ответ

0 голосов
/ 16 июля 2011

Вы можете создать некую внутреннюю систему уведомлений, которая также называется диспетчер событий .

Допустим, изменилась запись в одной форме, и вместо перезагрузки других зависимых форм вы запускаете событие, которое изменило некоторую запись (прикрепите запись с некоторыми пользовательскими EventArgs), и позволяете вашим зависимым формам принимать решениеобработка событий, если они включают эту новую запись где-нибудь.Вы можете обновить измененные данные в коллекциях зависимых форм.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...