Gram trochę z interfejsami F #, tworząc prostą klasę dostępu do danych.Czy istnieje prostszy sposób niejawnego używania interfejsów w języku F #?
Interfejs jest:
type IUserAccess =
abstract member GetUsers : (dbSchema.ServiceTypes.Users -> bool) -> dbSchema.ServiceTypes.Users seq
abstract member GetAllUsers : unit -> dbSchema.ServiceTypes.Users seq
W klasie, jestem wywołanie metody w ten sposób:
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)
Co ja jestem zaniepokojony z bit jest sposób wzywam GetAllUsers
funkcja, w szczególności z częścią (this:>IUserAccess)
. Jaki jest najprostszy sposób wywoływania metod zaimplementowanych w tym samym interfejsie?
Jedna prosta opcja mogę myśleć jest tworzenie GetUsers
metody bezpośrednio w UserAccess()
klasy, a następnie wywołanie go z implementacji interfejsu zarówno GetUsers
i GetAllUsers
, ale to oznacza nową metodę prywatną wdrożone, który chciałbym uniknąć. Czy istnieje inna opcja?
Dzięki, to jest właśnie proste ulepszenie, którego szukałem! –