Seufz.
Der breite Konsens wird nein sein; Die Business-Schicht und die Controller/Web-Schicht sollten anders gepflegt werden, da sie separate Anliegen sind.
Tatsache ist, Sie scheinen dies als eine "Reinheit vs. Realität" -Frage zu bezeichnen, die unglaublich kurzsichtig und leicht anstößig ist. Es widerspricht auch dem Punkt, die Frage zu stellen; Wenn Sie die präsentierten Meinungen nicht in Betracht ziehen, warum sollten Sie diese dann einholen?
Es ist wahr, dass etwas mehr Sorgfalt im Voraus erfordert mehr Aufwand, mehr Zeit und letztlich ein wenig mehr kosten kann. Es ist auch wahr, dass Sie möglicherweise keinen unmittelbaren Nutzen daraus ziehen können. Eine Fülle von Schluchtromanen, die mehrere Jahrzehnte lang von einer großen Anzahl von Programmierern geteilt wurden, legt jedoch nahe, dass Ihre so genannte "Reinheit", wenn möglich, den Schmerz in fünf Jahren reduziert. Meine Güte; Sie müssen wirklich knutschen und ein wenig Refactoring machen, und es ist nicht im entferntesten angenehm wegen all der Risse, durch die Ihre Verantwortlichkeiten sickern.
Eine etwas bessere Möglichkeit, sich die Schichten für eine Webanwendung vorzustellen, könnte die Darstellung, Interaktion, Geschäftsregeln und Daten sein; von oben nach unten. Ihre Daten sind die Datenbank, der Datenzugriff usw., und die Geschäftsregeln erzwingen zusätzliche Beschränkungen für diese Daten, verarbeiten Valutierungen, Berechnungen usw.Die Interaktion verzweigt dann zwischen der Darstellungsschicht (die im Grunde Ihre Benutzeroberfläche ist) und der Geschäftslogik, wobei die Anwendungsfälle ausgeführt werden, die Ihre Anwendung steuern.
Bis zu diesem Punkt ist die Benutzeroberfläche allesamt immateriell; Es spielt keine Rolle, ob der Benutzer z. B. Kundendaten in einer Befehlszeilenanwendung eingibt oder ein mehrseitiges Webformular mit in der Sitzung gespeicherten Daten navigiert. Nehmen wir an, Sie wählen das Letztere. kleben Sie ein Web-Front-End drauf. Jetzt geht es darum, relativ einfachen Code zu schreiben, um die angeforderten Daten abzurufen und sie dem Benutzer zu präsentieren. Der Punkt ist, Ihre Webanwendung; das Front-End, , das ist Ihre gesamte Benutzeroberfläche; Sitzungen und alle. Nur an dem Punkt, an dem Sie bereit sind zu sagen, "hey, lasst uns diese Kundendaten in die Datenbank stecken", rufen Sie diese ach so liebevoll gestalteten Service-Layer auf und geben jedes Bit an Information weiter, das Ihre Webanwendung hat verstaut; die Benutzereingabe, der Name des Benutzers, der die Änderung vornimmt; all dieser Mist. Und deine Service-Schicht geht damit um. Oder, alternativ, Hündinnen, weil Sie ein Pflichtfeld vergessen haben.
Da Sie die Dinge sauber getrennt haben, kann der Mut Ihrer Anwendung, wie andere vorgeschlagen haben, umgestaltet (oder "geborgt") werden, um in jeder anderen Anwendung zu verwenden, und die Serviceebene bleibt staatenlos, sauber. und bereit, mit den Dingen umzugehen. Und es macht Ihre Validierung, und so ist Ihre Validierung überall konsistent. Aber es weiß nicht, wer sich im Web-Frontend oder in der Konsolenanwendung oder der ausgeklügelten Rich-Client-Anwendung, die auf einem Terminal ausgeführt wird, angemeldet hat, und es ist auch egal, da dieses Detail nur für diese Anwendungen wichtig ist.
Müssen Sie eine neue Validierungsregel hinzufügen? Kein Problem; Sorgen Sie dafür, dass die Serviceschicht die Validierung durchführt, und sorgen Sie dafür, dass die Probleme der Benutzeroberfläche oben in der Kette weiter oben behandelt werden. Müssen Sie die Art und Weise ändern, wie etwas berechnet wird? Ändern Sie das auf der Business-Schicht. Nichts anderes muss beeinflusst werden.
Danke für alle Antworten. Das Hauptproblem, das Sie sehen, ist die Fähigkeit, die Business-Schicht bei Bedarf zu "wechseln". Meine App wird IMMER im Web laufen, daher wird die Sitzung IMMER relevant sein, bis die Sitzung veraltet ist, also ist das kein Problem. – sarsnake
also keine Unit-Tests? – Robert
Sie sagen, dass dies immer eine Webseite sein wird, ist ein Implementierungsdetail ... sollte im Design nicht berücksichtigt werden. – CSharpAtl