![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
Всем привет,
Значит есть такая архитектурная задачка: Постановка: Есть около сотни разных алгоритмов, т.е. действий или операций, связанных с определенной предметной областью, которые принимают на вход какие-то параметры, и соответственно возвращают результат. На данный момент у меня есть базовый класс Algorithm, от него наследуются все остальные. Таким образом все алгоритмы у меня лежат в одной dll. Теперь добавилось такое условие: Появилась потребность в составных алгоритмах, которые будут работать по конвейерному типу, т.е. результат работы одного алгоритма будет являться входным параметром для следующего. Например: A1 -> A2 -> A7 - выполнить первый алгоритм, результат отдать на вход второго, результат второго отдать на вход седьмого, результат седьмого вернуть. И таких комбинаций довольно много. В идеале было бы круто в клиентском коде юзать это так:
Что думаете по этому поводу, как бы вы это реализовывали? |
|||
|
||||
| wester |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 27.2.2009 Репутация: 4 Всего: 13 |
||||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Competitor, если решать в лоб, то что мешает передавать в метод массив экземпляров классов алгоритмов(можно использовать аргументы) и потом просто в цикле кидать между ними результат?
|
|||
|
||||
| Competitor |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
1. Типы входных и выходных параметров у всех алгоритмов могут быть разные. 2. Это придется создавать такой цикл для каждой комбинации алгоритмов. Т.е. по сути получится по отдельному алгоритму на каждую такую комбинацию. А хочется какой-то обобщенный типизированный инструмент, который мог бы выполнять нужную комбинацию алгоритмов по цепочке Добавлено через 6 минут и 12 секунд
почитал я про F#, А как это прикрутить можно? например, если я сделаю таким образом, что в одной DLL будут все алгоритмы, в другой будет код на F#. И дальше из клиентского кода (C#) можно будет вызывать функцию на F# передавая ей конкретные алгоритмы на выполнение? Или как еще? |
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Competitor, ты же сказал что все алгоритмы наследуются от одного класса? ну так сделай нормальную архитектуру. и на вход принимай классы реализующие базовый класс алгоритма. или ты про какие то другие параметры говоришь? тогда расскажи более подробно...
|
|||
|
||||
| wester |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 27.2.2009 Репутация: 4 Всего: 13 |
Competitor,
Все алгоритмы реализованы в отдельной DLL на C#. Далее реализуем отдельную либу на F#
более того , можно самому выбирать алгоритм, например
при условии что x y z возвращает значения, что бы передавать их дальше. Код будет очень простой и наглядный. |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |