Flaches Objekt-Mapping

Eine Klasse kann mit @SeifeEmbeddable annotiert werden und so die Felder in der SQL-Tabelle eines anderen BO’s abbilden, sogenanntes Flat-Mapping. Etwa bei einem Adress-Objekt das an mehreren Stellen in einem Projekt benötigt wird.

@SeifeEmbeddable
public class Address {
   @SeifeField
   private String street;
   @SeifeField
   private String zipcode;
   @SeifeField
   private String city;
   @SeifeField
   private String state;
}

Das System erlaubt es die Felder auch mit einem Prefix einzugliedern. Der nachfolgende Programmteil genügt um mit dem Code-Generator die üblichen Datenzugriffsobjekte für SQLite zu erstellen und wenn nötig die passende Parcelable Schnittstelle zu generieren;

@SeifeClass
public class Customer {
   @SeifeField
   private Long id;

   @SeifeField
   private String name;

   @SeifeEmbedded(prefix="billing_")
   private Address billingAddress;

   @SeifeEmbedded(prefix="delivery_")
   private Address deliveryAddress;

   public Address getBillingAddress() {
      if (billingAddress == null) {
         billingAddress = new Address();
      }
      return billingAddress;
   }

   public Address getDeliveryAddress() {
      if (deliveryAddress == null) {
         deliveryAddress = new Address();
      }
      return deliveryAddress;
   }
}

Das einfache Programmstück erstellt die SQL Tabellen Definitionen welche Spalten wie ‘delivery_street’, ‘delivery_zipcode’ enthalten und enthält den nötigen Code um bei Laden und Schreiben des Objektes zum Adress-Objekt zu delegieren.
Als Entwickler ist es nur erforderlich die getter Methoden so zu schreiben, dass kein Null-Wert zurück gegeben wird.
Das komplette Beispiel ist als Projekt auf GitHub verfügbar (oder Link zum aus der @Embedded Annotation erzeugten Schema Peer)

Diese Architektur ist z.B. nützlich, wenn eine Datenkopie in anderem Kontext gespeichert werden soll. Bei einer Kundenbestellung können wichtige Daten wie der Preis an der Bestellposition gespeichert werden. Sollte sich der Produktpreis einmal ändern bleiben die Bestelldaten konsistent. Embedded Objekte gruppieren die relevanten Daten und die gleiche Instanz aus dem Produkt kann bei der Erstellung des Bestellpostens genutzt werden. Beim Schreiben in die Datenbank werden sie dann für die Bestellung in Kopie abgespeichert.