Форум программистов, компьютерный форум, киберфорум
.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
210 / 114 / 17
Регистрация: 01.06.2018
Сообщений: 1,749
1

Принципы правильной разработки ПО

11.05.2020, 06:18. Показов 546. Ответов 8
Метки нет (Все метки)

Всем привет, так как я по своей сути с программированием закончил работать в 2001 году и тогда писал на Delphi, то, как сами понимаете, на 20 лет отстал от всех и вся. Собственно сейчас для себя хочу написать довольно масштабную программу и C# меня полностью устраивает, но у меня сильная просадка по основам проектирования. Например в Делфи я писал всё в коде на OnClick, OnPaint, OnXXXXX и т.д. Задача была всегда линейная, пока код выполнялся - программа "зависала". Редко использовал Threads. Сегодня, как мне кажется, было бы разумно писать так, чтобы решение соответствовало 2020 году, то есть в ПО могут быть задачи выполняемые в фоне, которые не прерывают работу основной программы, но и могут с ней взаимодействовать. Например там будет код для работы с удаленным сервером и он должен работать сам, не отвлекая на себя время исполнения. И от вас прошу - указать мне путь, я озвучу как я это вижу, а вы поправите:
1) Вся программа состоит из нескольких классов (никогда так не делал), в случае расширения функционала существующих - добавляются новые методы, при появлении нового - новые классы.
2) Каким-то образом выполнение кода разделять на разные потоки - таймер? какие-то конструкции самого C#?

Работа программы будет выглядеть так:
- при запуске считывается папка с плагинами (dll), запускаются те, что работают при старте, планируются те, что работают по расписанию
- выполнение каждого плагина идёт в независимом потоке, до закрытия программы (по сути непреврывно) / остановки (пауза) / окончания работы
- есть форма для настройки ПО, управления плагинами, отображения информации

Отвечу на вопросы, возможно выше написал сумбурно. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2020, 06:18
Ответы с готовыми решениями:

