Использовать ли статическую структуру?
От: tol05  
Дата: 03.10.07 14:04
Оценка:
Привет всем.

Мне нужно проходить по древовидной иерархии родственных объектов и для каждого из объектов выполнять набор действий.

Каждое действие требует определенных данных об объекте — я, после перехода на объект в дереве, создаю набор параметров (данных об этом конкретном объекте) и отдаю этот набор в модуль, выполняющий сами эти действия (что-то вроде паттерна "стратегия" ). Внутри модуля каждая стратегия сама вытягивает из набора параметров те, которые ей нужны. Все вроде работает. Я не отдаю объект целиком, вместе с его данными, потому что не хочу связывать интерфейсы объектов и стратегий.

Но мне не нравится моя архитектура программы. Вначале я использовал
Dictionary<string, object> parameters

потом я подумал, что нехорошо для сотен и тысяч объектов создавать сотни и тысячи словарей. Все равно программа — однопоточная и вполне подойдет для хранения параметров один, статический объект... А потом подумал — еще лучше использовать структуру — меньше засорение памяти, быстрее работа.

Сделал структуру. Все ее поля (и свойства) — статические. Но само объявление структуры — без слова static (компилятор не разрешает).

Хотелось бы услышать мнения о следующем:
— допустимо ли использование структуры описанным мной образом? Если да, то будет ли эффект от ее применения?
— если моя структура фактически статическая (проверял значения ее полей всему по стеку — сохраняются при выходе из методов), то почему компилятор против слова static в объявлении структуры?

Спасибо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Использовать ли статическую структуру?
От: Lloyd Россия  
Дата: 03.10.07 14:25
Оценка:
Здравствуйте, tol05, Вы писали:

T>Сделал структуру. Все ее поля (и свойства) — статические. Но само объявление структуры — без слова static (компилятор не разрешает).


T>Хотелось бы услышать мнения о следующем:

T>- допустимо ли использование структуры описанным мной образом?
Допустимо
T>- Если да, то будет ли эффект от ее применения?
Нет, никакого отличия от использования статического класса не будет.
Re[2]: Использовать ли статическую структуру?
От: tol05  
Дата: 04.10.07 07:59
Оценка:
Здравствуйте, Lloyd

Спасибо
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Использовать ли статическую структуру?
От: _FRED_ Черногория
Дата: 04.10.07 08:21
Оценка: 2 (1)
Здравствуйте, tol05, Вы писали:

T>- допустимо ли использование структуры описанным мной образом?


О допустимости с формальной точки зрения скажет компилятор :о)) С точки же зрения здравого смысла — нет, ибо специально для подобных случаев были добавлены в язык статические классы.

T>Если да, то будет ли эффект от ее применения?


А какой эффект ты ожидаешь?

T>- если моя структура фактически статическая (проверял значения ее полей всему по стеку — сохраняются при выходе из методов), то почему компилятор против слова static в объявлении структуры?


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

Основное (и единственное) назначение структур в том, что память под них выделяется на стеке. Всё. Добавление чего-либо ещё нарушает Single responsibility principle, что затрудняет использование и понимание структур. Во всех остальных "общих" случаях (например, создание типа только со статическими членами) необходимо полдьзоваться классами.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Использовать ли статическую структуру?
От: tol05  
Дата: 04.10.07 08:35
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А какой эффект ты ожидаешь?


_FR>Основное (и единственное) назначение структур в том, что память под них выделяется на стеке. Всё.

Вот этого эффекта и ожидал. Быстродействия, поскольку очень большое количество обращений производится. И значения полей меняются постоянно, да и полей — не одно...

по остальным тезисам — согласен. Мне и самому не нравится мой вариант. Нравился бы, не просил бы совета.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Использовать ли статическую структуру?
От: _FRED_ Черногория
Дата: 04.10.07 08:40
Оценка:
Здравствуйте, tol05, Вы писали:

_FR>>А какой эффект ты ожидаешь?

_FR>>Основное (и единственное) назначение структур в том, что память под них выделяется на стеке. Всё.
T>Вот этого эффекта и ожидал. Быстродействия, поскольку очень большое количество обращений производится. И значения полей меняются постоянно, да и полей — не одно...

Если ты обращаешься только к _статическим_ данным — никакого эффекта от быстродействия из-за размещения _экземпляров_ структуры на стеке быть не может.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Использовать ли статическую структуру?
От: tol05  
Дата: 04.10.07 08:45
Оценка:
Здравствуйте, _FRED_,

_Добавление чего-либо ещё нарушает Single responsibility principle

кстати, спасибо за ссылку. Интересно было узнать "об этом"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.