Советы по разработке .NET API для будущего использования с F#

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

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

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

Некоторые моменты.

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

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


person Drew Noakes    schedule 07.06.2010    source источник


Ответы (1)


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

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

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

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

person Brian    schedule 07.06.2010
comment
Спасибо, Брайан. Несколько полезных советов там. Я тоже попробую с F#, но по моему опыту программирования требуется довольно много времени, чтобы понять, что действительно работает хорошо, а что нет. Я совсем новичок в F#, отсюда и вопрос. - person Drew Noakes; 07.06.2010
comment
Да; если вы можете привлечь одного пользователя F#, чтобы попробовать его, это может помочь (или дать больше уверенности). Трудно сделать какое-либо программное обеспечение (включая API) абсолютно правильным, не протестировав его хотя бы с одним «целевым пользователем» программного обеспечения, чтобы получить отзывы об удобстве использования. - person Brian; 07.06.2010