Каковы принципы разработки сетевых игр
Привет всем) мне очень нужна ваша помощь, программисты) я должна создать игру(крестики-нолики,...

Где скачать книгу "Принципы, паттерны и методики гибкой разработки на языке C#", автор Мартин
Помогите пожалуйста!! Позарез нужна эта книжка но не могу найти где скачать:cry: Добавлено через...

"Принципы, паттерны и методики гибкой разработки на языке C#": где взять коды примеров из книги
здравствуйте! Я приобрел книгу "Принципы, паттерны и методики гибкой разработки на языке C#", а...

Принципы разработки ПО в команде
Здравствуйте! Не знала куда написать, если не туда - переместите, пожалуйста. Я программист, но...

__________________
8
Эксперт .NET
8860 / 6177 / 1028
Регистрация: 21.01.2016
Сообщений: 23,321
11.05.2020, 06:41 2
Цитата Сообщение от belalugoci Посмотреть сообщение
Каким-то образом выполнение кода разделять на разные потоки - таймер? какие-то конструкции самого C#?
Task

Цитата Сообщение от belalugoci Посмотреть сообщение
Вся программа состоит из нескольких классов (никогда так не делал), в случае расширения функционала существующих - добавляются новые методы, при появлении нового - новые классы.
Ага. Только не забывайте про интерфейсы и внедрение зависимостей.

Цитата Сообщение от belalugoci Посмотреть сообщение
при запуске считывается папка с плагинами (dll), запускаются те, что работают при старте, планируются те, что работают по расписанию
MEF & MAF

Цитата Сообщение от belalugoci Посмотреть сообщение
я писал всё в коде на OnClick, OnPaint, OnXXXXX и т.д.
В .NET вы тоже так можете делать, хоть это и есть говнокод.

Цитата Сообщение от belalugoci Посмотреть сообщение
пока код выполнялся - программа "зависала".
В .NET это лечится не только отдельными потоками, но и через async\await
2
210 / 114 / 17
Регистрация: 01.06.2018
Сообщений: 1,749
11.05.2020, 07:03  [ТС] 3
Цитата Сообщение от Usaga Посмотреть сообщение
В .NET вы тоже так можете делать, хоть это и есть говнокод.
в курсе, на эту тему мы уже общались, но в данном случае я хотел бы это избежать.

пока то что прочитал из указанного вами слишком сложно для понимания. Спасибо за информацию.

Еще вопрос, народ тут ссылался на ассерты, пользоваться ли? будет ли это моветон или мастхэв?
0
Эксперт .NET
8860 / 6177 / 1028
Регистрация: 21.01.2016
Сообщений: 23,321
11.05.2020, 07:08 4
belalugoci, ассерты... Ассерты сейчас уже не так широко применяются. Я бы рекомендовал использовать юнит-тесты. Они и код не засирают кучами Debug.Assert и работают на упреждение, чего ассерты сделать не могут.
1
210 / 114 / 17
Регистрация: 01.06.2018
Сообщений: 1,749
11.05.2020, 07:27  [ТС] 5
Цитата Сообщение от Usaga Посмотреть сообщение
Я бы рекомендовал использовать юнит-тесты
мне кажется для меня это будет равносильным выстрелу в ногу.

Цитата Сообщение от Usaga Посмотреть сообщение
Они и код не засирают кучами Debug.Assert и работают на упреждение, чего ассерты сделать не могут
Я логику ассертов понял так, что вместо дебаггера они дают мне информацию по ошибкам в программе. Для меня это как минимум - быстрый отлов неправильной работы и места, где это происходит, а большего наверное и не требуется. А в чем упреждение?
И не совсем понимаю как можно протестировать что-то передавая фейковые данные?
0
Эксперт .NET
8860 / 6177 / 1028
Регистрация: 21.01.2016
Сообщений: 23,321
11.05.2020, 08:13 6
Цитата Сообщение от belalugoci Посмотреть сообщение
мне кажется для меня это будет равносильным выстрелу в ногу.
Ну, если вы это ружьё первый раз в руки берёте, то да.

Цитата Сообщение от belalugoci Посмотреть сообщение
Я логику ассертов понял так, что вместо дебаггера они дают мне информацию по ошибкам в программе.
Они не вместо дебаггера. Просто точки в программе, где вы проверяете состояние программы на корректность. Вроде бы звучит классно. Но по факту, такие проверки просты, что-то более сложное уже проверить затруднительно. И проверок таких по коду придётся раскидать много. Что сильно засорит код.

Цитата Сообщение от belalugoci Посмотреть сообщение
А в чем упреждение?
В том, что тесты прогоняются сразу все, по всем описанным вами сценариям. Причём тесты можно начать писать раньше самого тестируемого функционала (пресловутый TDD). Ошибки в коде можно находить ещё до того, как код доведён до того состояния, когда его можно запустить и руками "протыкать". А ассерты же проверяются только во время выполнения и только, если поток исполнения вообще до него доберётся. Иными словами, если вы ассерт воткнули куда-нибудь в OnClick и забыли эту кнопку нажать, то проверка не выполнится и потенциальная ошибка в коде останется незамеченной. Т.е. ассерт вроде бы есть, но толку от него как с козла молока.

Второй момент связанный с тестами: вы можете выполнять весьма сложные проверки. А так же такие, какие руками не воспроизвести. К примеру проверку того, что код корректно принимает данные фрагментированные протоколом TCP. И такие проверки в самом тестируемом коде никак отсвечивать не будут. Код не будет засоряться.

Цитата Сообщение от belalugoci Посмотреть сообщение
не совсем понимаю как можно протестировать что-то передавая фейковые данные?
Очень просто: для тестируемого кода данные не фейковые.
1
210 / 114 / 17
Регистрация: 01.06.2018
Сообщений: 1,749
11.05.2020, 10:15  [ТС] 7
Цитата Сообщение от Usaga Посмотреть сообщение
Причём тесты можно начать писать раньше самого тестируемого функционала
мне кажется это имеет смысл делать только в том случае, когда вся программа (условно) написана на бумаге в виде ТЗ и реализация в коде лишь формальность. Для меня это не подходит, так как нет ТЗ и не будет а писаться будет по факту, долго и медленно. Тестирование сильно увеличит время написания, я один.

Цитата Сообщение от Usaga Посмотреть сообщение
К примеру проверку того, что код корректно принимает данные фрагментированные протоколом TCP
примерно суть понял, но мне кажется это, в моем случае, перевозка мешка картошки в кузове камаза.

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

Я не думаю что стоит обсуждать эту тему, я вас услышал, уверен что ваши советы уместны, но мне так же нужно делать ставку на мою некомпетентность во многих вопросах и отсутствии желания постигать науку в полном объёме. Спасибо за ответы, весьма полезно.
0
Эксперт .NET
8860 / 6177 / 1028
Регистрация: 21.01.2016
Сообщений: 23,321
11.05.2020, 10:49 8
Цитата Сообщение от belalugoci Посмотреть сообщение
мне кажется это имеет смысл делать только в том случае, когда вся программа (условно) написана на бумаге в виде ТЗ и реализация в коде лишь формальность.
На самом деле нет. И это не только к тестам относится, но и к обычной разработке. Вы можете сосредоточиться на разработке какого-то определённого куска кода, а всё, с чем он взаимодейтсвует временно заменять заглушками с правильными интерфейсами. С тестами можно похожим образом поступать: вы определяетесь с интерфейсом какого-то класса, придумываете ему поведение, покрываете это тестами, которые это поведение проверяют (конечно же, ничего не работает), потом работаете над реализацией. Я не хочу сказать, что так надо железно всегда работать и всегда же это возможно. Но сам подход хороший.

Цитата Сообщение от belalugoci Посмотреть сообщение
Тестирование сильно увеличит время написания
Да, это так. Но в зависимости от типа проекта время затраченное на разработку тестов может компенсироваться временем на тестирование проекта. Какие-то алгоритмы легко тестировать, какие-то нет. Какие-то вещи тестировать смысла не имеет, какие-то без тестов вообще немыслимы. Однозначного ответа тут нет.

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

Цитата Сообщение от belalugoci Посмотреть сообщение
я о том, что код, написанный под тесты будет хорошо работать с тестами, но не с реальными данными. Особенно не ясно, как написать тест для данных, которые появятся только в ходе работы самой программы.
Вообще-то, код не под тесты пишется, а под решение какой-то задачи. Но реализация этого решения, которая разработана с учётом того, чтобы её можно было протестировать программно - есть гуд. Про данные, которые появятся в ходе работы программы я не понял, что вы имеете в виду и какие сложности вы видите.

Цитата Сообщение от belalugoci Посмотреть сообщение
Я не думаю что стоит обсуждать эту тему, я вас услышал, уверен что ваши советы уместны, но мне так же нужно делать ставку на мою некомпетентность во многих вопросах и отсутствии желания постигать науку в полном объёме. Спасибо за ответы, весьма полезно.
Если нет компетенции, то рекомендую пока не рассматривать ни тесты, ни ассерты. Ассертами вы легко можете загадить свой код и при этом испытывать какие-то необоснованные уверенности в том, что они вам гарантируют качество вашего кода. Пишите код как можете. Почаще пользуйтесь отладчиком. Смотрите на варнинги (warnings), которые выдаёт вам компилятор. Примите за норму постоянное чтение документации по .NET.
1
210 / 114 / 17
Регистрация: 01.06.2018
Сообщений: 1,749
11.05.2020, 14:47  [ТС] 9
Цитата Сообщение от Usaga Посмотреть сообщение
Пишите код как можете
поставил себе в подпись )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2020, 14:47

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

Принципы разработки интерфейса приложения
Здравствуйте, хочу создать приложение с большим количеством окон, и чтобы ориентировано было на...

Хорошая книга “Экспертные системы: принципы разработки и программирование”
“Экспертные системы: принципы разработки и программирование” 4-е издание Джозеф Джарратано, Гари...

Раскрыть принципы разработки алгоритмов и программ для решения прикладных задач: операциональный и структурный
Раскрыть принципы разработки алгоритмов и программ для решения прикладных задач: операциональный и...

Построить изображение правильной правильной треугольной призмы, описанной около шара
Доброго дня! Помогите, пожалуйста, с задачей из раздела "пространственных фигур в параллельной...

Принципы ООП
Здравствуйте, написал по заданию в универе программу которая реализует комплексное число в виде...

Принципы оптимизации
Коллеги, доброго времени суток, возникла следующая проблема. Занимаюсь программированием на php...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.