powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как лучше всего сериализовать статическую коллекцию?
56 сообщений из 56, показаны все 3 страниц
Как лучше всего сериализовать статическую коллекцию?
    #39270881
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть статическая коллекция

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Profile
{
    public static readonly ICollection<Profile> DefaultProfiles;        

    static Profile()
    {
        // Fill the DefaultProfiles...
    }
}



Как лучше всего сериализовать коллекцию DefaultProfiles?

Я читал, что сериализовать можно только нестатические и не рид-онли члены. Т. е. чтобы сериализовать DefaultProfiles, мне нужно сделать свойство-копию этого статического свойства, но уже не статическое и не рид-онли. Но мне ещё надо, чтобы каждый экземпляр Profile имел только одну копию DefaultProfiles. Попытался сделать так

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[Serializable]
public class Profile
{
    public static readonly ICollection<Profile> DefaultProfiles;        

    static Profile()
    {
        // Fill the DefaultProfiles...
    }

    public List<Profile> DefaultProfilesToSerialize
    {
        get { return new List<Profile>(DefaultProfiles);; }
    }
}



но ещё не проверял. Как считаете, будет работать? Тут расчёт на то, что копия DefaultProfiles будет создаваться только при сериализации, поэтому просто экземпляры Profile иметь каждый свою копию DefaultProfiles не будут, а будут ссылаться на один и тот же экземпляр. Верно я рассуждаю?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39270885
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
Что в итоге хочешь получить то?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39270889
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВMineRunner,
Что в итоге хочешь получить то?
1. Хочу сериализовать DefaultProfiles.
2. Хочу получить в десериализованной копии такую же статическую штуку DefaultProfiles.
3. Хочу иметь только одну копию DefaultProfiles на все экземпляры Profile в пределах одного приложения. Т. е. после десериализации в, например, другом AppDomain, можно иметь другую копию DefaultProfiles.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39270904
Иммануил Кант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай коллекцию синглтон
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39270956
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вообще не понимаю смысла серилизации, если только не работа череp WCF
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271006
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иммануил Кантсделай коллекцию синглтон
А у меня что?

Cat2Вообще не понимаю смысла серилизации, если только не работа череp WCF
Как раз работа через WCF. Я специально не конкретизирую, чтобы абстрагироваться.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271007
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, я туплю, но у меня такое ощущение, что я делаю что-то ненужное. Чтобы десериализовать объект в приложении А, это приложение А должно иметь ссылку на класс Profile, так? Тогда у него уже есть набор DefaultProfiles и при этом точно такой же, как и у того приложения Б, которое передаёт сериализованный объект приложению А, так? Т. е. сериализовать статическую константу DefaultProfiles в моём случае не нужно.

Вот если бы приложение А не имело ссылки на класс Profile и не знало бы о его внутренней структуре, а получало бы просто данные в том виде, в который я сериализую объекты (xml там, или json), то имело бы смысл создавать дублирующее свойство, которое бы превращало static readonly в какое-нибудь обычное свойство, которое можно сериализовать.

Правильно я рассуждаю?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271008
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerВот если бы приложение А не имело ссылки на класс Profile и не знало бы о его внутренней структуре, а получало бы просто данные в том виде, в который я сериализую объекты (xml там, или json), то имело бы смысл создавать дублирующее свойство, которое бы превращало static readonly в какое-нибудь обычное свойство, которое можно сериализовать.

Правильно я рассуждаю?
Ну и вдобавок к этому, если я хочу, чтобы при добавлении DefaultProfilesToSerialize как дублирующего свойства для DefaultProfiles обычные инстансы класса Profile ссылались на ту же самую коллекцию дефолтных профайлов, то имеет смысл сделать свойство DefaultProfilesToSerialize без поля поддержки (backing field) - а просто чтобы это свойство возвращало ту же коллекцию DefaultProfiles.

Так?

Тогда мне надо переписать её без интерфейса - на конкретную коллекцию:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[Serializable]
public class Profile
{
    public static readonly List<Profile> DefaultProfiles;        

    static Profile()
    {
        // Fill the DefaultProfiles...
    }

