Моделирование домена может быть выполнено как с записями, так и с классами.Я думаю, когда использовать один или другой вопрос, прежде всего, вопрос предпочтений и окружающей среды.Лично я обычно не использую классы, однако я знаю некоторых людей, которые используют их довольно часто.Классы больше полагаются на мутации и более производительны за счет простоты использования.Лично я считаю, что если вы собираетесь писать объектно-ориентированный стиль, используйте классы, а если вы пишете функциональный стиль, используйте записи.Записывает паттерны, сопоставляет и разбирает проще.Часть этого различия культурная, просто потому, что вы можете делать что-то определенным образом, не означает, что другие люди смогут легко вас понять.Код написан для чтения, как вами, так и другими.Когда вы выбираете записи или классы, они сообщают о стиле и использовании этих типов.Наконец, я не знаю, что класс может быть преобразован в запись в F #, и если бы это было возможно, я бы по-прежнему рекомендовал это делать.Это связано с тем, что использование записей в качестве классов и классов в качестве записей противоречит культурным нормам вокруг этих конструкций.Я лично думаю, что ваш пример член подходит как для записей, так и для занятий.Я обычно люблю использовать модули с одинаковыми именами для функций, связанных с данным типом, потому что это может сделать его менее запутанным, когда функция потребляет что-то другое, чем тип записи.Однако я не думаю, что кто-либо хорошо воспитанный будет противиться любому из ваших примеров кода там.
type Album(
Id: int,
Name: string,
DateReleased: string,
Genre: int ) as me =
let mutable genre = Genre
//readonly property
member val Id = Id
//autoproperty with get and set
member val Name = Name with get, set
member val DateReleased = DateReleased with get, set
//property with explicit get and set
member this.Genre
with get () = genre
and set (value) = genre <- value
см. Когда мне следует использовать let, member val и member this.?