Ich habe gelesen, wo Geschäftslogik in ASP.NET MVC Project zu setzen, und ich kann immer noch nicht klar in einigen Dingen. Insbesondere die Berechnungen oder Geschäftslogik ausführen, wenn die Daten von der Benutzeroberfläche kommen.In MVC wo Berechnungen durchzuführen, wenn Daten von UI kommen?
Ich habe ASP.NET MVC-Anwendung mit EF. Die Anwendung ist eine typische 3-Tier-Anwendung.
UI - has View Models
Domain (aka Service Layer) - has DTO classes
DAL - has EF entities
Jede Schicht hat ihre eigenen Klassen C# verwendet, um Daten zwischen den Schichten zu übertragen.
UI
Bezug auf Domain
Domain
und hat Bezug auf DAL
Die Geschäftslogik der Anwendung ist in Domain
(Service-Layer)
Typischerweise jede Art von Business-Logik/Berechnungen werden in Dienstschicht durchgeführt. Und das ist richtig, wenn die Daten von der Datenbank kommen.
Aber was ist, wenn die Daten von UI kommen?
Nehmen wir an, die Ansicht ist bereits mit mehreren Feldern gerendert. Im UI-Layer gibt es ein entsprechendes View-Modell. Ein Benutzer aktualisiert einige Felder und klickt auf eine Schaltfläche, die einen AJAX-POST zur Controller-Aktion macht. Der Server verfügt jetzt über ein gefülltes Ansichtsmodell, das von der Benutzeroberfläche stammt. Jetzt möchte ich einige Berechnungen durchführen und json Daten zurückgeben.
[HttpGet]
public ActionResult Index(int id)
{
MyViewModel model = _service.GetModel(id);
return View(model);
}
[HttpPost]
public ActionResult Calculate(MyViewModel model)
{
// preform calculations but where??
var differentmodel = PerformCalculations(model);
return Json(someDifferentmodel);
}
Da Domain
Schicht keinen Zugriff haben Modelle auf anzeigen i nicht MyViewModel
-Domain
passieren kann und dort die Berechnung tun.
Eine Möglichkeit sehe ich hier wie unten
public ActionResult Calculate(MyViewModel model)
{
1> Convert MyViewModel to DTO
2> pass DTO to service layer for calculations
3> get calculated DTO from service layer.
4> Convert DTO to differentViewModel
return Json(differentViewModel);
}
Es gibt viele zurück & hervor Abbildung, die unnötig erscheint.
Gibt es einen besseren Ansatz?
In Bezug auf die Design-Praxis, ist es in Ordnung, eine neue Schicht zwischen UI
und Domain
einzuführen, die sich sowohl auf UI
als auch auf Domain
bezieht. Diese neue Schicht ist verantwortlich für die Geschäftslogik/Berechnungen. Tatsächlich kann ich diese Ebene für Berechnungen verwenden, unabhängig davon, ob die Daten von der Benutzeroberfläche oder der Domäne stammen. Was wäre diese Schicht? (Ich weiß, technisch kann ich das tun, aber ich frage, ist es empfohlene Design-Praxis)
Dies ist nicht Berechnungen mit anderer Schicht geteilt. Aber es ist eine komplexe Steuerberechnungen. Und es beinhaltet mehrere Felder, die von UI kommen, um Ausgabefeld (e) zu berechnen, so dass passierendes Modell durchführbar scheint als einzelne Felder – LP13