Ich erweitere (nicht sicher, ob es das richtige Wort hier ist) eine partielle Cart-Klasse, die im Linq to SQL-Datenbankmodell generiert wurde.Geschäftslogik im Konstruktor - C#/Linq zu Sql
Die Geschäftslogik ist, dass es nur einen Warenkorb pro Kunde geben kann. Wenn ein Kunde keinen Einkaufswagen hat, sollte er erstellt werden. Wenn ein Kunde einen Einkaufswagen hat, sollte er zurückgegeben werden.
Hier ist, was ich tue:
public partial class Cart
{
//the rest of the Cart class is in the .dbml file created by L2S
public Cart(int userId)
{
Cart c = GetCurrentCart(userId);
this.CartId = c.CartId ;
this.UserId = c.UserId;
}
public Cart GetCurrentCart(int userId)
{
Cart currentCart = new Cart();
// if cart exists - get it from DB
//if not - create it, save in DB, and get if right out
//all of this is done with Linq to SQL
return currentCart;
}
}
eine Methode aus dem Konstruktor aufrufen scheint einfach nicht richtig. Durchsetze ich die Geschäftslogik richtig?
guten Punkt. ist irgendetwas mit meinem Code falsch, abgesehen davon, dass es nicht DDD geschrieben wird? –
Ich denke, es ist interessant, dass Sie selbst mit dem Code, den Sie gepostet haben, unsicher waren, ob Datenbanksuchen im Konstruktor richtig ist. Obwohl es nicht das schlimmste Verbrechen ist, ist es ein bisschen ein Code-Geruch. Ich denke, das ist ein Fall, in dem deine Instinkte gut waren. –
Mit Code-Geruch, ich meine, es ist etwas, was Sie wahrscheinlich vermeiden möchten (wie Ihre Instinkte vorgeschlagen haben). Es ist also eine gute Idee, nach einem alternativen Design zu suchen (eines, das technisch sauberer ist, und das für die Problemdomäne mehr Sinn macht). –