2013-02-19 4 views
1

Я всегда слышал, что вы должны разделять компоненты GUI/Data/Logic, такие как шаблон MVC. Итак, мне интересно: в графическом приложении, где вы фактически храните данные?Где хранятся данные в графическом приложении?

Вот пример (с использованием терминологии C#):
Предположим, у вас есть GUI, который принимает пользовательский ввод, выполняет некоторый анализ и отображает результаты в таблице.
Пользователь может иметь несколько анализов в одном окне, поэтому в нижней части списка находится ListView, который позволяет пользователю выбирать, какой анализ в настоящее время отображается (отображается выбранный элемент).

Чтобы отобразить это, данные анализа должны храниться где-нибудь.
Я всегда делал один из двух вещей:

  1. Поместите все данные в единый объект и сохранить его в собственности ListViewItem в «Tag»
  2. Продлить «ListViewItem» и просто добавить любые свойства мне нужно.

Но это означает, что я храню данные внутри ListViewItem. Есть ли более подходящее место для отслеживания данных?

Я могу добавить его в качестве частных членов в основную форму, но это похоже на одно и то же. Единственное, что я могу придумать, это сделать какой-то глобальный класс, с которым я могу ссылаться, когда мне это нужно.

Спасибо.

+0

Правильно ли я предполагаю, что вы говорите только о временном хранении - данные, которые существуют только во время работы приложения, и не имеют никакого настойчивости? –

+0

@ tereško Да, это правильно. – user807566

ответ

1

Как я понимаю, у вас есть некоторые элементы ListViewItems. Каждый ListViewItem связан с вашим бизнес-логическим объектом, и после выбора одного из ListViewItem вы хотите сделать некоторые операции над этим объектом buisness. В подобных ситуациях я обычно делаю Data Object таким, как

struct MyDataObject 
{ 
    string Id;//very often data object need to have Identifcator, but not always 
    //some fields 
} 

и добавить к конструкторам объектов данных типичный пользовательский ввод.

После этого я создаю уровень бизнес-логики, содержащий доступные алгоритмы для этих объектов данных. Для простых проектов, это статический класс, как

static class MyDataObjectOperationService{ 
    void MakeSomething(MyDataObject myDataObject); 
    object GetSomething(MyDataObject myDataObject); 
    ... 
} 

Для больших проектов, которые, как правило, interface. Также я обычно делаю слой данных interface для получения этого объекта данных. Например

interface IMyDataObjectRepository{ 
    IList<MyDataObject> GetAll(); 
    MyDataObject GetById(string id); 
    //CRUD operations if it need 
} 

После этого я поставил в ListViewItems идентификаторами объектов данных и ListViewItemClick получение выбора идентификатора, после того, что получение DataObject от Id с помощью классов слоев данных и сделать некоторые операции с использованием классов бизнес-логики. Если мне нужно сохранить изменения DataObject или создать новый DataObject I, используя классы слоев данных.

Смежные вопросы