Klasse, die ein Objekt aktualisiert

  • Ich habe eine Klasse, die ein Objekt aktualisiert. Die Klasse verwendet ein String id in ihrem Konstruktor und gibt die entsprechende Klasse basierend auf dem id zurück. Ich denke, dass diese beiden Methoden in ihre eigenen Klassen unterteilt werden sollten, da die Rückgabe eines Objekts, das auf einem String id basiert, wahrscheinlich an anderer Stelle in der Codebasis verwendet wird.

    habe ich in Betracht gezogen Hinzufügen der Funktionalität, die das zu aktualisierende Objekt in seine eigene statische Methode zurückgibt:

     ObjectToUpdate = Utils.getObjectToUpdate(id)
     

    Gibt es einen besseren Weg oder? ein Designmuster?

     UpdateContestantObj c = new UpdateContestantObj(childWithParentRatingsObject.getCoupleId());
    c.getContestantObj().setSortVal(singleScoringFM.getScore());
    c.persistContestant();
    
    public class UpdateContestantObj {
    
        private String id;
        private ContestantObj contestantToSave = null;
    
        public ContestantObj getContestantObj(){
            return this.contestantToSave;
        }
    
        public UpdateContestantObj(String id){
            this.id = id;
    
            SimpleSortingVector simpleSortingVector = (SimpleSortingVector)FutureContent.future.getContent(Constants.CONTESTANTS_DATA);
            Enumeration contestantsEnumeration = simpleSortingVector.elements();
    
            while(contestantsEnumeration.hasMoreElements()){
                final ContestantButtonField contestantButtonField = (ContestantButtonField)contestantsEnumeration.nextElement();
                if(contestantButtonField.getContestant().getId().equalsIgnoreCase(this.id)){
                    contestantToSave = contestantButtonField.getContestant();
                }
            }   
        }
    
        public void persistContestant(){
    
            contestantsStore.setContents(contestantToSave); 
            contestantsStore.commit();
    
        }
    }
     
    22 May 2014
    Jamal
1 answer
  • Es gibt kein Super-Design-Muster, das hier von Nutzen wäre, aber Sie könnten definitiv von einigen grundlegenden OO-Konzepten wie Kapselung und Einzelverantwortung profitieren.

    Für Anfänger Anstatt eine Reihe von Dienstprogrammmethoden zu erstellen, sollten Sie für jede Klasse eine statische Methode verwenden, z. B .:

     // inside the ContestantObj class
    public static ContestantObj fromID(string ID) {
       // code to retrieve ContestantObj 
    }
     

    Auf diese Weise ist jede Klasse dafür verantwortlich, sich selbst zu erstellen, was auch der Fall sein sollte (außerhalb der Fälle, in denen ein Builder oder eine abstrakte Factory erforderlich ist).

    Ihr UpdateContestantObj -Konstruktor sollte dies tun in einem ContestantObj. Es sollte sich nicht darum kümmern, wie das ContestantObj erstellt wird. Ein "Contestant Updater" sollte eine Maschine sein, die Contestants aufnimmt und Contestants ausgibt, die aktualisiert wurden.

    Außerdem sollte die Namenskonvention von ContestantObj einfach Contestant sein. Wir wissen, dass es ein Objekt ist.

    18 November 2011
    drharris