Wśród kilku innych typów związanych z państwem, mam następujące typy rekordów w moim kodu:Kopiowanie właściwości między rejestrami
type SubmittedSuggestionData = {
SuggestionId : Guid
SuggestionText : string
Originator : User
ParentCategory : Category
SubmissionDate : DateTime
}
type ApprovedSuggestionData = {
SuggestionId : Guid
SuggestionText : string
Originator : User
ParentCategory : Category
SubmissionDate : DateTime
ApprovalDate : DateTime
}
Te następnie podawany do następujących:
type Suggestion =
| SubmittedSuggestion of SubmittedSuggestionData
| ApprovedSuggestion of ApprovedSuggestionData
To daje mi umiejętność pracy ze wzorcem w stylu maszyny państwowej w celu prowadzenia określonej logiki biznesowej w zależności od państwa. (To podejście zostało zaczerpnięte z: http://fsharpforfunandprofit.com/posts/designing-with-types-representing-states/)
Mam funkcję, która w swej najprostszej postaci, zmienia SubmittedSuggestion
do ApprovedSuggestion
:
let ApproveSuggestion suggestion =
match suggestion with
| SubmittedSuggestion suggestion -> ApprovedSuggestion {}
Funkcja ta jest niekompletne w momencie jak co mam zmaga aby zrozumieć, kiedy Propozycja zmienia się z Przesłanej na Zatwierdzoną, w jaki sposób kopiujesz właściwości z przekazanego suggestion
do nowo utworzonego ApprovedSuggestion
, jednocześnie wypełniając nową właściwość ApprovalDate
?
myślę, że to działa, jeśli zrobiłem coś takiego:
let ApproveSuggestion suggestion =
match suggestion with
| SubmittedSuggestion {SuggestionId = suggestionId; SuggestionText = suggestionText; Originator = originator; ParentCategory = category; SubmissionDate = submissionDate} ->
ApprovedSuggestion {SuggestionId = suggestionId; SuggestionText = suggestionText; Originator = originator; ParentCategory = category; SubmissionDate = submissionDate; ApprovalDate = DateTime.UtcNow}
ale wygląda dość przerażające dla mnie.
Czy istnieje bardziej przejrzysty, bardziej zwięzły sposób uzyskania tego samego wyniku? Próbowałem użyć słowa kluczowego with
, ale nie skompilowałem.
Dzięki
Hmmm, podoba mi się wygląd tego @Vandroiy. Moje stany nie zmienią się drastycznie, więc może to być dla mnie prawidłowe rozwiązanie. Dam ci szansę i dam ci znać :) – Stu1986C