    public List<Profile> DefaultProfilesToSerialize
    {
        get { return DefaultProfiles; }
    }
}
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271009
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно всё сделал?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271022
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerЯ правильно всё сделал?
Про цели не говориш
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271044
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerКак раз работа через WCF. Я специально не конкретизирую, чтобы абстрагироваться.
Конкретизируйте хотя бы во что сериализовать: Binary, JSON, SOAP, XML, ProtoBuf, в сообщение для какой-нибудь очереди?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271046
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner, а что вообще такое DefaultProfiles и почему определено как статическое поле у Profile ?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271049
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: ну и сеттер надо добавить для DefaultProfilesToSerialize. Потому как read only свойства не сериализуются.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271070
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
ну допустим статик можно обойти через iserializable
ну допустим только чтение можно можно обойти через приватное прокси свойство в гетдатаобджект и конструкторе сериализации
ну предположим можно обмануть рекурсию

ну что вы будете делать со своей бедой в многопоточном исполнении, когда один поток работает с вашим листом
а другой поток в десериализаторе чистит лист и хуячит дуда профили с диска?
Ну и возникает вопрос - если кто - то снаружи имеет ссылку на профиль в листе а вы через десериализатор
расхуячили этот лист и запихнули туда левые профили, что делать этому бедному существу снаружи с его ссылкой?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271074
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
ну допустим статик можно обойти через iserializable
ну допустим только чтение можно можно обойти через приватное прокси свойство в гетдатаобджект и конструкторе сериализации
ну предположим можно обмануть рекурсию
Ой зря Вы ему об этом написали :)
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271077
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
да пускай учится, берет учебник читает про инкапсуляцию,
открытое поле для чтения и аксессор к этому полю снаружи выносит мозг не по детский.
тем более инициализированное нулем гыгы, а мутатор ( типа set) ему студия не дала поставить )))))
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271153
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMineRunnerКак раз работа через WCF. Я специально не конкретизирую, чтобы абстрагироваться.
Конкретизируйте хотя бы во что сериализовать: Binary, JSON, SOAP, XML, ProtoBuf, в сообщение для какой-нибудь очереди?
А в чём будет принципиальное различие, если я для разных этих вещей сериализую?

Пусть будет сериализация XML. Забудьте про WCF (это я зря приплёл).

skyANAMineRunner, а что вообще такое DefaultProfiles и почему определено как статическое поле у Profile ?
Про профили я просто так придумал. Тут главное суть - есть некие дефолтные наборы настроек. Я запихал их в константную статику, по типу String.Empty.

Почему String.Empty находится в классе String? Потому что String.Empty связано с этим классом вне зависимости от контекста использования, поэтому в любом контексте, где используется String, должна быть возможность и использовать String.Empty. Поэтому удобно запихать String.Empty прямо в String. Вот по аналогии и я свои дефолтные профили запихал в класс профиля.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271155
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAP.S.: ну и сеттер надо добавить для DefaultProfilesToSerialize. Потому как read only свойства не сериализуются.
Вот, это уже по существу советы.

1. Но, как я понял, и пояснил это тут , если надо потом сделать десериализацию в тот же класс Profile, то у приёмника сериализованного Profile должна быть ссылка на определение класса. А раз так, то DefaultProfiles он получает и так, без специальной сериализации/десериализации этого static readonly свойства. Так?

2. А вот если приёмник получает некий XML (JSON и т. д. по вкусу) и не собирается десериализовать его в объект Profile, то у этого приймника, скорее всего, нет ссылки на класс Profile и, соответственно, он не может получить набор DefaultProfiles в виде static readonly. Поэтому такому приёмнику надо специально сделать свойство в Profile, в котором можно разместить DefaultProfiles при сериализации. Так?

3. Но есть ещё требование, чтобы инстансы класса Profile не создавали каждый раз по копии DefaultProfiles.

