Kommunikation von Core und GUI über Schnittstellen

Susi-On-Line

Neues Mitglied
Hallo

Ich habe eine Architektur-Frage. Ich möchte nach außen (außerhalb der Core) möglichst nur mit Schnittstellen arbeiten, um einige Modifikationen (z.B. setzen von Properties) nur über bestimmte Methoden zu zulassen.

Hier zunächst einmal die Typen, auf die ich mich nachfolgend beziehe:

Java:
interface IEmployee {
   String getName();
   IEmployee getSuperior();
   // ...
}

Java:
class Employee implements IEmployee {
  
   private String name;
   private IEmployee superior;
   // ...

   Employee(String name, IEmployee superior) {
      this.name = name;
      this.superior = superior;
   }  
 
   @Override
   public String getName() {
      return this.name;
   }

   void setName(String name) {
      this.name = name;
   }

   @Override
   public IEmployee getSuperior() {
      return this.superior;
   }

   void setSuperior(IEmployee superior) {
      this.superior = superior;
   }
   // ...
}

Java:
interface ISession {
   IEmployee createEmployee(String name, IEmployee superior);
   boolean changeSuperior(IEmployee employee, IEmployee Superior);
   // ...   
}

Die Kommunikation zwischen Core und GUI soll über eine Instanz von ISession ablaufen.

Das Setzen des "Superior" soll nur über ISession#changeSuperior(...) möglich sein (da neben dem setzen des Properties in Employee noch andere Aktionen durchgeführt werden müssen). Da außerhalb der Core nur die Schnittstelle IEmployee bekannt ist, kann man createEmployee nur eine Instanz dieser Schnittstelle übergeben. createEmployee hat deshalb (ohne Casten) keinen Zugriff auf die setSuperior(...)-Methode (da diese ja nicht Teil der Schnittstellendefinition ist). Eine Möglichkeit wäre das Casten von IEmployee zu Employee. Das möchte ich jedoch ungern tun.

Habt ihr Ideen / Anregungen, wie ich das Problem lösen könnte?

Vielen Dank im voraus. 🙂
 
du kannst dir ein zweites interface machen, dass sozusagen den Accessor spielt. Dieses ist ein IEmplyee und hat die Set methoden.

nun kannst du in deinem code ueberpruefen ob dein Objekt eine instanz dieses Accessorinterfaces ist und dann auf das casten. somit bleibst du weiterhin frei von der implementierung.

Wenn du das Accessorinterface nicht nach aussen geben willst wirst du intern nicht ums casten rumkommen
 

Zurück
Oben