Я только что развернул свое сервисное приложение IronPython для точек продаж в начале этого месяца. Приложение-служба представляет собой RESTful-HTTP-сервер, обслуживающий запрос и транзакционный запрос к клиенту .NET WinForms. С помощью некоторой удаленной библиотеки сервисное приложение чисто реализовано в IronPython.
На мой взгляд, Python, несомненно, лучший язык для кодирования сложной бизнес-логики. Вот мои причины.
Язык очень выразительный. Я мог бы придумать бесконечные идеи для внутреннего DSL, которые делают мою бизнес-логику короче и проще для понимания.
Это интерактивно. Устранение неполадок и логическое тестирование можно выполнять в интерактивном режиме.
Это динамично. Это свобода Нет конфигурации XML. Нет сантехники. Нет компиляции.
Я могу работать в своем любимом редакторе.
Большинство скептиков всегда упоминают «завершение кода» и «отладчик». Ну, я иногда по ним скучаю. Однако я знаю, что я сознательно отказался от этих удобств в пользу гораздо более важного фактора, понятности. При надлежащем модульном тестировании и ведении журнала я бы выбрал 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 это проще.