Линия бизнес-приложений: облегчит ли F # мою жизнь? - PullRequest
30 голосов
/ 23 февраля 2010

Я занимаюсь в основном линейкой бизнес-приложений. Нет научных работ. Нет сложных расчетов. Просто свяжите пользовательский интерфейс с базой данных. Единственная причина, по которой я использую многопоточность, - это выполнять некоторую работу в фоновом режиме и по-прежнему отвечать на запросы интерфейса.

Возможно, это не лучший подход, но я следую этому.

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

Код для шагов 1 и 2 в подавляющем большинстве отличается, и многопоточный код доминирует над фактическим кодом.

1.Получит ли F # мою жизнь в случае приложений Line of Business?
2. Существуют ли какие-либо технологии пользовательского интерфейса, которые лучше всего подходят для F #? В основном я работаю над ASP.NET и Silverlight. WPF сейчас и потом.
3. Есть ли хорошие примеры Line бизнес-приложений / демонстраций с F #?

Я не спрашиваю, возможно ли разработать приложение Line of Business на F #. Я спрашиваю, облегчит ли F # мою жизнь разработке приложений Line of Business по сравнению с C #? Моя главная задача - синхронизация потоков и пользовательского интерфейса.

Ответы [ 5 ]

33 голосов
/ 23 февраля 2010

Я нахожусь в той же лодке, что и вы, и занимаюсь множеством приложений типа «бизнес», ничего более «забавного», чем игры, компиляторы или поисковые системы.

Ваш пробег будет варьироваться, но, по крайней мере, по моему собственному опыту, многие команды разработчиков не хотят прыгать прямо в F #, потому что никто в команде не знает и даже не слышал об этом. И сразу же вы должны ответить на такие вопросы, как "что это делает в отличие от C #?" Если вы можете убедить своего босса позволить вам написать с ним несколько демонстрационных приложений, сделайте это!

Итак, сказав это, я обнаружил, что C # не очень хорош в бизнес-правилах, но обрабатывает GUI как чемпион; Неизменность F # делает разработку GUI неудобной, но бизнес-правила и рабочие процессы кажутся естественными. Таким образом, эти два языка имеют свои сильные стороны и дополняют слабые стороны друг друга.

В моих собственных LOB-приложениях F # вращает вокруг C # в нескольких областях:

  • Асинхронные рабочие процессы F # и процессоры почтовых ящиков на порядки легче работать с нативными потоками и даже параллельной библиотекой задач. Поскольку я использую процессоры почтовых ящиков для межпотокового взаимодействия, я даже не помню, когда мне в последний раз приходилось блокировать или выполнять thread.join () вообще для синхронизации.

  • Определение механизмов бизнес-правил и DSL с профсоюзами FTW! Каждое нетривиальное LOB-приложение, над которым я когда-либо работал, имеет свой собственный полуиспеченный язык правил и интерпретатор, и оно почти всегда основано на рекурсивном переключении перечисления для просмотра правил и поиска соответствия. Текущий проект, который у меня есть, теперь содержит более 1300 открытых классов, 900 или около того - простые контейнерные классы, представляющие правило Я думаю, что представление правил в виде объединения F # существенно уменьшит раздувание кода и улучшит механизм.

  • Неизменяемый код просто работает лучше - если вы получаете новый объект с недопустимым состоянием, вам не нужно далеко искать, чтобы найти строку кода, вызывающую ошибку, все, что вам нужно знать находится в стеке вызовов. Если у вас есть изменяемый объект с недопустимым состоянием, иногда вам приходится тратить много времени на его отслеживание. Вы можете писать неизменный код на C #, но действительно трудно не отступить от изменчивости, особенно когда вы модифицируете объект в цикле.

  • Я ненавижу ноль. Я не могу дать точную оценку, но такое ощущение, что половина ошибок, которые мы получаем в работе, являются исключениями из нулевых ссылок - объект неправильно инициализирован, и вы не узнаете об этом, пока в коде не будет 30 кадров стека. Я думаю, что F # поможет нам написать больше кода без ошибок в первый раз.

