Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архитектурная задачка на C# 
:(
    Опции темы
Competitor
Дата 7.7.2011, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



Всем привет,
Значит есть такая архитектурная задачка:
Постановка: 
Есть около сотни разных алгоритмов, т.е. действий или операций, связанных с определенной предметной областью, которые принимают на вход какие-то параметры, и соответственно возвращают результат. На данный момент у меня есть базовый класс Algorithm, от него наследуются все остальные. Таким образом все алгоритмы у меня лежат в одной dll.

Теперь добавилось такое условие:
Появилась потребность в составных алгоритмах, которые будут работать по конвейерному типу, т.е. результат работы одного алгоритма будет являться входным параметром для следующего.
Например: A1 -> A2 -> A7 - выполнить первый алгоритм, результат отдать на вход второго, результат второго отдать на вход седьмого, результат седьмого вернуть.
И таких комбинаций довольно  много.

В идеале было бы круто в клиентском коде юзать это так: 
Код

var outputparameter = MegaConveyer<InputData, OutputData>(inputParameter, new A1(), new A2(), new A7())


Что думаете по этому поводу, как бы вы это реализовывали?
PM MAIL WWW   Вверх
wester
Дата 7.7.2011, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 4
Всего: 13



о F# не думали ? там такое можно реализовать очень просто.

PM MAIL   Вверх
Экскалупатор
Дата 7.7.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Competitor, если решать в лоб, то что мешает передавать в метод массив экземпляров классов алгоритмов(можно использовать аргументы) и потом просто в цикле кидать между ними результат?
PM MAIL ICQ   Вверх
Competitor
Дата 8.7.2011, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



Цитата

Competitor, если решать в лоб, то что мешает передавать в метод массив экземпляров классов алгоритмов(можно использовать аргументы) и потом просто в цикле кидать между ними результат?

1. Типы входных и выходных параметров у всех алгоритмов могут быть разные.
2. Это придется создавать такой цикл для каждой комбинации алгоритмов. Т.е. по сути получится по отдельному алгоритму на каждую такую комбинацию. А хочется какой-то обобщенный типизированный инструмент, который мог бы выполнять нужную комбинацию алгоритмов по цепочке

Добавлено через 6 минут и 12 секунд
Цитата

о F# не думали ? там такое можно реализовать очень просто.

почитал я про F#,
А как это прикрутить можно?
например, если я сделаю таким образом, что в одной DLL будут все алгоритмы, в другой будет код на F#. И дальше из клиентского кода (C#) можно будет вызывать функцию на F# передавая ей конкретные алгоритмы на выполнение? Или как еще?
PM MAIL WWW   Вверх
Экскалупатор
Дата 8.7.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



Competitor, ты же сказал что все алгоритмы наследуются от одного класса? ну так сделай нормальную архитектуру. и на вход принимай классы реализующие базовый класс алгоритма. или ты про какие то другие параметры говоришь? тогда расскажи более подробно...
PM MAIL ICQ   Вверх
wester
Дата 8.7.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 4
Всего: 13



Competitor, 
Все алгоритмы реализованы в отдельной DLL на C#. Далее реализуем отдельную либу на F#
Код

let result = A1 |> A2 |> A7

более того , можно самому выбирать алгоритм, например
Код

let resultUser x y z = x |> y |> z

при условии что x y z возвращает значения, что бы передавать их дальше.
Код будет очень простой и наглядный. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0963 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.