Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778

Singletone для Class library

29.10.2019, 16:42. Показов 4858. Ответов 98
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
приветствую всех,

Каждый раз в каждом class где я работаю с class library я создаю объект.
Говорят это не есть хорошо.

Например:
C#
1
2
3
4
5
6
7
8
9
10
Public class Wehicle
{
   public Wehicle()
 
             {
                    WehicleFrame = new Frame();
             }
 
              //далее пользуюсь различными методами класса Frame
}
таким же образом пользуюсь в другом классе

C#
1
2
3
4
5
6
7
8
9
10
Public class Ship
{
   public Ship()
 
             {
                    ShipFrame = new Frame();
             }
 
              //далее пользуюсь различными методами класса Frame
}
говорят это плохо, нужно сделать singleton.

Вопрос, как сделать singleton из класса Frame?

спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2019, 16:42
Ответы с готовыми решениями:

Intellisense и autocompletion в библиотеках класса (Class Library)
Глупый вопрос. Поэтому задаю здесь, хотя не совсем уж и начинающий. Создал проект из шаблона Class Library (что бы сборочку dll получить)...

Работа с DirectX: Output Type of Class Library
Доброго времени суток. Я новичок в DirectX и C#. Скачал SharpDX с примерами. Эти примеры не запускаются. Выдаёт следующее сообщение: A...

Как узнать путь к ресурсу сборки Class Library?
Здравствуйте, я разрабатываю addin для Excel. В проект addin`а я добавил ресурс: шаблон Excel. Хочу открыть его средствами...

98
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 08:56
Студворк — интернет-сервис помощи студентам
кружок-ДДТ, инструкции разработчика, которые предписывают делать чушь?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
17.02.2020, 08:58
Цитата Сообщение от Usaga Посмотреть сообщение
вы так и не озвучили какая-такая сила вас заставляет открывать ОДНО подключение к базе и держать его до закрытия приложения. Попытка сэкономить на ничём?
Из прояснений (в личке) Bulky, это сервер на предприятии.
Что за сервер он не знает.
Соединение идёт по сети с VPN.
Ему просто дали Api и правила его использования.
Одно из правил соединение должно быть одно на сеанс работы приложения.

Наверное, это не соединение с Базой, а соединение VPN.
А внутри него Api уже формирует одноразовые соединения с самой Базой.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 09:01
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Одно из правил соединение должно быть одно на сеанс работы приложения.
Ну, так это не противоречит тому, что я ему советую.

Не по теме:

Очень интересно, что когда я его попросил объяснить зачем ему то, что он просит, он психанул, но вам в личку всё рассказал. Странный подход к решению проблем.

0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.02.2020, 09:04
Да у нас кажись такая же тема. Что-то до боли знакомое. Приезжий кодер тоже возмущался пока ему дважды не ткнули носом. Сдедовать инструкциям и глупых вопросов не задавать.
Все правильно делает. Я бы помог, но заглянуть не могу. Доступа нет.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 09:16
кружок-ДДТ, не более одного подключения одновременно и держать одно подключение постоянно - разные вещи, не находите? Ни то, ни другое не противоречит тому, что просили, но второе - хреновая практика с нулевым профитом, что для клиента, что для сервера.

Добавлено через 4 минуты
Подключение, при закрытии, отправляется в пул, а не разрывается физически, т.е. связь с СУБД остаётся. Когда клиенту понадобится снова подключиться, ADO.NET вернёт именно это подключение. Второй момент: ADO.NET открывает сразу несколько подключений (для пущей производительности параллельных запросов). Если ЭТО СУБД пережёвывает, то значит требование иметь только одно подлключение - бред, ибо уже нарушается самой ADO.NET и остаётся незамеченным.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
17.02.2020, 09:23

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
Очень интересно, что когда я его попросил объяснить зачем ему то, что он просит, он психанул, но вам в личку всё рассказал. Странный подход к решению проблем.
Это было не сразу и не быстро....



Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Когда клиенту понадобится снова подключиться, ADO.NET вернёт именно это подключение.
Там, как я понял по косвенным признаком, раритетные сервер и сеть.
Создавались когда ещё и ADO не было, наверное.
Работают с SQL запросами напрямую, вроде.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 09:31
Элд Хасп, все известные мне реляционные СУБД связываются с .NET через ADO.NET. Ок, даже если там свой какой-то кастомный интерфейс, не основанный на ADO.NET, то какие проблемы свой пул сделать, а не шарить одно постоянно удерживаемое подключение?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16152 / 11273 / 2890
Регистрация: 21.04.2018
Сообщений: 33,147
Записей в блоге: 2
17.02.2020, 09:45
Цитата Сообщение от Usaga Посмотреть сообщение
все известные мне реляционные СУБД связываются с .NET через ADO.NET. Ок, даже если там свой какой-то кастомный интерфейс, не основанный на ADO.NET, то какие проблемы свой пул сделать, а не шарить одно постоянно удерживаемое подключение?
Ограничение заказчика.
Дали Api и юзай его.
Шаг влево, шаг вправо - расстрел.

И подключение это, скорее всего, не подключение к БД, а создание сеанса VPN.
Сеанс создаётся один на всё время работы приложения.
Больших подробностей не знаю.
И ТС тоже не знает. Эму просто дали задание и условия его выполнения.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 09:46
Ой, всё)
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
17.02.2020, 17:59  [ТС]
Элд Хасп,

Цель всего этого: хотя бы как-то структурировать приложение при этом соблюдая правило одного openDB() и CloseDB() на один сеанс работы App. Иначе валится каша. Хотя нас предупреждали.
Юзается интенсивно больше года, свалено все в один класс, в декабре кое-что нужно было добавить из-за свалки убил день на чепуху.
Показано с мин. кода и мин количеством VM. Чисто для понимания.

Cоздан public class MainConnection где в нем:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 public class MainConnection
    {
        public ADC adc;       
        public MainConnection()
 
        {         
          
               adc = new ADC(DBType.DataBase_xxx, "Auxiliary_DB", 3, 1);
 
                adc.OpenDB(); 
 
        }
 
         public ~MainConnection()
 
        {  
 
               adc.CloseDB();
 
        }


В VMxxx следующее,


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
using ADC;
public class ViewModelxxx
 
{
 
    MainConnection _mainconnection;
    
    public ViewModelxxx()
    {
        _mainconnection = new MainConnection();
 
 
    }
 
        private void PullOut1()
 
        {
 
               _mainconnection.adc.PullOut();
 
 
        }
 
}

В VMyyy следующее,

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
using ADC;
public class ViewModelxxx
 
{
 
    MainConnection _mainconneсtion;
    
   public ViewModelxxx()
    {
        _mainconnection = new MainConnection();
 
 
    }
 
        private void Insert1()
 
        {
 
               _mainconnection.adc.Insert();
 
 
        }
 
}

Сегодня затестил на болванке, вроде бы норм.
Вопрос, если заметили поля класса MainConnection в разных VM одинаковые. По фэншую должны быть разными или сделать private?

Или?
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 18:05
Цитата Сообщение от Bulky Посмотреть сообщение
public ~MainConnection()
{  
adc.CloseDB();
}
Вы же понимаете, что финализатор отработает фиг знает когда, соответственно, второе подключение в другой VM может открыться при живом старом.
0
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
17.02.2020, 18:11  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
второе подключение в другой VM может открыться при живом старом.
a) другая... 27-я VM на этой же Аpp. Закрылась App -закрылось соединение с DB.
б) есть вариант с кнопками Соединиться/Разъединиться. App не закроется пока не выполнят разъединение.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 18:23
Цитата Сообщение от Bulky Посмотреть сообщение
a) другая... 27-я VM на этой же Аpp. Закрылась App -закрылось соединение с D
При потери ссылки на VM она не убирается сборщиком сразу. Это значит, что закрыв одно окно и перейдя к другому (с другой VM) вы рискуете нарваться на открытие нового подключения, ведь старое вы закрываете в финализаторе, который вызовется неизвестно когда.

Цитата Сообщение от Bulky Посмотреть сообщение
б) есть вариант с кнопками Соединиться/Разъединиться. App не закроется пока не выполнят разъединение.
Ну, это ни в какие ворота) Вообще)

База данных-то какая используется?
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.02.2020, 18:38
Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
При потери ссылки на VM она не убирается сборщиком сразу. Это значит, что закрыв одно окно и перейдя к другому (с другой VM) вы рискуете нарваться на открытие нового подключения, ведь старое вы закрываете в финализаторе, который вызовется неизвестно когда.
В VM только методы обращения с базой.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 18:44
кружок-ДДТ, судя по примеру выше, в VM'ках и идёт создание MainConnection с сохранением в приватном поле.
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.02.2020, 18:52
Цитата Сообщение от Usaga Посмотреть сообщение
кружок-ДДТ, судя по примеру выше, в VM'ках и идёт создание MainConnection с сохранением в приватном поле.
явно там в VM только использование методов типа получить и вставить. Экземпляр с какими-то параметрами создается раз и соединение создается раз в MainConnection.
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
17.02.2020, 18:56
кружок-ДДТ, да, только VM'ок у ТС-а больше одной, судя по ХХХ в названии. И в каждой нужен MainConnection. Оттуда и вопрос у ТС-а, как расшарить это дело. И если в каждой VM будет создаваться свой экземпляр этого класса, который закрывает подключение в финализаторе, то будет совсем не то, что ТС представляет.
0
10 / 10 / 1
Регистрация: 10.09.2019
Сообщений: 232
17.02.2020, 19:16
Цитата Сообщение от Usaga Посмотреть сообщение
И если в каждой VM будет создаваться свой экземпляр этого класса, который закрывает подключение в финализаторе, то будет совсем не то, что ТС представляет.
Чем это грозит я такую глубину не вижу. Так может ему все-таки singletone нужен?
0
Эксперт .NET
 Аватар для Usaga
14345 / 9448 / 1360
Регистрация: 21.01.2016
Сообщений: 35,622
18.02.2020, 07:39
кружок-ДДТ, это грозит тем, что новое подключение откроется при всё ещё не закрытом старом. Что прямо нарушает требование иметь одновременно ровно одно подключение.

Цитата Сообщение от кружок-ДДТ Посмотреть сообщение
Так может ему все-таки singletone нужен?
Или синглтон (я ему пример уже привёл как это сделать, его проблемы, что он вообще никакой и даже это воспроизвести не может) или открывать подключение только на время запроса к базе и тут же его закрывать. Тогда можно иметь произвольное количество объектов класса MainConnection и при этом не нарушать требование.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2020, 07:39
Помогаю со студенческими работами здесь

Как искусственно вызвать exception в Class Library (пока пустой)
Привет! Нужно протестировать обработку Exception в project Class Library. Проект пока пустой. Как в нем исcкуственно вызвать Exception? ...

Вопрос из теста: A project with an Output Type of Class Library cannot be started directly
Вы проверяете код, написанный вашим коллегой. При компиляции Windows-приложения появляется следующее сообщение: A project with an Output...

Есть Class library (с работающим кодом) как найти то, что запускает этот код?
Привет! Есть Class library ( с работающим кодом) как найти то, что запускает этот код? public classB { int i = 30;

Можно ли в class library "запихать" интерфейс?
вопрос в шапке. ну в плане "не рекомендуется" и т.п

Нужно составить регулярное выражение для поиска <div class="market_row_name"> и <div class="market_row_price">
Заранее спасибо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
99
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru