[JAVA] Wie man über Klassengestaltung (Division) in einem Geschäftssystem nachdenkt (1)

Es ist ein Thema, das ich noch erforsche, aber ich werde es aufschreiben, weil die Richtlinie festgelegt wurde und die Ergebnisse erzielt wurden. Für diejenigen, die es wissen, ist es "natürlich", also überspringen Sie den Artikel. Der Inhalt ist für junge bis mittlere Karriere. Ich hoffe, dass die Diskussion es weiter verbessern wird.

Annahme

  1. Java-App (C # ist in Ordnung, wenn es sich um eine objektorientierte Sprache handelt)
  2. Für Geschäftssysteme unabhängig von BtoC oder BtoB
  3. Beinhaltet Web-API usw. Kurz gesagt, Java-Batch usw. werden nicht behandelt.
  4. Die Programmierkenntnisse des Projektteams sind nicht so hoch.
  5. Stellen Sie sich ein Team vor, das viele SEs (nicht mehr Codierer) hat, die keine Fähigkeiten haben, obwohl die Kosten aufgrund der schädlichen Auswirkungen mehrerer Unteraufträge voll sind.

Was zu beachten ist

  1. Ich möchte eine Konfiguration haben, die flexibel auf Änderungen im Geschäft reagiert (Änderungen / Ergänzungen / Löschen von Anforderungen).
  2. Es wird in Zukunft kontinuierlich renoviert. Da jedoch die Wahrscheinlichkeit groß ist, dass sich die Mitglieder ändern, möchten wir die Lesbarkeit wichtig machen.
  3. Ich möchte keine zu schwierigen Theorien aufstellen, weil ich die Fähigkeiten der Projektmitglieder nicht erwarten kann. (Ich mag DDD nicht)

Ist es so ein Ort? Der Punkt ist: "Ich möchte Code schreiben, der leicht mit einfachem Code erweitert werden kann."

Fazit

Schreiben Sie eine kurze Schlussfolgerung. Teilen Sie die Klasse vertikal (prozedural) und horizontal (objektorientiert) entsprechend der Rolle. Es ist keine große Geschichte, aber wie man Controller / Service / Repository in Spring Boot aufteilt.

Konzept 1: Die Prämisse, dass das Geschäft einzigartig ist und der Mechanismus gemeinsam ist

Einfach ausgedrückt geht es bei der Systementwicklung häufig darum, das Geschäft eines Kunden zu verwalten. Es geht um Effizienz und Unternehmensgründung. Was zu diesem Zeitpunkt wichtig ist, ist ** Wenn Sie sich verschiedene Systeme ansehen, was sind die gemeinsamen Teile und die Teile, die nicht gemeinsam sind ** </ font>? Genau das steht in der Überschrift, und das Geschäft des Kunden selbst ist nicht üblich. Es besteht jedoch eine hohe Wahrscheinlichkeit, dass der Mechanismus, um dies zu erreichen, üblich ist.

Das Geschäft ist einzigartig

Wie viel sind beispielsweise die Verfahren gemeinsam, wenn man das System des internationalen Geldtransfergeschäfts von Banken und das Bestellgeschäft von Convenience-Stores betrachtet? Ist es nicht 0? Auf diese Weise ist das Geschäft völlig anders, wenn der Geschäftstyp unterschiedlich ist. Auch im selben internationalen Geldtransfergeschäft wird es anders sein, wenn die Bank dies tut und wenn die Wertpapierfirma dies tut. Selbst bei denselben Banken unterscheiden sich UFJ und Sumitomo (wenn das Geschäft dasselbe ist, kann es durch die Installation desselben Systems zu geringen Kosten realisiert werden). Mit anderen Worten, der Geschäftsteil kann grundsätzlich nicht wiederverwendet werden.

Der Mechanismus ist üblich

Selbst wenn das Geschäftssystem völlig anders ist, ist der darin verwendete Mechanismus normalerweise der gleiche. Dies bedeutet, dass Sie, wenn Sie Daten speichern möchten, LDAP oder SQL verwenden und wenn Sie eine Nachricht senden möchten, HTTP oder SOAP verwenden. Mit anderen Worten, Sie können sehen, dass der Teil des Mechanismus, z. B. das Speichern in der Datenbank oder das Senden der Anforderung an einen anderen Ort, häufig vorkommt (oder wiederverwendet wird). Wenn Sie sich auf eine Branche konzentrieren, entsprechen Sie möglicherweise dem Standard. Zum Beispiel wurde beschlossen, Swift Telegram für internationale Überweisungen zu verwenden, so dass der Mechanismus im Rahmen des internationalen Überweisungsgeschäfts anscheinend der gleiche ist.

Konzept 2: Akzeptieren Sie aus geschäftlichen Gründen doppelten Code

Gelegentlich gibt es Radikale, die überhaupt keinen doppelten Code zulassen und Code aufrufen können, der mehr als einmal als Methode angezeigt wird, aber (obwohl dies nicht so weit geht ...), wenn Sie eine Klasse oder Methode mit dieser Idee erstellen Es wird unmöglich, sich nach der Rolle zu trennen, und es wird ein chaotischer Code in Bezug auf Benennung und Funktionsteilung erstellt. Auch wenn es anfangs wunderschön durch Erweiterungen usw. unterteilt war, gibt es Fälle, in denen Sie nur einen kleinen Teil der geerbten Klasse ändern möchten, während Sie die Reparatur fortsetzen (im schlimmsten Fall zum Zeitpunkt der nächsten Reparatur). ファイル名 Selbst wenn eine solche Klasse zuerst erstellt und wunderschön aufgeteilt wird, wird AbstractClass2 erstellt und für die Verarbeitung doppelt vererbt, die sich in der nächsten Änderung nur teilweise unterscheidet. Es ist der Beginn der Hölle. ファイル名 Ich habe bis zu vierfache Vererbung gesehen.

In der Vergangenheit wurde gesagt, dass eindeutige Codes schön sind, aber in Fällen, in denen Mitglieder mit geringen Fähigkeiten häufig ersetzt werden, werden komplizierte Codes zu einem Gepäckstück. Der Code ist unverständlich und nicht wartbar. Was sollen wir dann tun? Denken Sie getrennt über Geschäft und Mechanismus nach, implementieren Sie den Geschäftsteil in jeder Klasse und standardisieren Sie den Mechanismusteil. Selbst wenn doppelter Code auftritt, wird der Geschäftsteil einzeln implementiert. Selbst wenn die meisten von ihnen häufig sind, ist die Reparatur einfacher. ファイル名 Methode1 wird wie folgt in der Business Class implementiert. Der Inhalt von Methode1 kann duplizierter Code sein, aber wir akzeptieren das Duplikat als ein anderes Geschäft. Selbst wenn die Anforderung besteht, dass Sie nur eine der Aufgaben ändern möchten, die zu Beginn gleich waren, können Sie sie korrigieren, indem Sie die Mindeständerungen vornehmen. Methode2 wird als allgemeiner Mechanismus in AbstractClass platziert.

Es wird etwas länger, also fahren wir mit dem nächsten Artikel fort.

Recommended Posts

Wie man über Klassengestaltung (Division) in einem Geschäftssystem nachdenkt (1)
Zuordnung zu einer Klasse mit einem Wertobjekt in How to My Batis
Dinge, über die Sie nachdenken sollten, wenn Sie sich für die Architektur eines neuen Systems entscheiden
So fügen Sie ein Video in Rails ein
So beheben Sie das Systemdatum in JUnit
So veröffentlichen Sie eine Bibliothek in jCenter
So erhalten Sie Keycloak-Anmeldeinformationen in der Interceptor-Klasse
So zeigen Sie eine Webseite in Java an
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So erhalten Sie eine Klasse von Element in Java
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So erstellen Sie ein Thema in Liferay 7 / DXP
So implementieren Sie eine ähnliche Funktion in Rails
So generieren Sie automatisch einen Konstruktor in Eclipse
So überprüfen Sie, ob eine Instanzvariable in einer Ruby-Klasse definiert ist
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
Über die Klassenteilung (Java)
So implementieren Sie eine nette Funktion in Ajax mit Rails
So erhalten Sie Informationen zu zugeordneten Tabellen in vielen-zu-vielen-Tabellen
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So erstellen Sie einen Daten-URI (base64) in Java
So starten Sie einen anderen Befehl in einem Ruby-Programm
So zeigen Sie eine Browser-Vorschau mit VS-Code an
Wie man denkt, wenn man plötzlich etwas über Generika versteht
[So fügen Sie ein Video mit Rails in haml ein]
So schreiben Sie eine Datumsvergleichssuche in Rails
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Wie schreibe ich einen Core Mod in Minecraft Forge 1.15.2
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
Speichern von Zeichenfolgen von ArrayList zu Zeichenfolge in Java (Personal)
So verschieben Sie eine andere Klasse mit einer Schaltflächenaktion einer anderen Klasse.
So wählen Sie ein bestimmtes Datum anhand des Codes im FS-Kalender aus
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
Überlegen Sie, wie Sie MVC in M und V unterteilen können
So simulieren Sie das Hochladen von Post-Object-Formularen in OSS in Java
So erstellen Sie ein Service Builder-Portlet in Liferay 7 / DXP
So richten Sie einen Proxy mit Authentifizierung in Feign ein
Eine Geschichte über Missverständnisse im Umgang mit Java-Scannern (Memo)
Wie hinterlasse ich einen Kommentar?
Verwendung der Java-Klasse
So fügen Sie ein Video ein
So erstellen Sie eine Methode
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So implementieren Sie einen Job, der die Java-API in JobScheduler verwendet
Behandeln Sie die Geschäftslogik für eine Reihe von Entitäten in einer Java-Klasse
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
So bedienen Sie automatisch einen in Java unter Windows erstellten Bildschirm
Erstellen einer Klasse für eine Matrix in Java Teil 2 - Über eine Matrix (lineare Algebra) -
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
Speichern der im Textbereich eingegebenen Informationen in einer Variablen in der Methode
So geben Sie eine Liste von Zeichenfolgen in JSF als durch Kommas getrennte Zeichenfolgen aus