IronPython: какие виды работ вы когда-либо выполняли с IronPython вместо стандартных языков .NET (например, C #) - PullRequest
8 голосов
/ 16 декабря 2009

Я изучаю IronPython вместе с Python. Мне любопытно , какие задачи вы склонны использовать IronPython для решения чаще, чем стандартные языки .NET.

Спасибо за любой пример.

Ответы [ 6 ]

9 голосов
/ 16 декабря 2009

Один пример, который идеально подходит для IronPython, - это когда вы хотите включить возможность скриптования в свое приложение. Я работал над системами, в которых пользователь может взаимодействовать со всей моделью класса приложения напрямую через слой сценариев Python, встроенный в приложение, и это обеспечивает большую гибкость для опытных пользователей.

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

Редактировать под запрос: Вот простой (насмешливый) пример. Когда пользователь создает новую сделку в системе, система проверяет, определена ли следующая функция Python, и, если она присутствует, сделка получает результат функции в виде платы, добавленной к ней, прежде чем она будет зафиксирована в базе данных:

def calculate_broker_fee(trade):
    fee = 0.043 # default value
    if trade.exchange in ["SWX", "EURONEXT"] and \
        trade.instrument.instrument_type == "Bond":
        fee = trade.quantity*0.00234
    return fee
4 голосов
/ 16 декабря 2009

Я только что развернул свое сервисное приложение IronPython для точек продаж в начале этого месяца. Приложение-служба представляет собой RESTful-HTTP-сервер, обслуживающий запрос и транзакционный запрос к клиенту .NET WinForms. С помощью некоторой удаленной библиотеки сервисное приложение чисто реализовано в IronPython.

На мой взгляд, Python, несомненно, лучший язык для кодирования сложной бизнес-логики. Вот мои причины.

  1. Язык очень выразительный. Я мог бы придумать бесконечные идеи для внутреннего DSL, которые делают мою бизнес-логику короче и проще для понимания.

  2. Это интерактивно. Устранение неполадок и логическое тестирование можно выполнять в интерактивном режиме.

  3. Это динамично. Это свобода Нет конфигурации XML. Нет сантехники. Нет компиляции.

  4. Я могу работать в своем любимом редакторе.

Большинство скептиков всегда упоминают «завершение кода» и «отладчик». Ну, я иногда по ним скучаю. Однако я знаю, что я сознательно отказался от этих удобств в пользу гораздо более важного фактора, понятности. При надлежащем модульном тестировании и ведении журнала я бы выбрал IronPython на любых языках для своей бизнес-логики.

Последнее обновление:

Иногда я экспериментирую и регистрирую проблемы пользователей со скриптом Ironpython, которые действуют так, как если бы они были такими клиентами:

>> from boon.service import client
>> CASH_PAYMENT_TYPE = '000000011'
>> cl = client.Client('http://pos-server/bin?posB2K')
>> cl.connect('user', 'password')
>> order = cl.workspace('pos.Order')
>> order.load('1312')
>> payments = order.dataset.Tables['POS_PAYMENTS']
>> payments.Rows[0]['PAYMENT_TYPE_ID'] = CASH_PAYMENT_TYPE
>> order.save()

Иногда я исследую ошибки с помощью серверного сценария, например:

>> from boon import pos
>> pos.register_pos_service(debug=True)
>> from boon.service import get_instance
>> possvc = get_instance('pos')
>> print possvc.store['POS_PAYMENTS'] \
..   .where(lambda r: r.POS_HD_ID == 1312) \
..   .include('PAYMENT_TYPE_ID', 'PAY_AMT') \
..   .list()
[('000000011', 1520)]

Вы можете найти код не слишком элегантным, поскольку я предпочитаю основывать свою работу на ADO.NET DataSet. Однако для клиента Windoows Forms это проще.

3 голосов
/ 16 декабря 2009

В повседневной работе это мой стандартный язык для тех маленьких кусочков процесса сборки, которые слишком велики для файлов .bat и недостаточно тяжелые, чтобы требовать отдельного исполняемого файла; это включает в себя все, что может использовать немного XML-обработки или отражения - например, генерирование файлов Wix с систематической обработкой 32- и 64-битных установок. В этой роли он превосходит PowerShell, потому что IronPython - это установка XCOPY на машины сборки.

Это также очень полезно для создания прототипов фрагментов кода на основе незнакомых или сложных API-интерфейсов (для меня WMI и Active Directory - обычные) или для диагностики проблем в коде с использованием этих API-интерфейсов (например, выявляя странности, возникающие, когда вы на контроллере домена, а не в другом месте).

0 голосов
/ 04 мая 2012

Мы часто используем его для небольших административных инструментов против SharePoint. В частности, он отлично подходит для изучения API на основе реальных данных (со всеми его причудами в реальной жизни). Итерации разработки выполняются быстрее, и вы не всегда можете установить Visual Studio на рабочие серверы.

0 голосов
/ 04 мая 2012

Я использую IronPython для нескольких разных целей:

  • Альтернатива Powershell, когда мне нужно что-то написать и вызвать библиотеку .NET, или когда скрипт достаточно сложен, чтобы гарантировать настоящий язык программирования.
  • Встраивание в приложение .NET для скриптовых плагинов.
  • Прототипирование и тестирование .NET libs в непосредственном режиме. Это намного проще, чем создание тестового проекта в C #
0 голосов
/ 16 декабря 2009

Создан инструмент загрузки для плагина MS Group Chat Server. GC API находится в C #. Я обернул это в dll и заставил FePy загрузить его. Основное приложение, конфигурационные скрипты и т. Д. Все в FePy.

...