Теперь как это всё реализовать? Вот вы сказали, нужно сеттер добавить. А что и куда он будет присваивать, с учётом вот этих моих трёх требований? Если бэкинг филд, то это копия DefaultProfiles на каждый инстанс Profile. Так?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271159
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степину что вы будете делать со своей бедой в многопоточном исполнении, когда один поток работает с вашим листом
а другой поток в десериализаторе чистит лист и хуячит дуда профили с диска?
Ну и возникает вопрос - если кто - то снаружи имеет ссылку на профиль в листе а вы через десериализатор
расхуячили этот лист и запихнули туда левые профили, что делать этому бедному существу снаружи с его ссылкой?
Пишу в комментах к классу - потоконебезопасен.

Но вообще, всё проще - приложение один раз получает настройки и DefaultProfiles чисто для удобства - чтобы можно было выбрать готовые пресеты, а не прожимать кучу кнопок каждый раз. Смысла менять список профилей мало (юзер пока не может добавлять свои профили, а либо использует готовые, либо прожимает настройки каждый раз заново), а уж в многопотоке - вообще нет. Просто дефолтные профили покрывают почти все кейсы юзера и особого смысла менять их нет. Если поменяет, то не в самом списке DefaultProfiles, а только в некотором CurrentProfile, которым может быть один из первоначально выбранных DefaultProfiles. Как-то так.

Я ещё раз говорю, что специально абстрагируюсь от конкретного контекста, а стараюсь задать вопрос про некоторую сериализацию статика в вакууме.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271166
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
ну допустим статик можно обойти через iserializable
ну допустим только чтение можно можно обойти через приватное прокси свойство в гетдатаобджект и конструкторе сериализации
ну предположим можно обмануть рекурсию

ну что вы будете делать со своей бедой в многопоточном исполнении, когда один поток работает с вашим листом
а другой поток в десериализаторе чистит лист и хуячит дуда профили с диска?
Ну и возникает вопрос - если кто - то снаружи имеет ссылку на профиль в листе а вы через десериализатор
расхуячили этот лист и запихнули туда левые профили, что делать этому бедному существу снаружи с его ссылкой?
С каким моим листом? Профили находятся где-то в приложении - например, в классе Настройки. Я показываю юзеру настройки, где выбран текущий профиль и есть набор профилей, который включает набор дефолтных профилей (грубо говоря, сначала идёт набор дефолтных, а нище - текущие юзерск ие или юзерск ий ). DefaultProfiles нужны просто для удобства, чтобы наполнить список профилей некоторыми заранее заданными профилями.

Если кто-то там в потоках "хуячит лист", то он это делает не с DefaultProfiles, а с неким листом в настройках.

Не знаю, как ещё сказать. Пусть будет так: Profile служит просто контейнером для набора DefaultProfiles, поскольку DefaultProfiles связаны с Profile по смыслу. Наподобие того, как я объяснил про String.Empty.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271168
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но для полной красоты надо ещё сделать все профили в DefaultProfiles readonly, чтобы их нельзя было менять в самом списке DefaultProfiles. Как, кстати, это можно сделать?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271169
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerНо для полной красоты надо ещё сделать все профили в DefaultProfiles readonly, чтобы их нельзя было менять в самом списке DefaultProfiles. Как, кстати, это можно сделать?
Наверное, закрыть DefaultProfiles и сделать публичный метод - GetDefaultProfiles, так?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271170
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerMineRunnerНо для полной красоты надо ещё сделать все профили в DefaultProfiles readonly, чтобы их нельзя было менять в самом списке DefaultProfiles. Как, кстати, это можно сделать?
Наверное, закрыть DefaultProfiles и сделать публичный метод - GetDefaultProfiles, так?
Который будет каждый раз возвращать копию DefaultProfiles с копированными же объектами Profile в нём. Так?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271171
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerMineRunnerпропущено...

Наверное, закрыть DefaultProfiles и сделать публичный метод - GetDefaultProfiles, так?
Который будет каждый раз возвращать копию DefaultProfiles с копированными же объектами Profile в нём. Так?
Во! А чтобы не мучаться с копированием дефолтных профилей каждый раз при запросе GetDefaultProfiles, то лучше вообще создавать дефолтные профили прямо в этом методе - тогда он каждый раз будет возвращать профили с одними и теми же свойствами.