C # обычно хорошо работает, когда:

  • Вы пишете код графического интерфейса или работаете с изначально изменяемыми системами.

  • Предоставление DLL или веб-службы множеству разных клиентов.

  • Ваш босс не позволит вам использовать инструменты, которые вы хотите;)

Так что, если вы можете преодолеть «почему мы хотим использовать новый языковой барьер», я думаю, F # действительно облегчит вашу жизнь.

10 голосов
/ 23 февраля 2010

Это очень сложный вопрос - я думаю, что F # сделает некоторые аспекты вашей жизни намного проще, а некоторые - немного сложнее.

С другой стороны, работа с потоками должна быть относительно безболезненной - асинхронные рабочие процессы F # являются огромным преимуществом. Кроме того, F # Interactive делает быструю итерацию и исследование кода очень простым. Для меня это огромное преимущество перед C #, так как я могу тестировать незначительные изменения кода, не проходя полную сборку.

С другой стороны, инструменты для F # - это не то, что для C #, а это означает, что у вас не будет доступа к GUI-компоновщикам, инструментам рефакторинга и т. Д. Трудно сказать, насколько велика производительность это заставит вас не знать больше о вашем сценарии. Одним из обходных путей может быть создание многоязычного решения, которое имеет тонкий интерфейс C #, но, опять же, сложность может не стоить выгоды.

7 голосов
/ 23 февраля 2010

@ У Джульетты и @kvb хорошие ответы, я просто хочу повторить, насколько полезен F # для облегчения работы с потоками. В моем блоге " Панель инструментов RSS на F #, часть шестая (объединяя все это с графическим интерфейсом WPF) ", я говорю

... Обратите внимание на изящное использование «async» здесь - я использовать Async.StartImmediate, что означает весь код выполняется в потоке пользовательского интерфейса (где начинается обработчик Click), но Я все еще могу делать неблокирующие сны это не мешает пользовательскому интерфейсу. Это один так, что F # async просто дует в двери от всего остального.

...

Наша информация «назад» («3 минуты» назад ») быстро устареет, если мы не обновляйте его, поэтому мы начинаем цикл это перерисовывает каждую минуту. однажды опять же F # async пинает задницу, как я могу просто напишите это, как будто это было синхронный цикл работает на интерфейсе нить, но неблокирующий сон вызов гарантирует, что пользовательский интерфейс остается в живых. Потрясающие. ...

но это сообщение в блоге является примером использования F # для ручного кодирования всего пользовательского интерфейса. Это подразумевает обмен всех великолепных инструментов GUI, которые вы получаете с C # или VB. Я полагаю, что гибридный подход может потенциально принести почти все преимущества обоих (со стоимостью двух проектов в решении, где у вас был только один предыдущий), но у меня (пока) нет прямого опыта, чтобы поделитесь здесь.

(Есть ли канонический «пример проблемы» приложения с графическим интерфейсом C #, где вам нужно добавить многопоточность, чтобы улучшить производительность или сохранить работоспособность приложения во время длительной работы? Если это так, я должен проверить это .)

2 голосов
/ 05 мая 2010

Что-то, что вы хотели бы видеть:

Первое существенное направление бизнеса в F #

Большое приложение LOB в F #.

0 голосов
/ 28 апреля 2011

Чтобы решить эту проблему, я написал несколько своих соображений по поводу использования F #,

http://fadsworld.wordpress.com/2011/04/13/f-in-the-enterprise-i/ http://fadsworld.wordpress.com/2011/04/17/fin-the-enterprise-ii-2/

Я также планирую сделать видеоурок, чтобы закончить серию и показать, как F # может внести вклад в программирование UX.

Я говорю только в контексте F # здесь.

-Fahad

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...