Советы по разработке .NET API для будущего использования с F # - PullRequest
3 голосов
/ 07 июня 2010

Я нахожусь в процессе разработки .NET API, чтобы позволить разработчикам создавать агентов RoboCup для 3D-футбольной лиги .

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

Итак, я хотел бы спросить, какие вещи я должен учитывать при разработке API, который должен использоваться и кодом C #, и F #.

Некоторые баллы.

  • Я довольно интенсивно использую матрицу и векторную математику. В настоящее время это неизменяемые классы / структуры.
  • API в настоящее время определяет несколько интерфейсов с пользовательскими реализациями (например: IAgent), используя экземпляры их реализаций (например: MyAgent) для создания других классов API (например: new Client(myAgent)).
  • API запускает события.
  • API предоставляет несколько типов делегатов.
  • API включает несколько перечислений.

Я бы хотел выпустить версию API как можно скорее, и не хочу вносить в нее серьезные изменения позже, если пойму, что с F # слишком сложно работать. Любой совет приветствуется.

1 Ответ

3 голосов
/ 07 июня 2010

Лучший совет, вероятно, попытаться использовать API из F #. :)

Тем не менее, я думаю, что у вас хорошо звучит

  • любой хороший C # API должен быть довольно хорошим F # API
  • есть небольшое трение при использовании делегатов / Func / Action на границе, но вы ничего не изменили бы здесь
  • перечисления, события, интерфейсы, классы, структуры все в порядке
  • если возможно, избегайте API, которые возвращают значения, которые обычно игнорируются (например, текущие интерфейсы, которые «возвращают это» для возможности «цепочки вызовов» - это заставляет F # требовать много |>ignore s)

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

...