Получается, вариант со static readonly DefaultProfiles плохой и лучше перейти на метод GetDefaultProfiles. Так?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271172
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerMineRunnerпропущено...

Который будет каждый раз возвращать копию DefaultProfiles с копированными же объектами Profile в нём. Так?
Во! А чтобы не мучаться с копированием дефолтных профилей каждый раз при запросе GetDefaultProfiles, то лучше вообще создавать дефолтные профили прямо в этом методе - тогда он каждый раз будет возвращать профили с одними и теми же свойствами.

Получается, вариант со static readonly DefaultProfiles плохой и лучше перейти на метод GetDefaultProfiles. Так?
Это называется, кажется, фабрика, да?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271177
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerПро профили я просто так придумал. Тут главное суть - есть некие дефолтные наборы настроек. Я запихал их в константную статику, по типу String.Empty.

Почему String.Empty находится в классе String? Потому что String.Empty связано с этим классом вне зависимости от контекста использования, поэтому в любом контексте, где используется String, должна быть возможность и использовать String.Empty. Поэтому удобно запихать String.Empty прямо в String. Вот по аналогии и я свои дефолтные профили запихал в класс профиля.
На мой взгляд совершенно не удачная аналогия.

String.Empty - это значение типа String. То, которым часто инициализируют строковые переменные, с которым сравнивают... И доступно только для чтения.

И DefaultProfiles совершенно на это не похоже :)

Вот было бы что-то типа этого:
Код: c#
1.
2.
3.
4.
public class Profile
{
    public static readonly Profile Null = new Profile();
}


то я бы понял
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271179
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, говорит, специально не конкретизирую, чтобы на несколько страниц растянуть рассказ о всех нюансах :)
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271182
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
гы что бы не менять содержимое DefaultProfiles вы его сделали readonly забавно )) а наружу выкинули саму не инициализированную коллекцию, а у самой коллекции был вроде метод Add()? и что?
DefaultProfilesToSerialize сама реализация умопомрачительная,лишнее создание листа - аллокация памяти и тд.
Может порыться в учебниках и чонить найти - что не имеет метода Add и его выкидывать наружу, а саму коллекцию закрыть
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271251
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
гы что бы не менять содержимое DefaultProfiles вы его сделали readonly забавно )) а наружу выкинули саму не инициализированную коллекцию, а у самой коллекции был вроде метод Add()? и что?
DefaultProfilesToSerialize сама реализация умопомрачительная,лишнее создание листа - аллокация памяти и тд.
Может порыться в учебниках и чонить найти - что не имеет метода Add и его выкидывать наружу, а саму коллекцию закрыть
Да, вы правы. Ридонли - это только, чтобы нельзя было заменить сам объект коллекции. Ещё надо постараться, чтобы нельзя было изменить состав коллекции, и чтобы сами объекты в коллекции нельзя было изменить (по крайней мере, в самой коллекции, но если взять их копию, то меняй свойства этой копии сколько влезет).

Поэтому я сейчас всё больше склоняюсь к фабрике - наружу только метод GetDefaultProfiles, который каждый раз возвращает копию дефолтных профилей.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271252
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВMineRunnerЯ правильно всё сделал?
Про цели не говориш
Всё же, немного неправильно спрашивать про цели. Надо в следующий раз не Profile назвать класс, а "А" или там "В".

Я спрашивал про абстрактную задачу - как сериализовать статичную коллекцию. А потом, в процессе, я бы уже сам понял, правильно ли я сделал, выбрав статичную коллекцию применительно к своему контексту, или нужно это заменить чем-то другим. Я бы увидел, что морока с сериализацией слишком велика и сам ды догадался применить что-то другое.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271255
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наберитесь терпения, и читайте книги, все придет со временем, пока же у вас каша в голове.
для решения :
1 проблемы наберите в гугле - c# read only collection
2 проблемы - c# singleton (фабрика бл*© гыгы)
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271280
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте тогда уменьшим количество проблем и пока только такой вопрос (без сериализации и прочего):

