Hallo liebe javagemeinde.
Ich mache gerade mein erstes eigenes Projekt mit GWT and App Engine.
Wo sollen die datenmodel klassen am besten hin? Client, shared oder Server side?
Ich will ein einfaches Auktionshaus schreiben welches man im nachhinein moeglich leicht einer bestimmten Situation anpassen kann. ein paar beispiel klassen:
[java=12]@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class UserProfile implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;
@Persistent
private String firstName;
@Persistent
private String lastName;
//Und noch mehr einfache typen
//getter setter etc.
}
[/code]
oder auch
[java=13]@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Auction implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String titel;
//snip
@Persistent
private AuctionStatus auctionStatus;
@Persistent
private Contract contract;
@Persistent
private Bid bestBid;
@Persistent
private UserProfile owner;
//getters setters etc.
}[/code]
Momentarn ist das so das diese datanmodel klassen im client teil liegen wo auch ein $klassenname Service.java liegt was so aussieht:
[java=11]@RemoteServiceRelativePath("auction")
public interface AuctionService extends RemoteService {
public void addAuction(String title, Date endDateAndTime,
Date startDateAndTime, UserProfile owner, Contract contract);
public void removeAuction(long id);
public Auction[] getAllAuctions();
public Auction getAuctionById(long id);
}[/code]
Dazu erstellt mit eclipse auch noch eine passende $fooServiceAsync klasse.
Im server teil habe ich dann eine $fooServiceImpl.java die, die objecte in eine datanbank (app engine) speichert.
Das funktioniert alles wunderbar.
Doch habe ich wohl nicht weit genug gedacht, denn die berechnungen (z.B. Gebot A ist hoeher als B) sollte ja sicherheitshalber auf der server seite sein. Deswegen werde ich wohl da die datamodel klassen brauchen.
Sollte meine $fooService.java klassen so sein das sie nur einfache typen uebertragen und nicht die objecte? getAuctionTitle, get auctionstartDateTime .. etc. waeren viele getters und setter, dazu muesste ich die auf der clientseite wieder zusammen frikkeln. Hoert sich umstanendlich an.
Ein paar Tips und Tricks wie ich so ein Projekt aufbaue waeren hilfreich. Es muss nicht vorgekaut sein, aber mir den Weg zeigen.
Danke fuer die Aufmerksamkeit.
lord carlos
Ich mache gerade mein erstes eigenes Projekt mit GWT and App Engine.
Wo sollen die datenmodel klassen am besten hin? Client, shared oder Server side?
Ich will ein einfaches Auktionshaus schreiben welches man im nachhinein moeglich leicht einer bestimmten Situation anpassen kann. ein paar beispiel klassen:
[java=12]@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class UserProfile implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;
@Persistent
private String firstName;
@Persistent
private String lastName;
//Und noch mehr einfache typen
//getter setter etc.
}
[/code]
oder auch
[java=13]@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Auction implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String titel;
//snip
@Persistent
private AuctionStatus auctionStatus;
@Persistent
private Contract contract;
@Persistent
private Bid bestBid;
@Persistent
private UserProfile owner;
//getters setters etc.
}[/code]
Momentarn ist das so das diese datanmodel klassen im client teil liegen wo auch ein $klassenname Service.java liegt was so aussieht:
[java=11]@RemoteServiceRelativePath("auction")
public interface AuctionService extends RemoteService {
public void addAuction(String title, Date endDateAndTime,
Date startDateAndTime, UserProfile owner, Contract contract);
public void removeAuction(long id);
public Auction[] getAllAuctions();
public Auction getAuctionById(long id);
}[/code]
Dazu erstellt mit eclipse auch noch eine passende $fooServiceAsync klasse.
Im server teil habe ich dann eine $fooServiceImpl.java die, die objecte in eine datanbank (app engine) speichert.
Das funktioniert alles wunderbar.
Doch habe ich wohl nicht weit genug gedacht, denn die berechnungen (z.B. Gebot A ist hoeher als B) sollte ja sicherheitshalber auf der server seite sein. Deswegen werde ich wohl da die datamodel klassen brauchen.
Sollte meine $fooService.java klassen so sein das sie nur einfache typen uebertragen und nicht die objecte? getAuctionTitle, get auctionstartDateTime .. etc. waeren viele getters und setter, dazu muesste ich die auf der clientseite wieder zusammen frikkeln. Hoert sich umstanendlich an.
Ein paar Tips und Tricks wie ich so ein Projekt aufbaue waeren hilfreich. Es muss nicht vorgekaut sein, aber mir den Weg zeigen.
Danke fuer die Aufmerksamkeit.
lord carlos