Was bedeutet eigentlich „Geschäftslogik“, wenn nicht „sämtlicher Code von Drittanbietern“?

25

Ich habe viele Leute bei der Arbeit und im Internet über Geschäftslogik reden hören, und ich habe auf dieser Website mehrere Fragen dazu gelesen, aber der Begriff macht für mich immer noch keinen Sinn. Zum Beispiel sind hier einige (paraphrasierte) Aussagen, die ich oft sehe:

  • "Die Geschäftslogik ist der Teil Ihres Programms, der die tatsächlichen Geschäftsregeln codiert." Die meisten Definitionen, die ich gelesen habe, sind zirkuläre.

  • "Geschäftslogik ist alles, was für Ihre spezielle Anwendung einzigartig ist." Ich verstehe nicht, wie sich dies von "Ihre spezielle Anwendung ist nichts anderes als Geschäftslogik" unterscheidet, es sei denn, wir haben versehentlich einen Radsatz neu erfunden, für den wir vorhandene Software von Drittanbietern hätten verwenden können. Daher der Fragentitel.

  • "Über Ihrer Datenzugriffsebene und unter Ihrer GUI-Ebene sollte sich eine Geschäftslogikebene befinden." In dem Code, den ich schreibe, müssen die Datenbankzugriffsberechtigten wissen, auf welche Daten sie zugreifen sollen, und der UI-Code muss viel darüber wissen, was er anzeigt, damit er richtig angezeigt wird. Dazwischen gibt es nichts zu tun Diese beiden anderen Orte als das Weiterleiten von Datenblobs zwischen Client und Server. Was soll eigentlich in eine Business-Logik-Schicht aufgenommen werden?

  • "Geschäftslogik sollte von Präsentationslogik getrennt sein." Die meisten Anfragen nach Funktionen betreffen die Änderung der Präsentationslogik aus geschäftlichen Gründen. Wenn eine der Geschäftsregeln darin besteht, die Kurse von US-Staatsanleihen standardmäßig in der 32. Notation anzuzeigen (und gleichzeitig dem Benutzer eine Benutzeroberfläche zur Konfiguration bereitzustellen), muss die Präsentationslogik mindestens wissen, dass diese Regel vorhanden ist, wenn sie nicht vollständig implementiert ist. Außerdem scheint es, als ob ein großer Teil des UX-Designs darin besteht, dem Benutzer zu helfen, die Geschäftsregeln zu verstehen, die unsere Software zu implementieren versucht.

Ist es möglich, dass ich in einem Team bin, das nur Geschäftslogik betreibt und die gesamte Nicht-Geschäftslogik von anderen Teams ausgeführt wird? Oder ist das gesamte Konzept der "Geschäftslogik" als eigenständige Einheit nur für bestimmte Anwendungen oder Architekturen anwendbar?

So konkretisieren Sie die Antworten: Stellen Sie sich vor, Sie müssen die Domino's Pizza-App erneut implementieren. Was ist die Geschäftslogik und was ist die Nicht-Geschäftslogik dieser App? Und wie wäre es möglich, diese Geschäftslogik zur Bestellung von Pizza in eine eigene "Codeschicht" zu integrieren, ohne dass die meisten Pizzainformationen in die Datenzugriffs- und Präsentationsschichten gelangen?

Update: Ich bin zu dem Schluss gekommen, dass mein Team wahrscheinlich 90% UI-Code verwendet und die meisten - aber nicht alle - der von Ihnen als Geschäftslogik bezeichneten Informationen von anderen Teams oder Unternehmen stammen. Grundsätzlich ist unsere Anwendung für die ÜberwachungFinanzdaten und fast alle Funktionen bieten dem Benutzer die Möglichkeit, anzupassen, welche Daten angezeigt und wie sie angezeigt werden. Es findet kein Kauf oder Verkauf statt (obwohl wir dies in andere Apps unseres Unternehmens integrieren), und die tatsächlichen Daten werden von zahlreichen externen Quellen geliefert. Wir erlauben Benutzern jedoch, Kopien ihrer "Monitore" an andere Benutzer zu senden, sodass die Details, wie wir damit umgehen, wahrscheinlich als Geschäftslogik gelten. Es gibt tatsächlich eine mobile App, die derzeit mit einigen unserer Backend-Codes kommuniziert, und ich weiß genau, welchen Teil unseres Frontend-Codes ich in einer idealen Welt (im Grunde genommen das M in unserer Quasi-MVC) mit unserer Benutzeroberfläche teilen möchte Ich schätze, das ist die BLL für uns.

Ich akzeptiere die Antwort von user61852, da sie mir ein viel konkreteres Verständnis darüber gab, was "Geschäftslogik" tut und worauf es nicht ankommt.

