Erweiterte Programmierung


"Lokale" Eigenschaften werden nicht automatisch im Netzwerk verteilt, wenn sich der Wert der Eigenschaft ändert.

Lokale Eigenschaften sind im Grunde genommen normale .NET-Properties (getter- und setter-Methoden). Diese benötigen Sie dann wenn Sie die Klasse überwiegend im lokalen Speicherraum ohne ständigen Netzwerkzugriff auf Ihre Eigenschaften verwenden (siehe .NET-Anwendungsdomäne). Beispielsweise wären dies Businessobjekte (Ableitungen von ACBSO).

Findet die Instanziierung der Klasse dagegen im Anwendungsbaum statt kann dennoch der Client den Wert (der diese Instanz als Proxy-Komponente vorliegen hat) über das Netzwerk lesen und schreiben. Der Zugriff auf die ValueT-Eigenschaft oder alternativ ein ACUrlCommand-Aufruf hat immer zur Folge, dass unmittelbar ein WCF-Aufruf auf Serverseite stattfindet (synchron). 

Bei "Netzwerkfähigen" Eigenschaften dagegen, erfolgt die Kommunikation asynchron, damit kein unnötige Blockade der Kommunikationsschicht erfolgt.

Wenn Sie also serverseitig in Anwendungsbäumen instanziierte Klassen programmieren, sollten Sie sich nur dann für lokale Eigenschaften entscheiden, wenn Sie diese selten benötigen.


ACPropertyInfo-Attributklasse

Verwenden Sie die im vorigen Kapitel beschriebene ACPropertyInfo-Attributklasse um die lokale Eigenschaft der iPlus-Runtime bekannt zu geben.

 

Aufruf von OnPropertyChanged()

Programmieren Sie lokale Eigenschaften wie normale .NET-Properties. Jedoch sollten Sie in den Setter-Methoden die OnPropertyChanged()-Methode aufrufen damit das PropertyChanged-Ereignis der INotifyPropertyChanged-Schnittstelle ausgelöst wird. Wenn Sie dies nicht tun, jedoch die Eigenschaft als Persistierbar deklariert haben, findet keine Persisitierung statt, falls sich die Instanz in einem Projekt-Anwendungsbaum befindet! Außerdem wird das gebundene Steuerelement in der GUI nicht aktualisiert.

 

Beispiel

 


Das folgende Beispiel zeigt wie man mit lokalen Eigenschaften arbeitet.

  • Bei den Programmzeilen 1-6 wird angenommen, dass man sich innerhalb der Klasse befindet in der die Eigenschaft "RunScheduler" definiert ist (this).
  • Bei den Programmzeilen 7 wird angenommen, dass man sich in einer anderen Instanz befindet, die sich jedoch in der gleichen Anwendungsdomäne befindet.
  • Bei den Programmzeilen 8 wird angenommen, dass man sich in einer anderen Anwendungsdomäne bzw. auf einem anderen Rechner befindet und der Zugriff auf die Eigenschaft "RunScheduler" per Netzwerk erfolgt.

 

Persistierungsverhalten

Das obere Beispiel behandelte die Definierung der „RunScheduler“ Eigenschaft. Der erste Parameter des ACPropertyInfo-Konstruktors gibt an, dass eine Persistierung des Eigenschaftswertes in der Datenbank erfolgen soll. Das bedeutet dass nach dem Aufruf der setter-Methode (indem die OnPropertyChanged()-Methode aufgerufen wird) eine automatische Speicherung des Wertes erfolgt. Findet bei dem nächsten Hochfahren wieder eine Erzeugung der Instanz statt, dann ruft das iPlus-Framework automatisch die setter-Methode einmalig mit dem Wert auf, der zuletzt in der Datenbank gespeichert wurde.

Lesen Sie mehr im Kapitel "Persistierung".