хочу набор дефолтных профайлов, пользователь не может менять этот набор, как и сами профайлы в наборе, но может получать копию этого набора (которую изменять может уже как угодно). Как это лучше организовать?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271300
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
если пользователь не может изменять свой профиль, то очевидно
1 отдавать ему профиль только для пользователя где поля только для чтения, ну для админа будет свой профиль
но это снежный ком в контексте ваших -Я еще это не знаю как сделать.
2 отдавать ему клон профиля ( реализовать ICloneable) пусть изголяется как хочет, но опять же он будет в неведении
что ж так то, меняю меняю а ничего не меняется.
ну и наружу выпустить IEnumerable через select или yeld.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271318
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
если пользователь не может изменять свой профиль, то очевидно
1 отдавать ему профиль только для пользователя где поля только для чтения, ну для админа будет свой профиль
но это снежный ком в контексте ваших -Я еще это не знаю как сделать.
2 отдавать ему клон профиля ( реализовать ICloneable) пусть изголяется как хочет, но опять же он будет в неведении
что ж так то, меняю меняю а ничего не меняется.
ну и наружу выпустить IEnumerable через select или yeld.
Профиль - это не профиль пользователя. Это просто набор настроек, пресет. В этом смысле профиль. Может, вас это смутило?

Пользователь может поменять любой профиль, включая дефолтный. Но дефолтный он может поменять не в составе DefaultProfiles, а только получив копию профиля из DefaultProfiles. Ну представьте, что если бы вместо String.Empty была какая-нибудь конкретная строка "ааа", и пользователь всегда мог бы получить эту строку, но поменять само значение String.Empty он бы не мог. Иммутабельность строк опустим.

Я предлагаю сделать так, что будет метод GetDefaultProfiles, которые внутри себя каждый раз создаёт дефолтные профили и возвращает их. Т. е. сами дефолтные профили нигде не хранятся, а каждый раз создаются заново при запросе метода GetDefaultProfiles. Типа такого:

Код: c#
1.
2.
3.
4.
5.
6.
7.
        public IEnumerable<Profile> GetDefaultProfiles()
        {
            List<Profile> profiles = new List<Profile>(2);
            profiles.Add(new Profile() { /*initializing*/ });
            profiles.Add(new Profile() { /*initializing*/ });
            return profiles;
        }



Чем не фабрика?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271321
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner, ну если подгоните под определение фабрики, то будет фабрика.

А чем это не реестр (Registry), или репозиторий (Repository), или шлюз (Gateway)? :)
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271323
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMineRunner, ну если подгоните под определение фабрики, то будет фабрика.

А чем это не реестр (Registry), или репозиторий (Repository), или шлюз (Gateway)? :)
Я их не знаю, эти ваши шаблоны. По крайней мере, тонко их не отличаю. Мне показалось, что раз создаёт каждый раз новые объекты - то фабрика. Пусть даже это всегда одинаковые объекты.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271325
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMineRunner, ну если подгоните под определение фабрики, то будет фабрика.

А чем это не реестр (Registry), или репозиторий (Repository), или шлюз (Gateway)? :)
А бывают недорепозиторные реестры с оттенком шлюзовой фабрики? Недоподшаблонный перепаттерн? Надо же всё тонко знать и различать шаблон №17 пункт б) от шаблона №24 пункт а) подпункта 2.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271327
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMineRunner, ну если подгоните под определение фабрики, то будет фабрика.

А чем это не реестр (Registry), или репозиторий (Repository), или шлюз (Gateway)? :)
Ладно, а если уменьшить число сущностей и вообще абстрагироваться от того, как назвать то, как я написал GetDefaultProfiles - как вам сама реализация задачи

"хочу набор дефолтных профайлов, пользователь не может менять этот набор, как и сами профайлы в наборе, но может получать копию этого набора (которую изменять может уже как угодно)"?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271351
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerskyANAMineRunner, ну если подгоните под определение фабрики, то будет фабрика.

А чем это не реестр (Registry), или репозиторий (Repository), или шлюз (Gateway)? :)
Я их не знаю, эти ваши шаблоны.
Подозреваю, что и с фабрикой Вам не хватило терпения разобраться :)
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271352
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunnerskyANAMineRunner, ну если подгоните под определение фабрики, то будет фабрика.

