Frage

Ich habe im Laufe der Jahre festgestellt, dass verschiedene Entwickler für unterschiedliche Kriterien haben, was in der Entwicklung eines n-Tier-System eine Reihe bildet, so war ich gespannt, was der Konsens hier bei Stackoverflow ist.

Sind separate logische Schichten ausreichend, nennen es einen separater Tier oder ausfahrbaren auf einem separaten Server (physisch oder virtuell) sein muss, um es eine separate Ebene zu nennen?

Lassen Sie mich Ausdruck der Frage ein wenig anders. Wenn der anrufMechanismus nur in Prozess sein kann, Gewinde lokaler oder Wohnung lokal, dann ist es möglich, zu behaupten, dass es zwei verschiedene Ebene ist abhängig davon, wie die Klassen organisiert sind, in Bibliotheken oder Pakete?

War es hilfreich?

Lösung

Für mich physische Ebene Teil des Systems bedeutet, entworfen , um auf verschiedene physische Maschine ausgeführt werden sollte. Ja, Sie können Ihre db Verbindungszeichenfolge auf einem anderen Server zu jedem Zeitpunkt, aber wenn Ihr DAL zu gesprächig ist, haben n + 1 und unbegrenzt Datensatz Probleme, als Netzwerk-Latenz Sie wirklich schnell töten.

logische Schicht, andererseits unterstützt Vorzüge der Trennung von Bereichen, Kohäsion und Kopplung. Streng ist es gar nicht in separate Baugruppe sein müssen - Namespace werden den Trick. Nur nicht Klassen rufen Sie wissen, dass Sie sollten nicht, NDepend helfen Ihnen.

Andere Tipps

Eine separate logische Schicht ist genug für mich ist es ein Tier zu nennen. Es muss nicht unbedingt auf einem separaten Server sein, aber die definierte Trennung von anderen Schichten sicherlich macht es möglich.

Als Beispiel verwendet, um wir zu haben, was ich ein 3-Tier-System nennen würde (db, dll, ASP-Seiten) auf einem einzigen Server ausgeführt wird. Durch einige Definitionen ist dies ein einziges Tier-System. Wir haben nun die Datenbank auf einem separaten Server ausgeführt wird, ist die einzige erforderliche Änderung eine Verbindungszeichenfolge war, aber jetzt wäre dies eine zweistufige Lösung sein?

Deshalb habe ich das Konzept einer Tier fühlen sich über die Fähigkeit, sie auf getrennten Maschinen eher zu laufen, als tatsächlich zu haben. Es scheint nur konsequenter zu mir.

  

Die Konzepte der Schicht und Tier sind   oft synonym verwendet. Jedoch,   ein recht häufiges Sicht   dass es tatsächlich ein Unterschied, und   dass eine Schicht ist eine logische Strukturierung   Mechanismus für die Elemente, die zu machen   bis die Software-Lösung, während ein Tier   ist eine physikalische Strukturierung Mechanismus   für die Systeminfrastruktur

Ref .

Ebene sind ein Mechanismus zur Minimierung der Kopplung; sie sind logisch. Tiers sind so konzipiert, um Leistung zu maximieren oder Sicherheitsrisiken zu negieren; sie sind physisch. Sie sind wirklich nicht sie gleich und ich bin mir nicht sicher, warum die Leute versuchen, sie austauschbar zu verwenden.

Die überwiegende Mehrheit der Web-Anwendungen sind 3-Tier standardmäßig (Browser, Webserver, Datenbankserver). Die Mehrheit der Intranet-Anwendungen sind 2-Tier (Client, DB-Server). Aber in jedem Fall baue ich eine UI-Ebene, eine Business-Schicht und eine Datenschicht. Sie haben Trennung von Bedenken und mir helfen, für Wartbarkeit meinen Code zu strukturieren. Auch in jedem Fall am Ende ich in der Regel, sie alle auf einem Feld bereitstellen; Web-Server oder Client-Workstation. So sind die Schichten und die Ebenen nicht einmal zusammenpassen.

Ich glaubte immer eine Stufe jede physikalische Trennung in einer Architektur ist, das heißt, eine Maschine. Ich fand, dass diese Jungs das gleiche denken in letzter Zeit, es ist ein sehr gutes Buch.

Aber das Denken auch nach den anderen Antworten zu lesen ich mit Garry einigen sich auf dass .

i mit Garry Shutler stimmen würde, aber hinzufügen, dass viele Ebene auch in einem einzigen Prozess / Thread oder sogar derselben Baugruppe bestehen könnten. wichtiger als die physikalische (Hardware, ausführbare Isolierung oder binär isolation) Trennung ist das Layout des Codes für den Entwickler (IMHO). wie in einer aspnet App: das gleiche könnte man dll haben alle drei Ebenen darin: Datenzugriff, Domäne und Präsentation

.

Ich würde sagen, dass die Definitionen werden gehämmert müssen. Ich denke, typischerweise aus einem Tier als eine logische Trennung von Funktionalität und Verantwortung, und eine Schicht als die Anforderung oder die Fähigkeit für eine physikalische Trennung. Einige Schichten können mehrere Ebenen haben und einige Stufen können Schichten umfassen. I verwendet typischerweise eine Service-Layer Ebene, die die Fähigkeit hat, eine physikalische Trennung bereitzustellen, falls erforderlich und / oder über die Konfiguration gewünscht wird.

Also, Follow-up-Frage / Kommentar. Wenn es eine Reihe von Logik (Geschäft oder auf andere Weise) ist in gespeicherten Prozeduren in Ihrer Datenbank, sollte das auch ein Tier in Betracht gezogen werden? Was passiert, wenn Sie Eigenschaften Ihres Datenbank-Engine wie Service Broker für Microsoft SQL Server verwendet? Das kann als mit zwei Ebenen selbst betrachtet werden.

Auch Hintergrunddienste und / oder Dämonen, sie sind eine separate Ebene und / oder Schicht oder gehören sie zu einem bestehenden?

Blick auf die Geschichte des Begriffs „Tier“ in der Computerbranche. Niemand sagte, 1-Tier-Computing auf Desktops / rw / Mainframes. Niemand sagte, 2-Tier-Computing während der Client-Server-Tage. 3-Tier wurde der architektonische Moniker für Client-Server-Middleware sowie dazwischen (Message Oriented Middleware und Transaktions Broker). Ich denke, n-Tier wurde mit einem anderen Begriff populär entlang „EAI - oder Enterprise Architecture Integration“. Es war genau die gleiche Idee wie serviceorientierte Architekturen, außer die meisten der Anbieter-Implementierungen entweder proprietäre waren, auf Standards basiert, aber sehr teuer, oder beides. Nach dem XML-RPC, SOAP und REST kommen sie es „Web Services“ aufrufen und dann die EAI Prinzip dahinter anwenden und kommen bis zu SOA - Service Oriented Architecture und Enterprise Service Bus.

Mein Punkt ist, dass keine dieser Bedingungen jede physische Trennung impliziert ... es immer um die logische Trennung von Funktionalität war. Es ist einfach so passiert, dass viele dieser logischen Anwendungsschichten wurden staatenlos sein, so konzipiert, dass sie konnten körperlich zum Zwecke der horizontalen Skalierbarkeit getrennt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top