Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1

Избавляемся от повторяющегося кода. Типовые решения

10.10.2013, 22:27. Показов 1411. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, господа. Собственно, мне нужен совет.
Есть куча подобного кода:
C#
1
2
3
4
5
6
7
8
9
10
11
IAddress _address;
private void ChooseDeliveryAddress()
{
    using (var frm = new CatalogsForSelection.AgentDelivery.AgentDeliverySelect(_agent.ID))
    {
        if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            _address = frm.ReturnLastSelectedObject();
        }
    }
}
Суть процесса в открытии формы для выбора. Если выбор произведен, то присвоить полю класса выбранное значение.

Такого кода действительно много, хочется преобразовать это всё в красивую, одну единственную строчку.

В голове крутится только один вариант: Создать метод расширения для IAddress. Но есть проблема. Форма возвращает объект SelectedAddress : ISelectedAddres, соответственно ISelectedAddress : IAddress. Нужно что-бы для IAddress метод устанавливал свойства IAddress, а для ISelectedAddress, соответственно ISelectedAddress.

Может быть есть подходящие типовые решения для этой задачи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2013, 22:27
Ответы с готовыми решениями:

Типовые решения
Всем привет. Есть ли примеры "типовых решений" написания кода для типовых задач. Например для перекопировании файлов, ведь надо учесть...

1С: Типовые и стандартные решения
Привет всем... Есть проблема...Работаю обычно в тестовой базе и новые внешние обработки проверяю через нее. Когда загрузила внешнюю...

Типовые решения, подпрограммы, вопросы.
Решил всё же создать новую тему именно по написанию программ и подпрограмм. У меня такой вопрос к знатокам: это, я уверен, почти все...

5
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.10.2013, 00:50
Cupko, скинь хотя бы 2-3 примера такого кода. А то этот как считать стат. характеристики по одной реализации случайной величины...
0
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
11.10.2013, 06:33  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Cupko, скинь хотя бы 2-3 примера такого кода. А то этот как считать стат. характеристики по одной реализации случайной величины...
Да, собственно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private IProductInStorage _product;
private void GoodsInStorageBrowse()
{
    using (var sForm = new GoodsInStorageSelection(1, _invoiceHeader.AgentID)) 
    {
        if (sForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            _product = sForm.ReturnObject();
            _accountPrice = GoodsInStorageAccessor.GetProductAccountPrice(_product.ProductID);
            FillProductData();
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
InvoiceHeaderByAgentBrowse retInvoice;
private void BrowseIncoming()
{
    using (var frm = new PRED2._0.CatalogsForSelection.InvoicesByAgent.InvoicesByAgentSelection(_invoiceHeader, InvoiceType.Incoming, false))
    {
        if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            retInvoice = frm.ReturnObject();
        }
    }
}
и т.п. Суть процесса в выборе разнотипных объектов из формы, и если DialogResult вернул OK - то установить в какое-то поле ссыслку на возвращенный объект, иначе ничего не менять.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.10.2013, 09:47
что-то в таком духе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void Foo(Form form, Action action)
{
    using (form)
    {
        if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            action();
        }
    }
}
 
...
 
Foo(new GoodsInStorageSelection(1, _invoiceHeader.AgentID), 
    () => retInvoice = frm.ReturnObject());
1
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
11.10.2013, 10:05  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
что-то в таком духе:
Благодарю за вариант решения.
Но это не совсем то что я хотел. Я хочу привязать метод выбора к сущности, а не унифицировать метод для всего. По моему мнению, так будет и красивее/правильнее, и читабельнее.

Что-то вроде того что написано в первом посте (IAddress.Select()). Из-за большого количества абстракции немного путаюсь.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.10.2013, 11:33
Cupko, если конструкторы принимают разные параметры, то сильно лучше уже не сделать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2013, 11:33
Помогаю со студенческими работами здесь

Установка монтаж систем видеонаблюдения, типовые решения
Вот на предприятии буду проектировать систему видео наблюдения и подумал может еще кому будет интересно как и с чего начать С чего...

Типовые (часто встречающиеся) неисправности ноутбуков и решения по их устранению
Приветствую всех участников данного форума! Предлагаю дружно собирать в одном месте решения по устранению встречающихся неисправностей,...

Как избавиться от повторяющегося кода?
Есть некое условие: "if" и "else". При котором делается либо одно, либо другое. Но бывает так, что в обоих случаях какая то часть кода...

БНФ - запись повторяющегося фрагмента кода
type IInterface ::= interface(IInterface1}]) end; Хочу определить формально синтаксис интерфейсов в PascalABC.Net. Вопрос...

Слишком много повторяющегося кода в Редаксе
Представим, что у нас приложение средней крупности, в котором из UI (Реакта) через Редакс делаем кучу асинхронных запросов на бэкэнд...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru