| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Архитектурная задачка на C# |
| Автор: Competitor 7.7.2011, 15:53 | ||
| Всем привет, Значит есть такая архитектурная задачка: Постановка: Есть около сотни разных алгоритмов, т.е. действий или операций, связанных с определенной предметной областью, которые принимают на вход какие-то параметры, и соответственно возвращают результат. На данный момент у меня есть базовый класс Algorithm, от него наследуются все остальные. Таким образом все алгоритмы у меня лежат в одной dll. Теперь добавилось такое условие: Появилась потребность в составных алгоритмах, которые будут работать по конвейерному типу, т.е. результат работы одного алгоритма будет являться входным параметром для следующего. Например: A1 -> A2 -> A7 - выполнить первый алгоритм, результат отдать на вход второго, результат второго отдать на вход седьмого, результат седьмого вернуть. И таких комбинаций довольно много. В идеале было бы круто в клиентском коде юзать это так:
Что думаете по этому поводу, как бы вы это реализовывали? |
| Автор: wester 7.7.2011, 15:57 |
| о F# не думали ? там такое можно реализовать http://msdn.microsoft.com/ru-ru/library/dd233229.aspx#Y570. |
| Автор: Экскалупатор 7.7.2011, 17:14 |
| Competitor, если решать в лоб, то что мешает передавать в метод массив экземпляров классов алгоритмов(можно использовать аргументы) и потом просто в цикле кидать между ними результат? |
| Автор: Competitor 8.7.2011, 09:34 | ||||
1. Типы входных и выходных параметров у всех алгоритмов могут быть разные. 2. Это придется создавать такой цикл для каждой комбинации алгоритмов. Т.е. по сути получится по отдельному алгоритму на каждую такую комбинацию. А хочется какой-то обобщенный типизированный инструмент, который мог бы выполнять нужную комбинацию алгоритмов по цепочке Добавлено через 6 минут и 12 секунд
почитал я про F#, А как это прикрутить можно? например, если я сделаю таким образом, что в одной DLL будут все алгоритмы, в другой будет код на F#. И дальше из клиентского кода (C#) можно будет вызывать функцию на F# передавая ей конкретные алгоритмы на выполнение? Или как еще? |
| Автор: Экскалупатор 8.7.2011, 11:54 |
| Competitor, ты же сказал что все алгоритмы наследуются от одного класса? ну так сделай нормальную архитектуру. и на вход принимай классы реализующие базовый класс алгоритма. или ты про какие то другие параметры говоришь? тогда расскажи более подробно... |
| Автор: wester 8.7.2011, 16:00 | ||||
| Competitor, Все алгоритмы реализованы в отдельной DLL на C#. Далее реализуем отдельную либу на F#
более того , можно самому выбирать алгоритм, например
при условии что x y z возвращает значения, что бы передавать их дальше. Код будет очень простой и наглядный. |