Ixrec
quelle
1
Sie kehrten das gesamte Gerüst, die Infrastruktur, das Kesselschild und den Bibliothekscode unter den Teppich der "Rad-Neuerfindung", aber das ist tatsächlich ein gutes Stück Code, und nicht alles könnte vernünftigerweise Code von Drittanbietern sein. Vielleicht ist es nicht nur für Ihr Produkt, sondern auch für Ihr Produkt und drei konkurrierende Produkte. Vielleicht haben Sie komische Anforderungen, die bestehende Lösungen ausschließen. Möglicherweise sind vorhandene Lösungen aus technischen Gründen für Sie nicht geeignet (z. B. um die Leistungsziele nicht zu erreichen - dies ist ein häufiger Grund, um grundlegende Daten, die in der Spieleentwicklung strukturiert sind, neu zu erfinden).
Für uns werden die Infrastruktur, der Bibliothekscode und das Gerüst meistens von anderen Teams oder Drittanbietern gewartet (obwohl das Boilerplate gleichmäßig über alle Bereiche verteilt ist). Vielleicht ist es also so einfach, wie ich im Team bin, das die Benutzeroberfläche / Geschäftslogik durchführt.
Ixrec
8
Wenn Sie mehr als 50 US-Dollar bestellen, erhalten Sie kostenlos mit Käse überzogene Grissini.
kdgregory
1
@ raptortech97 Er / sie sagt, dass "wenn Sie mehr als 50 US-Dollar bestellen, bekommen Sie mit Käse überzogene Grissini" Geschäftslogik ist.
user253751
"Wenn eine der Geschäftsregeln darin besteht, die Kurse von US-Staatsanleihen standardmäßig in der 32. Notation anzuzeigen (und gleichzeitig dem Benutzer eine Benutzeroberfläche zur Konfiguration bereitzustellen), muss die Präsentationslogik mindestens wissen, dass diese Regel existiert." und einige würden sagen, sollte nicht. Die Benutzeroberfläche muss möglicherweise nur über eine Bezeichnung / ein Textfeld / ein Widget verfügen, um die Zeichenfolge anzuzeigen, die die Geschäftslogik (oder wahrscheinlich das Modell, aber ...) an sie übergeben hat.
Joshua Drake

Antworten:

27

Ich gebe Ihnen einige Tipps zu CRUD- Anwendungen, da ich nicht viel Erfahrung mit Spielen oder grafisch intensiven Apps habe:

  • Die Geschäftslogik beinhaltet normalerweise Regeln, die der Geschäftsinhaber über Jahre hinweg gelernt oder entschieden hat, wie zum Beispiel: "Neue Kredite ablehnen, wenn der Kunde die letzte noch nicht bezahlt hat" oder "Wir verkaufen kein Frühstück nach 11 uhr " oder " montags und dienstags können kunden zwei pizza zum preis von einer "kaufen .
  • Natürlich muss die Präsentationsschicht eine Nachricht anzeigen, die die Verfügbarkeit eines Rabatts oder den Grund für die Ablehnung eines Kredits angibt, aber eine solche Schicht entscheidet nicht über diese Dinge, sondern kommuniziert dem Benutzer nur etwas, was unter der Haube passiert ist.
  • Die Geschäftslogik beinhaltet normalerweise einen Workflow , zum Beispiel: "Dieser Artikel muss innerhalb von 3 Arbeitstagen von einem Manager freigegeben oder in eine Informationsanforderungsphase versetzt werden. Wenn der Kunde die erforderlichen Dokumente nicht eingereicht hat, wird der Artikel abgelehnt." .
  • Die Präsentationsebene behandelt normalerweise nicht diese Art von Workflow, sondern spiegelt nur den Status des Workflows wider.
  • Außerdem ist die Datenzugriffsschicht normalerweise unkompliziert, da Entscheidungen bereits von der Geschäftslogik getroffen wurden. Diese Ebene ist betroffen, wenn Sie sich zum Beispiel für die Migration Ihrer Daten von MS SQL Server nach Oracle entscheiden
  • Es ist wahr, dass die grafische Benutzeroberfläche manchmal eine Überprüfung durchführt, um Aufrufe an den Server zu vermeiden. Dies sollte jedoch mit Bedacht erfolgen, da sich sonst eine Menge Geschäftslogik in dieser Ebene befindet.
  • Ein Großteil Ihrer Verwirrung ist möglicherweise auf die Tatsache zurückzuführen, dass in Ihrer Anwendung keine Trennung von Bedenken vorliegt und Sie effektiv zu viel Geschäftslogik in der Präsentationsebene haben. Die Tatsache, dass Sie (fälschlicherweise) Geschäftslogik in Ihrer Anwendungs- oder Datenzugriffsschicht haben, ändert nichts an der Tatsache, dass es sich um eine Geschäftslogik handelt.
  • Das Anzeigen von Entfernungen im metrischen System anstelle von Meilen / Yards / Fuß ist keine Präsentationslogik, sondern eine Geschäftslogik . Die Business-Schicht muss Daten in den erforderlichen Einheiten zurückgeben und der Präsentationsschicht mitteilen, mit welchen Einheiten sie arbeitet, damit die entsprechenden Beschriftungen angezeigt werden. Dies ist jedoch auf jeden Fall eine Angelegenheit der Business-Logik.
  • Die Geschäftslogik sollte nicht durch die Tatsache beeinträchtigt werden , dass Sie jetzt Oracle anstelle von Postgres verwenden, oder durch die Tatsache, dass das Unternehmen das Logo oder das Stylesheet geändert hat.
  • Geschäftsregeln existieren unabhängig davon, ob Sie sie durch Schreiben einer App automatisieren oder nicht . Sie können auch dann durchgesetzt werden, wenn das Unternehmen eine Low-Tech-Lösung wie Stift und Papier verwendet.
  • Wenn Sie eine mobile Version Ihrer Desktop-App oder eine Webversion haben , hat jede dieser Versionen eine andere Präsentationsebene , aber (hoffentlich) dieselbe Business-Ebene.
