Реализация "фактической обработки данных" в F #, возможно, является наиболее распространенным в настоящее время использованием F #, поэтому реализация бизнес-логики в F # кажется хорошим выбором.
Я не думаю, что вы сможете (легко) использовать Entity Framework непосредственно из F #, поэтому вам нужно будет использовать C # для генерации модели данных и предоставления соответствующих данных для F #. Если вы хотите использовать LINQ to SQL, вы можете просто сгенерировать отображение в C # и написать запросы в F # с помощью PowerPack (как предполагает Митя).
Возможно, проще всего было бы иметь три проекта:
Уровень доступа к данным в C #, который просто использует Entity Framework и предоставляет важные данные (используя тип IEnumerable
, который можно легко использовать из F #).
Бизнес-уровень в F #, который использует данные, выполняет "фактическую обработку" и предоставляет несколько типов, которые можно использовать из C #. Если вы объявите класс в F # , он будет скомпилирован, как и любой обычный класс .NET, так что вы можете легко использовать его из C #. Вам просто нужно быть осторожным, чтобы не использовать специфические функции F # в общедоступном интерфейсе. Парой предложений будет использование делегатов (вместо функций), типов классов и IEnumerable
(называемых seq
в F #) вместо функциональных списков.
Пользовательский интерфейс слой в C #, который вызывает типы, объявленные в F #. Если вы следуете простым правилам, приведенным выше, то код C # может легко вызывать типы F #.
В качестве примечания - хотя F # не поддерживает дизайнеров, он может быть весьма полезен для программирования пользовательского интерфейса (см., Например, эту статью или мой доклад о Silverlight в F # ). Одна вещь, которую вы можете сделать, - это создать свой пользовательский интерфейс в проекте библиотеки C #, пометить все как общедоступное и затем ссылаться на него из проекта F #, который фактически контролирует взаимодействие с пользователем. Однако это немного сложнее, поэтому я думаю, что начинать с бизнес-уровня - это хорошая идея.