Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > представление сущностей классами


Автор: nmn 3.2.2010, 11:57
здравствуйте

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

набор одинаковых свойств изменяется  в процессе работы, так что сделать наследника класса и задать эти свойства статическими для класса не подходит

как это можно реализовать?

Автор: ivashkanet 3.2.2010, 12:29
Нифига непонятно. Можно на примере?



Автор: nmn 3.2.2010, 13:36
Цитата(ivashkanet @  3.2.2010,  12:29 Найти цитируемый пост)
Нифига непонятно. Можно на примере?

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

придумал, нужно сделать нормализацию как в базах данных

может еще есть варианты?

Автор: KelTron 3.2.2010, 14:39
Цитата(nmn @  3.2.2010,  11:57 Найти цитируемый пост)
как можно сделать так чтобы набор одинаковых свойств не повторялся в каждом экземпляре класса?

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

Автор: nmn 3.2.2010, 14:51
Цитата(KelTron @ 3.2.2010,  14:39)
Цитата(nmn @  3.2.2010,  11:57 Найти цитируемый пост)
как можно сделать так чтобы набор одинаковых свойств не повторялся в каждом экземпляре класса?

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

проблема в том что у меня может быть только определенное количество таких классов и я не могу создавать их во время выполнения программы

Автор: ivashkanet 3.2.2010, 15:29
nmn, елси честно понятнее не стало. Включаю телепатию.
Цитата(nmn @  3.2.2010,  13:36 Найти цитируемый пост)
придумал, нужно сделать нормализацию как в базах данных

В ООП это называется Агрегация.

Раз несколько классов могут содержать одини и те же свойства, то чтобы не тратить память и не создавать этот объект много раз предлагается использовать фабрику этих объектов (фабрика либо создает новый либо переиспользует старый). Этот подход описан в паттерне http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%BB%D0%B5%D0%BD%D0%B5%D1%86_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29.


Но прежде чем применять этот подход я предлагаю остановиться и подумать.
Агрегацию стоит применять только в том случае, если группа свойств образует группу логически (Адрес, Размер, ...). Объединять Адрес и Фамилию в один агрегат не стоит.
Приспособленец довольно сложен в плане реализации и значительно ухудшает понятность кода. В простых случаях лучше использовать подход реализованных в классе Color через статичесткие свойства: Color.Red, Color.Blue, ...


СУВ, ivashkanet

Добавлено через 1 минуту и 4 секунды
Цитата(nmn @  3.2.2010,  14:51 Найти цитируемый пост)
проблема в том что у меня может быть только определенное количество таких классов и я не могу создавать их во время выполнения программы 

О! Тогда подход класса Color самое оно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)