А чем это не реестр (Registry), или репозиторий (Repository), или шлюз (Gateway)? :)
Ладно, а если уменьшить число сущностей и вообще абстрагироваться от того, как назвать то, как я написал GetDefaultProfiles - как вам сама реализация задачи

"хочу набор дефолтных профайлов, пользователь не может менять этот набор, как и сами профайлы в наборе, но может получать копию этого набора (которую изменять может уже как угодно)"?
Внимание вопрос: если один и тот же пользователь три раза дёрнул этот Ваш метод в течение одной минуты и в памяти образовалось три копии "набора дефолтных профайлов", то это нормально?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271361
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
нормально- нормально главное что быничо не поменял ))
тут ведь ешо есть такая мулька, если админ вдруг в этот момент его обзовет "тупым фабричным идиотом" в нативном профиле он никогда об этом не узнает не дернув эту требуху по новой - это сколково ничо не попишешь (((
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271392
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
нельзя же все упрощать до абстракции примитивной фабрики, свет клином не сошелся на ней.
вот вполне юзабельный код, он примитивный но вполне логичный.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
 class Program
    {
        static void Main(string[] args)
        {
            for (int i = 101 - 1; i >= 0; i--)
            {
                Single.AddUser(i);
            }
            foreach (var user in Single.GETEnumerable())
            {
                Console.WriteLine(user.Id);
            }
            Single.User d = Single.GETEnumerable().First(a => a.Id == 0);
            Console.WriteLine("before-"+d.Id);
            Single.ReplaceId(0,200);
            Console.WriteLine("after-" + d.Id);

            while (true)
            {
                
            }
        }
    }

    class Single
    {
        private static readonly List<Admin> Admins = new List<Admin> ();
        public static IEnumerable<User> GETEnumerable()
        {
            return Admins;
        }

        public static void AddUser(int id)
        {
            Admins.Add(new Admin {Id = id});
        }

        public static void ReplaceId(int old, int @new)
        {
            Admins.First(s => s.Id == old).Id = @new;
        }
        internal class Decorator
        {
            protected int _id;
        }

        internal class User : Decorator
        {
            public int Id => _id;
        }
        private class Admin : User
        {
            public new int Id
            {
                get { return _id; }
                set { _id = value; }
            }
        }
    }


...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271401
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMineRunnerпропущено...

Ладно, а если уменьшить число сущностей и вообще абстрагироваться от того, как назвать то, как я написал GetDefaultProfiles - как вам сама реализация задачи

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

А как я могу ему это запретить? И зачем? Если пользователь захочет создать три копии "набора дефолтных профайлов", то он сможет это сделать в любом случае, имея доступ к этим профайлам - хоть просто возьмёт и три раза скопирует один и тот же набор. Зато в моём случае я предоставляю ему удобный способ это сделать, без копирования.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271403
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиskyANA,
нормально- нормально главное что быничо не поменял ))
тут ведь ешо есть такая мулька, если админ вдруг в этот момент его обзовет "тупым фабричным идиотом" в нативном профиле он никогда об этом не узнает не дернув эту требуху по новой - это сколково ничо не попишешь (((
Это не критично в моём случае. Ну и точно не критично на текущий момент. Ну будет ошибка несогласованности профайлов в момент работы. Ну и что? У меня работа с текущим набором профайлов подразумевает сессионной - по одной-две минуты. Ну перезапустит расчёт.

В реальном времени оповещать клиентов об изменении каких-то настроек - это для какого-то нон-стоп работающего сервиса актуально, а у меня короткие сессии. Если 0,01% пользователей раз в неделю получат одно сообщение "Что-то пошло не так, попробуйте снова", то это не страшно.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271406
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
нельзя же все упрощать до абстракции примитивной фабрики, свет клином не сошелся на ней.
вот вполне юзабельный код, он примитивный но вполне логичный.
Для непрерывно работающей программы замена такого списка может повлиять на работу, да, поэтому надо защититься. А у меня так:

1) юзер получает с сервера набор настроек;
2) юзер выбирает из набора пресет (профиль) и, если хочет, изменяет отдельные настройки в пресете, или полностью свои настройки (создаёт свой пресет);
3) юзер пользуется сервисом 1-2 минуты со сделанными настройками.

Вот типичный сценарий работы. Каждый раз получает набор пресетов и настроек из сервера.

Защиту от изменения настроек во время сессии пока такую придумал: при изменении настроек сервер перезагружается, следовательно, данные о всех активных сессиях удаляются. Т. е. юзер получает отказ в работе и предложение попробовать ещё раз или подождать и попробовать позже.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271407
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
авторЭто не критично в моём случае. Ну и точно не критично на текущий момент. Ну будет ошибка несогласованности профайлов в момент работы. Ну и что
узнаю "русскую" школу программистов.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271408
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот по моему сценарию есть смысл отдавать каждый раз копию настроек. Не обязательно хардкодить их в коде, можно из файла брать. Файл изменился - сервис перезагрузился с новым набором дефолтных настроек.

Пока так. Потом подумаю ещё, по мере возникновения проблем.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271410
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
авторЭто не критично в моём случае. Ну и точно не критично на текущий момент. Ну будет ошибка несогласованности профайлов в момент работы. Ну и что
узнаю "русскую" школу программистов.
Они все в Гугле работают .


http://www.chromega.ru/errors/opanki Как устранить?
Если это разовый случай, то переживать особо не стоит. Такой баг легко устраняется: просто обновите страничку (клавиша F5). Это самый распространенный способ решения проблемы "Опаньки" .

Средняя зарплата в Гугле у программистов - что-то около 120 килобаксов в год. Думаю, у вас меньше.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271417
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.chromega.ru/errors/opanki просто обновите страничку (клавиша F5). Это самый распространенный способ решения проблемы
тогда вам прямая дорога в любой российский банк фронтенд писать.
можно на сайт госуслуг или ещё какую богадельню трудоустроиться
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271425
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил http://www.chromega.ru/errors/opanki просто обновите страничку (клавиша F5). Это самый распространенный способ решения проблемы
тогда вам прямая дорога в любой российский банк фронтенд писать.
можно на сайт госуслуг или ещё какую богадельню трудоустроиться
Мне бы сразу в Гугл.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271427
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если что, на данный момент актуален этот пост .

Для такой ситуации нормально же каждый раз возвращать новую копию дефолтных профилей?
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271439
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner,
авторСредняя зарплата в Гугле у программистов - что-то около 120 килобаксов в год. Думаю, у вас меньше.
типичный совковый менталитет первое про зарплату остальное потом, а то что зарплата - эквивалент труда пох=й и так сойдет
да и русскими их только по номиналу можно назвать, немногие отважились вернуться назад так сказать к истокам.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271441
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиMineRunner,
авторСредняя зарплата в Гугле у программистов - что-то около 120 килобаксов в год. Думаю, у вас меньше.
типичный совковый менталитет первое про зарплату остальное потом, а то что зарплата - эквивалент труда пох=й и так сойдет
да и русскими их только по номиналу можно назвать, немногие отважились вернуться назад так сказать к истокам.
Да у вас же бомбит, что кто-то за "Опаньки" получает больше, чем вы за полгода своих хитроумных синглетонов-фабрик-недорепозиторных реестров. Может, не в сигнлетонах дело? Главное же, что работает и хомячки хавают ("гугель хром уже становлен более, чем на 50% машин и обогнал ИЕ - ВАУ крута!").



Похоже, опять придётся новый аккаунт заводить...
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271461
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MineRunner, что-то со временем ума у тебя не прибавляется.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271464
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAMineRunner, что-то со временем ума у тебя не прибавляется.
Это всё алкоголь, будь он неладен.
...
Рейтинг: 0 / 0
Как лучше всего сериализовать статическую коллекцию?
    #39271465
MineRunner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где МСУ? Он больше не троллит тут? Завязал?
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как лучше всего сериализовать статическую коллекцию?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]