[JAVA] Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]

Ist dies der richtige Weg, um die Flüssigkeitsschnittstelle zu verwenden?

An einem Standort hatte ich eine Person mit langjähriger Java-Erfahrung, die mir bei einem C # -Projekt half. Ein Teil des Codes verwendete eine flüssige Schnittstelle, aber ich war nicht ganz überzeugt. Ich habe versucht, einen Beispielcode zu erstellen, indem ich mich auf den damaligen Code bezog.

Technische Daten) Aktualisieren Sie die Datenbank, indem Sie die Bildschirmwerte mit den aus der Datenbank erhaltenen Ergebnissen zusammenführen.

  1. In der Datenbank befinden sich Header1, Header2 und Header3, die alle aktualisiert werden müssen.
  2. Der Wert kann auf dem Bildschirm bearbeitet werden. Der Zeitpunkt für das Zusammenführen ist, wenn auf die Registrierungsschaltfläche geklickt wird.
        /**Hauptverarbeitung**/
        private Dao _dao = new Dao();

        public void Main()
        {
            //Rufen Sie die aktuellen Informationen aus der Datenbank ab.
            var param = new UpdateParameter(_dao)
                            .SetHeader(1)
                            .SetHeader2("a")
                            .SetHeader3(2);

            //Reflektieren Sie die Informationen auf dem Bildschirm.
            SetValueFromView(param);

            //Aktualisieren Sie die Datenbank.
            _dao.Update(param);
        }

        private void SetValueFromView(UpdateParameter param)
        {
            //Header1 des Parameters, der den Wert des Bildschirms erhalten hat,2,Reflektiere in 3.
            //Code weggelassen
        }

        /**Parameterklasse, die das DTO der DB-Aktualisierungstabelle zusammenfasst**/
        public class UpdateParameter
        {
            public Header Header { get; private set; }
            public Header2 Header2 { get; private set; }
            public Header3 Header3 { get; private set; }

            private readonly Dao _dao = null;

            public UpdateParameter(Dao dao)
            {
                _dao = dao;
            }

            public UpdateParameter SetHeader(int id)
            {
                Header = _dao.GetHeader(id);
                return this;
            }

            public UpdateParameter SetHeader2(string code)
            {
                Header2 = _dao.GetHeader2(code);
                return this;
            }

            public UpdateParameter SetHeader3(int id)
            {
                Header3 = _dao.GetHeader3(id);
                return this;
            }
        }

        /** Header1,2,3 DTO**/
        public class Header
        {
            public int Id { get; set; }
        }

        public class Header2
        {
            public string Code { get; set; }
        }

        public class Header3
        {
            public int Id { get; set; }
        }

        /**Dao zur Datenerfassung und -aktualisierung**/
        public class Dao
        {
            public Header GetHeader(int id)
            {
                //Header abrufen
                return new Header() { Id = id };
            }

            public Header2 GetHeader2(string code)
            {
                //Holen Sie sich Header 2
                return new Header2() { Code = code };
            }

            public Header3 GetHeader3(int id)
            {
                //Holen Sie sich Header 3
                return new Header3() { Id = id };
            }

            public void Update(UpdateParameter param)
            {
                //Führen Sie die DB-Aktualisierungsverarbeitung aus. Code weggelassen
            }
        }
java
    private Dao dao = new Dao();

    public void main() {
        //Rufen Sie die aktuellen Informationen aus der Datenbank ab.
        UpdateParameter param = new UpdateParameter(dao)
                .setHeader(1)
                .setHeader2("a")
                .setHeader3(2);

        //Reflektieren Sie die Informationen auf dem Bildschirm.
        setValueFromView(param);

        //Aktualisieren Sie die Datenbank.
        dao.update(param);
    }

    private void setValueFromView(UpdateParameter param) {
        //Header1 des Parameters, der den Wert des Bildschirms erhalten hat,2,Reflektiere in 3.
        //Code weggelassen
    }

    public class UpdateParameter {
        private Header header = null;
        private Header2 header2 = null;
        private Header3 header3 = null;

        private final Dao dao;

        public UpdateParameter(Dao dao) {
            this.dao = dao;
        }

        public UpdateParameter setHeader(int id) {
            this.header = dao.getHeader(id);
            return this;
        }

        public UpdateParameter setHeader2(String code) {
            this.header2 = dao.getHeader2(code);
            return this;
        }

        public UpdateParameter setHeader3(int id) {
            this.header3 = dao.getHeader3(id);
            return this;
        }

        public Header getHeader() {
            return header;
        }

        public Header2 getHeader2() {
            return header2;
        }

        public Header3 getHeader3() {
            return header3;
        }

    }

    /** Header1,2,3 DTO**/
    public class Header {
        private int id;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }
    }

    public class Header2 {
        private String Code;

        public String getCode() {
            return Code;
        }

        public void setCode(String code) {
            Code = code;
        }

    }

    public class Header3 {
        private int Id;

        public int getId() {
            return Id;
        }

        public void setId(int id) {
            Id = id;
        }
    }

    /**Dao zur Datenerfassung und -aktualisierung**/
    public class Dao {
        public Header getHeader(int id) {
            //Header abrufen
            Header header = new Header();
            header.setId(id);
            return header;
        }

        public Header2 getHeader2(String code) {
            //Holen Sie sich Header 2
            Header2 header2 = new Header2();
            header2.setCode(code);
            return header2;
        }

        public Header3 getHeader3(int id) {
            //Holen Sie sich Header 3
            Header3 header3 = new Header3();
            header3.setId(id);
            return header3;
        }

        public void update(UpdateParameter param) {
            //Führen Sie die DB-Aktualisierungsverarbeitung aus. Code weggelassen
        }
    }

Was mich interessiert hat

Es scheint, dass die Schnittstelle so ist, dass UpdateParameter fließt, aber dieser Code hat die folgenden Probleme.

  1. UpdateParameter bezieht sich auf Dao.
  2. Es gibt mehrere Stellen, die behoben werden müssen, wenn die Anzahl der Tabellen zunimmt.
  3. SetHeader1 bis SetHeader3 müssen aufgerufen werden.

Sie können den Vorteil einer fließenden Schnittstelle in einer Klasse wie StringBuilder sehen. Andererseits fühlt es sich seltsam an, es in einer Klasse zu verwenden, die nur einfache Informationen wie UpdateParameter enthält.

Versuchen Sie, es auf einen sicheren Code zu fixieren.

       /**Hauptverarbeitung**/
        private Dao _dao = new Dao();

        public void Main()
        {
            //Rufen Sie die aktuellen Informationen aus der Datenbank ab.
            var param = new UpdateParameter();
            //Abrufen von Daten aus der Datenbank im Hauptprozess.
            param.Header = _dao.GetHeader(1);
            param.Header2 = _dao.GetHeader2("a");
            param.Header3 = _dao.GetHeader3(2);

            //Reflektieren Sie die Informationen auf dem Bildschirm.
            SetValueFromView(param);

            //Aktualisieren Sie die Datenbank.
            _dao.Update(param);
        }

        private void SetValueFromView(UpdateParameter param)
        {
            //Header1 des Parameters, der den Wert des Bildschirms erhalten hat,2,Reflektiere in 3.
            //Code weggelassen
        }

        /**Parameterklasse, die das DTO der DB-Aktualisierungstabelle zusammenfasst**/
        public class UpdateParameter
        {
            public Header Header { get; set; }
            public Header2 Header2 { get; set; }
            public Header3 Header3 { get; set; }

            //Dao-Referenz entfernen
        }

        /** Header1,2,3 DTO**/
        public class Header
        {
            public int Id { get; set; }
        }

        public class Header2
        {
            public string Code { get; set; }
        }

        public class Header3
        {
            public int Id { get; set; }
        }

        /**Dao zur Datenerfassung und -aktualisierung**/
        public class Dao
        {
            public Header GetHeader(int id)
            {
                //Header abrufen
                return new Header() { Id = id };
            }

            public Header2 GetHeader2(string code)
            {
                //Holen Sie sich Header 2
                return new Header2() { Code = code };
            }

            public Header3 GetHeader3(int id)
            {
                //Holen Sie sich Header 3
                return new Header3() { Id = id };
            }

            public void Update(UpdateParameter param)
            {
                //Führen Sie die DB-Aktualisierungsverarbeitung aus. Code weggelassen
            }
        }

