Tra molti altri tipi di Stato legati, ho i seguenti tipi di record nel mio codice:Copia proprietà tra i record
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
}
Questi poi ad alimentare la seguente:
type Suggestion =
| SubmittedSuggestion of SubmittedSuggestionData
| ApprovedSuggestion of ApprovedSuggestionData
Questo mi la dà capacità di lavorare con un modello di stile macchina dello stato per eseguire specifiche logiche di business dipendenti dallo stato. (Questo approccio è stato preso da: http://fsharpforfunandprofit.com/posts/designing-with-types-representing-states/)
Ho una funzione che nella sua forma più semplice, cambia un SubmittedSuggestion
a un ApprovedSuggestion
:
let ApproveSuggestion suggestion =
match suggestion with
| SubmittedSuggestion suggestion -> ApprovedSuggestion {}
Questa funzione è incompleta al momento come quello che sto lottando comprendere quando un suggerimento cambia da Inviato a Approvato, come si copiano le proprietà dal passato in suggestion
nel nuovo ApprovedSuggestion
appena inserito anche nella nuova proprietà di ApprovalDate
?
immagino che avrebbe funzionato se ho fatto qualcosa di simile:
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}
ma che sembra piuttosto orribile per me.
Esiste un modo più pulito e più sintetico per ottenere lo stesso risultato? Ho provato a utilizzare la parola chiave with
ma non è stata compilata.
Grazie
Hmmm, mi piace l'aspetto di questo @Vandroiy. I miei stati non cambieranno drasticamente, quindi questa potrebbe essere una soluzione valida per me. Darò un colpo e ti faccio sapere :) – Stu1986C