das Muster, das Sie verwenden gegeben, ich glaube, ein gutes mentales Modell für Sie folgende wäre:
in der Datenbank
Product
stellt eine Reihe - es ist ein gutes altes C# Objekt (POCO) mit nichts besonders schlau darüber. Es sollte einfach eine Sammlung von Auto-Eigenschaften sein, genau wie in Ihrem Beispiel.
ProductDa
sollte wo sein Datenzugriff auftritt. Um herauszufinden, ob Sie auf Daten zugreifen, sollten Sie sich fragen: "Soll ich die Datenbank abfragen, um diese Methode zu implementieren?" oder "werde ich Dapper verwenden, um diese Methode zu implementieren?" Wenn die Antwort Ja ist, dann geht die Interaktion mit der Datenbank in diese Klasse und ihre Methoden.
Ob Sie die Methode Count()
von LINQ verwenden oder Ihre eigene zusammenstellen sollten: Auf der Datenzugriffsebene sollten Sie wahrscheinlich vermeiden, Ihre eigene Methode für Count()
zu bündeln. Die Datenzugriffsebene sollte die Details der Abfrage der Datenbank abstrahieren. Weitere Manipulationen durch die Benutzer Ihrer Datenzugriffsschicht (Count
, Any
, First
usw.) sind in Ordnung. Da Sie bereits eine List<Product>
zurückgeben, haben Sie Zugriff auf die List.Count
-Eigenschaft, sodass es für Anrufer einfach ist, darauf zuzugreifen.
Angesichts all das, ich würde Ihre ProductDa
Klasse ändern, wie
folgt
public class ProductDa
{
//CRUD operations using Dapper
public List<Product> GetAllElements();
//query database using Dapper to get all the elements where Value == value
public List<Product> GetAllElementsWithValue(int value);
}
und verbrauchen die Klasse wie folgt die Anzahl der Product
s erhalten zurückgegeben:
var dataAccess = new ProductDa();
var threeValuedItems = dataAccess.GetAllElementsWithValue(3);
int numberOfItems = threeValuedItems.Count;
oder setzen prägnanter :
var dataAccess = new ProductDa();
var numberOfItemsWithValueThree = dataAccess.GetAllElementsWithValue(3).Count;
Was ist, wenn ich diese LinQ viele Male verwenden muss? Ist es nicht besser, es nur an einem Ort zu haben, damit ich es auch testen kann? – SilentRage47
Repository ist ein Teil von DAL also "Repository statt DAL" nicht sehr genauen Satz. Außerdem könnte ReturnCountValue eine Methode für das Repository sein. –
@MaximKosov Sie haben Recht. Ich würde gerne ein "generisches" Repository erzählen. –