Ich habe einige Fragen nach dem Lesen eines Artikels namens %code% ( Ссылка ).
Zum Beispiel habe ich eine ASP.NET MVC-Anwendung. In meiner Anwendung habe ich einige Entitäten (Modelle), Repositories, UnitOfWork und DbContext. Und einige Ansichten und Controller.
Wie teilt man sie gemäß einem Artikel oben in Schichten auf?
Soweit ich weiß, befinden sich Views und (möglicherweise) Controller in einer Präsentationsschicht. Entitäten (Modelle) in Business Layer und Repositories, UnitOfWork und DbContext in Data Layer.
Bin ich richtig oder falsch? Ich bin mir sehr, sehr unsicher.
Vielen Dank im Voraus!
Wie die Ebenen getrennt werden, hängt vom Umfang Ihrer Anwendung ab. Für einen kleinen Bereich können Bereiche ausreichen. Für ein größeres Projekt oder ein Projekt, das möglicherweise groß wird, sollten Sie separate Lösungen für jede Ebene erstellen. Dies wird als n-Tier-Ansatz bezeichnet und ist zu sehen, wenn man sich das ausgezeichnete Beispiel in Ссылка ansieht.
Das Repository vermittelt zwischen der Datenquellenebene und den Business-Schichten der Anwendung
Der DbContext Stellt eine Kombination der Unit-Of-Work- und Repository-Patterns . Wenn Sie also ein Repository und eine Arbeitseinheit darüber implementieren, können Sie Folgendes in Erwägung ziehen: Begrenzen Sie Ihre Abstraktionen . (Dieser letzte Punkt trifft möglicherweise nicht in Ihrem Fall zu, könnte ich nicht sagen, ohne mehr über Ihr Design zu wissen).
Ansichten und Controller sollten sich in der Präsentationsebene befinden. Ihre Modelle sollten sich auch in der Präsentationsebene befinden. Modelle spiegeln ein Ansichtsmodell wider, das nur für die Präsentation verwendet wird. Entitäten sollten Daten darstellen und nicht an die View gesendet werden. In der späteren Präsentation sollten die Modelle von den Entitäten ausgefüllt werden. Sie haben Recht, dass Ihr DbContext und UnitOfWork in der Datenschicht sein sollte.
Entity Framework-Entitäten (zusammen mit dem Framework) sind Ihre Datenschicht. In vielen Anwendungen werden sie auch Teil Ihrer Business-Schicht - und es ist fraglich, ob das gut ist oder nicht (ich persönlich mag das nicht, aber wenn Sie es mit dem Repository-Modell abstrahieren, gibt es ein gutes Argument, dass Sie verlieren einige der Vorteile von EF).
Abhängig davon, wie Sie Ihren Code trennen (und es klingt, als würden Sie das Repository-Muster verwenden), verfügen Sie möglicherweise über Repositories mit Geschäftslogik oder über eine Services-Schicht (meine bevorzugte Einstellung für 3-Tier-Anwendungen) Logik (meistens) passiert.
Ich würde argumentieren, dass Sie sowohl View Models als auch einen Teil Ihres Präsentationsmodells betrachten sollten. Wenn Sie jedoch MVC und Datenanmerkungen (die für diesen Job hervorragend sind) verwenden, um Ihr Modell zu validieren, haben Sie gerade eine Menge angehäuft der Geschäftslogik in ihnen.
Der wichtigste Ort, an dem sich Business-Logik nicht einschleichen kann, ist Ihre Präsentationsebene und vor allem Ihre Ansichten und Controller. Der Ansatz, wie Sie den Rest Ihrer Anwendung strukturieren, hängt stark von dem von Ihnen gewählten Framework, der Größe Ihrer Anwendung und der Bereitstellungsstruktur der Anwendung ab.
Um so klar wie möglich zu sein, ist dies das, was ich mache *:
Ansichten & lt; - Nur Präsentationsschicht
Controller & lt; - Nur Präsentationsschicht (kann in einigen Fällen zu leicht "fettem" Controller führen, z. B. Anmeldung bei .NET-Mitgliedschaft)
Modelle anzeigen & lt; - Präsentationsebene, aber wenn hier Prüfungen durchgeführt werden, werden häufig auch Geschäftsregeln getestet.
Serviceebene & lt; - Geschäftslayer, falls verwendet
Repositories & lt; - Kann nur die Datenebene oder eine Mischung aus Business-Ebene sein. Wenn Sie das Repository-Muster verwenden, versuchen Sie, Ihre DbSets nicht direkt verfügbar zu machen, da dies die Abstraktion, die Sie versuchen zu verhindern, sofort zunichtemacht (mögliche Ausnahmen dafür, z. B. - .Net-Mitgliedschaft)
Entitäten & lt; - Datenschicht, möglicherweise auch mit Geschäftslogik, abhängig davon, wie Sie Ihre Anwendung strukturieren.
* Nicht als autoritativ gelten
Ich habe einige Fragen nach dem Lesen eines Artikels namens Layered Application Guidelines
( Ссылка ).
Zum Beispiel habe ich eine ASP.NET MVC-Anwendung. In meiner Anwendung habe ich einige Entitäten (Modelle), Repositories, UnitOfWork und DbContext. Und einige Ansichten und Controller.
Wie teilt man sie gemäß einem Artikel oben in Schichten auf?
Soweit ich weiß, befinden sich Views und (möglicherweise) Controller in einer Präsentationsschicht. Entitäten (Modelle) in Business Layer und Repositories, UnitOfWork und DbContext in Data Layer.
Bin ich richtig oder falsch? Ich bin mir sehr, sehr unsicher.
Vielen Dank im Voraus!
Ansichten und Controller sollten sich in der Präsentationsebene befinden. Ihre Modelle sollten sich auch in der Präsentationsebene befinden. Modelle spiegeln ein Ansichtsmodell wider, das nur für die Präsentation verwendet wird. Entitäten sollten Daten darstellen und nicht an die View gesendet werden. In der späteren Präsentation sollten die Modelle von den Entitäten ausgefüllt werden. Sie haben Recht, dass Ihr DbContext und UnitOfWork in der Datenschicht sein sollte.
Wie die Ebenen getrennt werden, hängt vom Umfang Ihrer Anwendung ab. Für einen kleinen Bereich können Bereiche ausreichen. Für ein größeres Projekt oder ein Projekt, das möglicherweise groß wird, sollten Sie separate Lösungen für jede Ebene erstellen. Dies wird als n-Tier-Ansatz bezeichnet und ist zu sehen, wenn man sich das ausgezeichnete Beispiel in Ссылка ansieht.
Das Repository vermittelt zwischen der Datenquellenebene und den Business-Schichten der Anwendung
Der DbContext Stellt eine Kombination der Unit-Of-Work- und Repository-Patterns . Wenn Sie also ein Repository und eine Arbeitseinheit darüber implementieren, können Sie Folgendes in Erwägung ziehen: Begrenzen Sie Ihre Abstraktionen . (Dieser letzte Punkt trifft möglicherweise nicht in Ihrem Fall zu, könnte ich nicht sagen, ohne mehr über Ihr Design zu wissen).
Entity Framework-Entitäten (zusammen mit dem Framework) sind Ihre Datenschicht. In vielen Anwendungen werden sie auch Teil Ihrer Business-Schicht - und es ist fraglich, ob das gut ist oder nicht (ich persönlich mag das nicht, aber wenn Sie es mit dem Repository-Modell abstrahieren, gibt es ein gutes Argument, dass Sie verlieren einige der Vorteile von EF).
Abhängig davon, wie Sie Ihren Code trennen (und es klingt, als würden Sie das Repository-Muster verwenden), verfügen Sie möglicherweise über Repositories mit Geschäftslogik oder über eine Services-Schicht (meine bevorzugte Einstellung für 3-Tier-Anwendungen) Logik (meistens) passiert.
Ich würde argumentieren, dass Sie sowohl View Models als auch einen Teil Ihres Präsentationsmodells betrachten sollten. Wenn Sie jedoch MVC und Datenanmerkungen (die für diesen Job hervorragend sind) verwenden, um Ihr Modell zu validieren, haben Sie gerade eine Menge angehäuft der Geschäftslogik in ihnen.
Der wichtigste Ort, an dem sich Business-Logik nicht einschleichen kann, ist Ihre Präsentationsebene und vor allem Ihre Ansichten und Controller. Der Ansatz, wie Sie den Rest Ihrer Anwendung strukturieren, hängt stark von dem von Ihnen gewählten Framework, der Größe Ihrer Anwendung und der Bereitstellungsstruktur der Anwendung ab.
Um so klar wie möglich zu sein, ist dies das, was ich mache *:
Ansichten & lt; - Nur Präsentationsschicht
Controller & lt; - Nur Präsentationsschicht (kann in einigen Fällen zu leicht "fettem" Controller führen, z. B. Anmeldung bei .NET-Mitgliedschaft)
Modelle anzeigen & lt; - Präsentationsebene, aber wenn hier Prüfungen durchgeführt werden, werden häufig auch Geschäftsregeln getestet.
Serviceebene & lt; - Geschäftslayer, falls verwendet
Repositories & lt; - Kann nur die Datenebene oder eine Mischung aus Business-Ebene sein. Wenn Sie das Repository-Muster verwenden, versuchen Sie, Ihre DbSets nicht direkt verfügbar zu machen, da dies die Abstraktion, die Sie versuchen zu verhindern, sofort zunichtemacht (mögliche Ausnahmen dafür, z. B. - .Net-Mitgliedschaft)
Entitäten & lt; - Datenschicht, möglicherweise auch mit Geschäftslogik, abhängig davon, wie Sie Ihre Anwendung strukturieren.
* Nicht als autoritativ gelten
Tags und Links asp.net-mvc entity-framework