Как организовать F # исходный код большого проекта (> 300 классов) в Visual Studio? - PullRequest
21 голосов
/ 22 марта 2011

В C # вы можете помещать файлы в папки, соответствующие их пространствам имен, и просматривать их в обозревателе решений.

В F # кажется, что для компиляции я должен поместить все в обычный упорядоченный список. Когда я достигаю масштаба около 300 классов, это становится немного запутанным и дезорганизованным, и я начинаю завидовать C # и думаю, что, вероятно, это цена за вывод типов.

Есть ли лучшие варианты, чем разделение на несколько сборок?

Судя по исходному тексту компилятора F #, они выбрали путь, но у меня довольно большая система взаимосвязанных компонентов (Controller - ViewModel - View,> 300 классов). Я хочу быть в одной сборке из-за циклических зависимостей даже на уровне интерфейсов. ,

Должен ли я забыть об одном файле - одном классе и создать несколько огромных файлов? (например, в компиляторе F # у вас есть несколько исходных файлов в диапазоне от 100 до 300 КБ, а некоторые автоматически генерируются около 1 МБ!)

Какой у вас опыт работы с крупными проектами на F #?

Ответы [ 2 ]

14 голосов
/ 22 марта 2011

Вы упомянули "циклические зависимости", чтобы быть ясным, F # никогда не позволит вам распространять циклические зависимости по файлам. Если тип Foo относится к типу Bar, а тип Bar относится к типу Foo, тогда Foo и Bar должны быть определены в одном файле в одной и той же группе type ... and ... в F #.

Проблема здесь связана с организацией и навигацией, в основном с инструментами. Обозреватель решений VS отображает список файлов; папки позволяют вам «сворачивать» группы файлов, что облегчает организацию ваших мыслей или навигацию по «огромным расстояниям» многих файлов. Однако для навигации существуют различные другие инструменты (Перейти к определению, поиск текста в текущем проекте, ...), чтобы вы могли перейти, например, к. определенное определение класса. (Надеемся, что эти инструменты будут улучшаться для F # в частности, а также для VS в целом в будущих версиях.)

В любом случае, я твердо верю, что «довольно большая система взаимосвязанных компонентов (Controller - ViewModel - View,> 300 классов)» - это запах кода. Если вы не можете распутать их, чтобы иметь архетектурное наслоение, так что есть части, которые не зависят от других частей (и, таким образом, могут быть определены «первыми» в предыдущем файле в F #), тогда у вас есть большие проблемы, чем просто «как» организовать свой код F # ". Мое убежденное мнение, пожалуй, лучше всего выражено здесь .

РЕДАКТИРОВАТЬ (2018): между тем, в последние несколько лет были добавлены инструменты, среди которых: переход к определению, поиск всех ссылок, глобальное переименование идентификаторов, поддержка папок, реорганизация файлов и т. Д. года. Для решений, которые требуют взаимных ссылок между классами, были введены namespace rec и module rec, чтобы ограничить потребность в type ... and ....

5 голосов
/ 22 марта 2011

Вы также можете иметь папки в проектах F # . Это немного громоздко, но работает.

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

Я еще не работал с действительно большими проектами на F #, но мне также интересен опыт других.

...