Tulains Córdova
quelle
5

Es hört sich so an, als ob sich der Großteil Ihrer Arbeit in der Benutzeroberfläche befindet. Das Ändern des Anzeigeformats aus geschäftlichen Gründen impliziert keine Geschäftslogik. Die Änderung ist eine Änderung der Ansichtslogik.

In der Lage zu sein, das Format zu ändern, impliziert eine gewisse Geschäftslogik, die möglicherweise die Persistenz der Präferenz beinhaltet.

Das Format eines Cookies beizubehalten, könnte auch in der Ansichtsebene implementiert werden.

Dies könnte jedoch auf MVC-Weise implementiert werden. (Einige Modelle implementieren die Ansicht als eigene MVC, die Präferenzen verarbeiten kann.)

  • Die Präferenz des Benutzers könnte durch das Modell (Datenbank / Cookie) gespeichert werden.
  • Der Controller würde auf Formatanforderungen reagieren, indem er die Präferenzen des Benutzers im Modell ändert.
  • Die Ansicht würde sich an die Vorlieben des Benutzers anpassen. Die Einstellung kann vom Modell angefordert oder vom Controller bereitgestellt werden.

Machen Sie eine fundierte Vermutung über Ihre Bewerbung.

  • Es gibt ein Modell, das die verfügbaren Anleihen und deren Preisdaten enthält.
  • In einer Ansicht kann der Benutzer verschiedene Aktionen anzeigen: Nach Anleihen suchen, Preise anzeigen, Renditen vergleichen, Aufträge entgegennehmen und die vom Geschäftsmodell als Antwort auf die Anforderung zurückgegebenen Ergebnisse anzeigen.
  • Die Geschäftslogik behandelt Dinge wie:

    • Durchführen einer Suche und Bereitstellen, dass die Ansicht angezeigt wird.
    • Ermitteln der Preise für eine Anleihe und Bereitstellen der anzuzeigenden Ansicht.
    • Vergleichen von Erträgen und Bereitstellen von Daten für die Ansicht.
    • Bestellungen bearbeiten und im Modell ablegen.

Wenn dies richtig gemacht wird, sollte es möglich sein, mehrere Ansichtskomponenten bereitzustellen, ohne das Modell oder die Geschäftslogik zu ändern. Wenn das aktuelle Design beispielsweise eine Website ist, verwendet ein neuer Ansichtsserver für ein iPhone oder eine Android-Anwendung das vorhandene Modell und die vorhandene Geschäftslogik. Dies kann neue Geschäftsfunktionen einführen, um Push-Benachrichtigungen bereitzustellen, wenn ein Auftrag ausgeführt wird, was möglicherweise Änderungen an mehreren Ebenen erfordert.

Diese Aufteilung ermöglicht die Trennung von Bedenken.

  • Die vom Modell dargestellte Datenschicht ist in der Regel relativ stabil.
  • Auf der Business-Ebene werden Geschäftsentscheidungen getroffen: Wird / kann die Anfrage erfüllt werden? Wurden alle erforderlichen Daten eingeholt? Ist der Benutzer berechtigt? Gibt es rote Fahnen bei der Transaktion?
  • Die Ansichtsebene ist tendenziell weniger stabil, und es kann mehr als eine geben. Hier befindet sich das Erscheinungsbild der Anwendung. Es ist möglich, eine Anwendung komplett neu zu häuten, ohne die anderen Schichten zu verändern.
BillThor
quelle