java
    private Dao dao = new Dao();

    public void main() {
        //Rufen Sie die aktuellen Informationen aus der Datenbank ab.
        UpdateParameter param = new UpdateParameter();
        //Abrufen von Daten aus der Datenbank im Hauptprozess.
        param.setHeader(dao.getHeader(1));
        param.setHeader2(dao.getHeader2("a"));
        param.setHeader3(dao.getHeader3(2));

        //Reflektieren Sie die Informationen auf dem Bildschirm.
        setValueFromView(param);

        //Aktualisieren Sie die Datenbank.
        dao.update(param);
    }

    private void setValueFromView(UpdateParameter param) {
        //Header1 des Parameters, der den Wert des Bildschirms erhalten hat,2,Reflektiere in 3.
        //Code weggelassen
    }

    public class UpdateParameter {
        private Header header = null;
        private Header2 header2 = null;
        private Header3 header3 = null;

        //Dao-Referenz entfernen

        public void setHeader(Header header) {
            this.header = header;
        }

        public void setHeader2(Header2 header2) {
            this.header2 = header2;
        }

        public void setHeader3(Header3 header3) {
            this.header3 = header3;
        }

        public Header getHeader() {
            return header;
        }

        public Header2 getHeader2() {
            return header2;
        }

        public Header3 getHeader3() {
            return header3;
        }

    }

    //Der folgende Code wird weggelassen

Ich habe gerade die Dao-Referenz von UpdateParameter gelöscht und die Datenbank auf der Hauptverarbeitungsseite erhalten, aber dieser Code ist überzeugend.

Zusammenfassung

Ich habe ungefähr ein Jahr Erfahrung in der Java-Entwicklung, daher frage ich mich, ob der im Beispiel gezeigte Code für Java normal ist. Was ist auch der Grund für die Verwendung einer Fluidschnittstelle, selbst wenn die unter "Was mich interessiert hat" beschriebenen Probleme unverändert bleiben.

[Vorheriger Artikel (Code-Sammlung, die ein wenig besorgniserregend ist)] (http://qiita.com/csharpisthebest/items/7d9d2c7e4da4b89488fd)

[Nächster Artikel (redundante Zuweisungsanweisung)] (http://qiita.com/csharpisthebest/items/f9ebc741e40037553d5b)

Inhaltsverzeichnis

Recommended Posts

Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Easy Null Check - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 6 [C # Refactoring-Beispiel]
Eine etwas besorgniserregende Codesammlung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 2 [C # Refactoring Sample]
Komplizierte bedingte Verzweigung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 1 [C # Refactoring-Beispiel]
Bool-Typ-Handling - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 7 [C # Refactoring-Beispiel]
Zu viele Funktionsargumente - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 8 [C # Refactoring-Beispiel]
Verschwenderische Verarbeitung von Sammlungen - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 5 [C # Refactoring Sample]
Ist es möglich, Funktionsaufrufe und bedingte Verzweigungen zu trennen? -Ich möchte eine gute Gelegenheit zum Schreiben von Code geben. 9 [C # Refactoring-Beispiel]
Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
7 Dinge, die du behalten sollst, damit es kein verdammter Code wird
Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
Ich möchte dem select-Attribut einen Klassennamen geben
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Ich möchte Apache Wicket 8 zusammenfassen, weil es eine gute Idee ist
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Ich möchte eine Webanwendung entwickeln!
Ich möchte eine ios.android App machen
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Ich habe ein Beispiel erstellt, wie ein Delegat in Swift UI 2.0 mit MapKit geschrieben wird
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten