Da diese Frage ziemlich subjektiv zu sein scheint, poste ich sie hier.
Lassen Sie uns sagen Sie Ihre eigene Version von ASP.NET MVC zu schreiben Stackoverflow verwendet wird , so gibt es Klassen , wie Question
, Answer
, User
usw. Da Sie faul, Sie beschlossen , Entity Framework zu verwenden. Alle oben genannten Klassen haben also Navigationseigenschaften: Question
kennt ihre Answer
s, Answer
weiß, User
wer sie gepostet hat usw.
Sie haben viele Bücher von Martin Fowler gelesen, daher werden Sie mit Sicherheit eine Service-Schicht haben, um die gesamte Geschäftslogik dort zu implementieren. Sie werden ASP.NET MVC nur für die Benutzeroberfläche und die Anwendungslogik verwenden.
Es gibt 2 Fragen:
- Werden Sie direkt Objekte aussetzen
Question
,Answer
und andere zu den Controllern? - Wirst du dasselbe für Ansichten tun?
Ich werde meiner Anwendung im Grunde weder eine REST-API zur Verfügung stellen, noch bin ich zu konservativ, um nur irgendwelche Befürchtungen zu haben wie "Hey, MY VIEW weiß, was das Question
ist, ich weiß nicht, ob es schlecht ist oder nicht." Ich mag es einfach nicht! ".
Ich bin besonders neugierig auf den Fall, dass die Question
Klasse ein Feld wie hat TimePosted
und Sie Ihre PostNewQuestion
Ansicht an diese Klasse binden . Ich weiß, dass für den Fall, dass ich dieses Feld nicht an ein Steuerelement auf der Seite binde, es nicht veröffentlicht wird. Daher werde ich dieses Feld auf setzen, null
wenn ich das Objekt auf meiner Controllerseite habe. Wird es als gut angesehen oder ist es eine schlechte Idee? 2 entgegengesetzte Ansätze, an die ich denke, sind "überall DTOs / ViewModels verwenden" und "wtf, weniger Klassen sind immer besser!"
Was halten Sie für einen richtigen Ansatz? (Ich weiß, dass es keine direkte Antwort gibt, daher lautet die Frage tatsächlich: "Was sollte man beachten, um zu entscheiden, ob die Verwendung von DTOs / ViewModels / Was ist sonst noch gut für die Architektur der App?")
Bitte beachten Sie auch, dass wir einen sehr vereinfachten Klon von Stackoverflow in Betracht ziehen, also:
- Es ist ein reines Webprojekt (wir werden die REST-API oder was auch immer nicht verfügbar machen)
- Es gibt Benutzer, Fragen, Antworten, Tags und Suchfunktionen (keine herausragende Geschäftslogik).
- Es gibt ungefähr 100 aktive Benutzer pro Tag (keine besonderen Leistungsanforderungen)
- Der Code sollte lesbar sein und es sollte keine Überraschungen oder Orte von besonderem Interesse geben, falls ein neues Mitglied dem Entwicklerteam beitritt.
Sie können auch Ihre Gedanken äußern, falls einer der ersten 3 Punkte geändert wird - "Der Kunde möchte jetzt, dass unser Service 10000 gleichzeitige Benutzer zulässt" oder "Wir müssen jetzt nur jedem einzelnen Benutzer erlauben, einmal pro 15 Minuten zu posten" usw.
Vielen Dank!