|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
|
Как удобнее передавать большое количество параметров?12.05.2016, 14:44. Показов 4452. Ответов 12
Метки нет (Все метки)
В продолжение этой темы. Я пишу WCF сервис и у меня очень много функций с похожими аргументами. Т.е. какие то аргументы совпадают и по именам и по типам, а какие то нет. Причем в каждой функции прилично аргументов где то от 2х до 5. Плюс я вот все еще пишу его, поэтому иногда где то добавляются аргументы, иногда убираются. Поэтому мне не удобно каждый раз везде менять прототипы. Я пока что сделал просто общий класс в который сложил все аргументы и передаю параметром. Т.е. те которые не используются остаются null при вызове. Но это тоже не очень удобно выходит, хотя бы потому что поди вспомни в какой функции у тебя какие параметры передаешь. В общем нельзя ли как то более удобно это сделать? С грустью вспоминаю о C# 7.0, там можно было бы удобно очень кортежи заюзать... Но поскольку он пока не доступен...
0
|
|
| 12.05.2016, 14:44 | |
|
Ответы с готовыми решениями:
12
Как лучше в функцию передавать много параметров? Как компактно объявить большое количество переменных Передавать серверу строку-запрос на определенное действие и список параметров |
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,345
|
|
| 12.05.2016, 15:19 | |
|
Dark Byte, по хорошему, повторяющиеся параметры можно и нужно упаковывать в DTO. Там, где используется всего 2 или 3 параметра, можно обойтись и без DTO. Не вижу в этом особой проблемы.
Есть вероятность, что у тебе нужно пересмотреть архитектуру своего сервиса и его контрактов. Если есть желание творить лютый говнокод, то можно сделать упор на Tuple.
0
|
|
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||
| 12.05.2016, 15:35 [ТС] | ||||
|
0
|
||||
|
|
||
| 12.05.2016, 15:44 | ||
|
Добавлено через 2 минуты Dark Byte, либо свой тип с dynamic параметрами. Естественно, строгая типизация потеряется, но по другому уже никак, раз у вас количество и тип аргументов меняется.
0
|
||
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||
| 12.05.2016, 15:51 [ТС] | ||||
|
Добавлено через 1 минуту Еще вариант передавать словарь. Dictionary<string, object> Но это тоже приводить опять надо везде... Да и опять таки надо помнить где ты что передаешь.
0
|
||||
|
|
|
| 12.05.2016, 16:03 | |
|
0
|
|
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|||||||||||||
| 12.05.2016, 16:30 | |||||||||||||
|
только понту от него. Тоже говнокод редкостный выйдет. Из:
0
|
|||||||||||||
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||
| 12.05.2016, 16:44 [ТС] | ||
|
0
|
||
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
||
| 12.05.2016, 16:51 | ||
|
Если бы ты мне такой сервис развернул и сказал, что мне надо туда передать Tuple, я бы тебя из под земли вытащил => пристрелил => и обратно закопал ![]() DTO придумали дабы не говнокодить, когда в метод надо передать больше четырёх параметров.
1
|
||
|
|
|
| 12.05.2016, 17:12 | |
|
Dark Byte, два замечания.
1. Я как-то не совсем понимаю, как можно начинать писать программу (сервис), не имея хотя бы более-менее четких установок. К примеру, я вот планирую написать одну прогу, по взаимодействию с сервисом. Первое, что я продумываю - это модели, которые будут в программе. Потом методы для работы с этими моделями. И потом уже как все это отобразить. Но писать вот так, без четкого плана - это как-то странно. 2. Ну и далее, раз уж вы работаете с WCF. Определите одну модель, и в процессе написания меняйте в ней поля. Студия сама все сделает, вам надо будет только обновить ссылку на службу. Еще вариант - использовать известные типы, возможно вместе с реализацией IExtensibleDataObject (при добавлении ссылки на службу Студия сама реализует его в контрактах данных на стороне клиента). В общем, инструментов вполне достаточно. Пробуйте, используйте.
0
|
|
|
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
|
||||||||
| 12.05.2016, 17:31 [ТС] | ||||||||
0
|
||||||||
|
|
|||
| 12.05.2016, 17:40 | |||
|
Пример первый: есть служба и клиент, они написаны и работают. Допустим, в контракте данных службы мы меняем поля (добавляем новые), как нам передать их клиенту, ведь он о них не знает. Реализуем в контракте данных на стороне клиента этот интерфейс, и исполняющая среда при десериализации сообщения все поля, которых нет в клиенте, но есть в сообщении упакует посредством этого интерфейса. Пример второй - то же самое, но для сквозной передачи, типа Новый-Старый-Новый, чтобы не потерять поля в контракте данных при передаче через несколько инстанций, не все из которых знают об изменениях. Примерно такой механизм.
0
|
|||
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,345
|
|
| 13.05.2016, 04:53 | |
|
Dark Byte, как-то давно, мы делали приложение для работы с вот этим API. Функций там малый миллион. Так вот, ребята разработавшие это API, видимо очень хорошо подумали мозгом головы и выдали API не использующее DTO вообще (всё на примитивах .NET). При этом только небольшое количество функций имеет больше пяти аргументов, а так, в среднем, 2-3 аргумента.
Работая с этим API ни кто не выбросился в окно с криком "как же неудобно работать с таким количеством аргументов!". Так, что либо смирись с тем, что твой сервис требует много вводной информации, либо пересмотри архитектуру сервиса и его контрактов.
0
|
|
| 13.05.2016, 04:53 | |
|
Помогаю со студенческими работами здесь
13
Как лучше всего сохранять большое количество матриц?
Можно ли передавать в качестве параметров такие символы, как...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
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
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|