Sto giocando un po 'con le interfacce F #, creando una semplice classe di accesso ai dati.Esiste un modo più semplice per utilizzare implicitamente le interfacce in F #?
L'interfaccia è:
type IUserAccess =
abstract member GetUsers : (dbSchema.ServiceTypes.Users -> bool) -> dbSchema.ServiceTypes.Users seq
abstract member GetAllUsers : unit -> dbSchema.ServiceTypes.Users seq
Nella classe, sto chiamando i metodi in questo modo:
type UserAccess() =
let db = dbSchema.GetDataContext()
interface IUserAccess with
member this.GetUsers cond =
let query = query {
for row in db.Users do
select row }
query |> Seq.where cond
member this.GetAllUsers() =
(this:>IUserAccess).GetUsers (fun _ -> true)
Quello che mi sono un po 'preoccupato è il modo in cui sto chiamando GetAllUsers
funzione, in particolare con la parte (this:>IUserAccess)
. Qual è il modo più semplice per chiamare metodi implementati all'interno della stessa interfaccia?
Una semplice opzione mi viene in mente è la creazione di GetUsers
metodo direttamente all'interno UserAccess()
classe e quindi chiamando dal implementazione dell'interfaccia di entrambi GetUsers
e GetAllUsers
, ma che significa un nuovo metodo privato implementato, che vorrei evitare. C'è un'altra opzione?
Grazie, questo è esattamente il miglioramento semplice che stavo cercando! –