|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
||||||
Реорганизовать код: вызовы методов в зависимости от условий16.07.2015, 15:45. Показов 3447. Ответов 25
Метки нет (Все метки)
Здравствуйте
Опыт в программировании небольшой, код получается достаточно раздутый, написал конструкцию достаточно простую, но кажется что её можно оформить более лаконично подскажите пожалуйста как это сделать:
0
|
||||||
| 16.07.2015, 15:45 | |
|
Ответы с готовыми решениями:
25
Вызовы методов из разных потоков Управляемый цикл через вызовы методов класса Программа работает, но не получается реорганизовать код |
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
||||||
| 16.07.2015, 15:55 | ||||||
Сообщение было отмечено alspav как решение
Решение
1
|
||||||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
|
| 16.07.2015, 15:57 [ТС] | |
|
спасибо, совсем забыл про этот оператор.
0
|
|
|
Master of Orion
|
||||||
| 16.07.2015, 15:58 | ||||||
0
|
||||||
|
20 / 20 / 6
Регистрация: 04.07.2012
Сообщений: 73
|
|
| 16.07.2015, 15:59 | |
|
Ну во-первых надо глянуть в сторону оператора switch, а во-вторых покажите методы PW(), PST(), TW() и т.д.
Добавлено через 53 секунды Опоздал)
0
|
|
|
Master of Orion
|
|
| 16.07.2015, 16:00 | |
|
m0nax, не успел, пока удалял всё это дело...
![]() alspav, вам над кодом поработать бы еще, куча глобальных переменных, ref-параметры, всё в перемешку... Короче, если не лаба "сдать-забыть", то головная боль обеспечена в будущем.
0
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
|
| 16.07.2015, 16:41 [ТС] | |
|
нет не лаба, но програмирую для себя, точнее для перевода рутинных расчетов по работе (тепломеханика, гидравлика) в небольшую программу, скажем так собираю расчеты из справочников и расчеты по термодинамике пара и воды что бы в таблицы не лазить, ну и соответственно на основании термодинамики можно и гидравлику прикинуть и тепломассообмен. (я теплотехник и электрик по образованию и это можно сказать первый опыт написать что то полезное). массив использую для передачи значений из класса который в зависимости от входных параметров делает расчет 12 физических виличин. Там просто много условий по входным параметрам и вызываемые методы как раз проверяют на достоверность(зону определения) и если все хорошо делают расчет записывая в массив, потом этот массив переписывается в вызывающую функцию если нет ошибки. Если передачу выходных параметров можно организовать как то по другому (при разных комбинациях вызова разные входные параметры, но выходной массив всегда однотипен с четко определенными местами для физ. значений) было бы интересно узнать.
Добавлено через 21 минуту входные значения в метод так же передаются в этом массиве, а какие именно обрабатывать зависит от значения строкойой переменной. лучшего я не придумал. потом все эти расчеты при необходимости записываются в CSV файл прямо из этого массива. Поэтому если есть более простые/правильные/безопасные способы передачи подобных данных подскажите пожалуйста.
0
|
|
|
Master of Orion
|
||||||
| 16.07.2015, 17:02 | ||||||
|
alspav, тут нужен взгляд в целом, на ситуацию. Просто есть некоторые симптомы, по которым можно сказать, что код не очень хорош. Например, если человек пришел на работу зеленый, а из носа у него постоянно идет кровь, вы наверняка догадаетесь, что с ним что-то не в порядке
Но для того, чтобы вылечить это, нужно иметь ситуацию в целом - сдать анализы, обработать их, сделать выводы и исправить... На глазок этого не сделать, хотя определить сам факт "что-то не так" можно.В вашем случае симптом - это сигнатура метода и первые его несколько строк:
0
|
||||||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
|
| 16.07.2015, 18:07 [ТС] | |
|
Ну проект достаточно большой в коде, если есть желание могу скинуть на почту вам глянуть скажите куда прислать
Добавлено через 1 час 2 минуты Хорошо, а если в место ref использовать только out, а значения получать в именованных ( и если так можно именованных и необязательных, так как входные параметры варьируются от 1 до 3) и уже дальше обрабатывать. Так будет правильнее?
0
|
|
|
Master of Orion
|
|||||||||||
| 16.07.2015, 19:26 | |||||||||||
Сообщение было отмечено alspav как решение
Решение
alspav, есть хороший принцип - единой ответственности. То есть метод должен делать что-то одно. У вас тут
1) перезапись глобальных переменных 2) перезапись входных параметров глобальными (это вообще ужас) 3) собственно вычисление результатов. Последние 2 можно решить, если на выход возвращать класс с несколькими параметрами:
Ну и почитайте code style для шарпа, очень помогает потом разбираться в коде. Вот например я писал в своё время код для сериализации структур, несмотря на то, что там используется очень много кодогенерации непосредственно IL-кода, всё достаточно легко читается. Всё дело именно в code style. Вы через месяц забудете, что писали, поверьте Я сам змейки писал и т.п., не так давно, в качестве учебы, сейчас перечитываю, нихрена не понятно, да еще и говнокод тот еще.Можете сами оценить: Кликните здесь для просмотра всего текста
1
|
|||||||||||
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
|
| 16.07.2015, 19:47 [ТС] | |
|
По поводу разделения как раз это и сделано, этот метод является унифицированной точкой через которую отправляется запрос из файла формы с параметрами для вычислений. Идея была какая: метод получает параметры в виде массива сформированного с учетом вычисляемых значений, в зависимости от выбранных параметров в форме, формируется строковая переменная, далее получив значения он передает(вызывает методы в которых выполнен расчет точнее даже не методы а интерфейс методов (там для разных зон разные формулы). Вызванные методы проверяют корректность значений и если все ок вызывается решение, которое и записывается в буферный массив данного класса. отработав метод определенной зоны возвращает 0 - все хорошо или 1-ошибка, если 0 то буферный массив переписывается в исходящий по ref.
Спасибо за помощь. Добавлено через 3 минуты Да и это все таки не змейка, поэтому и спрашиваю как правильнее. Пишу расчеты на основе http://www.iapws.org/release.html
0
|
|
|
Master of Orion
|
|
| 16.07.2015, 20:34 | |
|
alspav, еще раз, я привел пример, как можно разделить. То, что у вас одна точка входа - прекрасно, в любой программе она одна. И любую программу можно привести к каноническому виду. Чем раньше начнете - тем лушче будет.
Впрочем, я уже в нравоучения ударился, так что засим откланяюсь, свою тз я озвучил, на ваш вопрос тоже ответили.
1
|
|
|
23 / 24 / 11
Регистрация: 04.12.2014
Сообщений: 422
|
|
| 16.07.2015, 20:38 | |
|
По хорошему случаю разбить все на классы\ public int и тд, это же ООП)
0
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
|
| 16.07.2015, 20:42 [ТС] | |
|
все разбито на классы их уже около 10 шт, из этого я хотел сделать класс через который метод из Form будет обращаться к классам выполняющим расчеты термодинамических характеристик и возвращать результат в виде массива единообразного для любого запроса.
0
|
|
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
| 16.07.2015, 20:50 | |
|
не слушай их, пиши как пишется
это же маленькое полезное приложение, а не корпоративная система которую потом будут поддерживать 10 лет 10 разных компаний http://habrahabr.ru/post/153225/ Добавлено через 2 минуты если нет времени или лень читать много текста просто прокрути и смотри картинки ) слева это то что предлагают в теме, "как правильно", справа то что у тебя сейчас
1
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
||||||
| 16.07.2015, 23:54 [ТС] | ||||||
|
Спасибо прочитал с удовольствием. Я конечно не программист профессиональный, но руководством проектирования крупных строительных объектов занимаюсь давно. И то что там написано это про жизнь
. Программирование это скажем так увлечение.Добавлено через 6 минут лучшее враг хорошего Добавлено через 2 часа 40 минут Вот такое решение более правильное?
0
|
||||||
|
Заблокирован
|
|||||||
| 17.07.2015, 01:19 | |||||||
1
|
|||||||
|
Master of Orion
|
|
| 17.07.2015, 10:35 | |
|
m0nax, я всё же предпочитаю эту статью, пусть и извиняюсь за некоторую авторскую экспрессию, он немного бурлит в начале, а потом нормально пишет.
Добавлено через 1 минуту Приведу лишь итоговую диаграмму классов, как оно должно было получиться. Если автор статьи не умеет в KISS, то что уж тут поделать.
0
|
|
|
1 / 1 / 0
Регистрация: 29.06.2015
Сообщений: 41
|
|
| 17.07.2015, 14:07 [ТС] | |
|
Ev_Hyper, Подскажи пожалуйста с какой целью к полю структуры добавляется { get; set; }, ведь насколько я понимаю в них и так можно писать если стоит public?
0
|
|
| 17.07.2015, 14:07 | |
|
Помогаю со студенческими работами здесь
20
Проверка достаточных условий сходимости методов Автозаполнение поля в зависимости от условий
Появление объектов в зависимости от условий Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|