Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Transaction Script Software Component Technology for Distributed Applications.

Ähnliche Präsentationen


Präsentation zum Thema: "Transaction Script Software Component Technology for Distributed Applications."—  Präsentation transkript:

1 Transaction Script Software Component Technology for Distributed Applications

2 04.05.03Transaction Script Überblick Domain Logic TransactionScript Domain Model Tabel Modul Eingabe und Präsentation trennen Daten verarbeiten und Ergebnis in DB schreiben

3 04.05.03Transaction Script Wie funktioniert TS Domain Logic Design hängt von Transaktion ab, die ausgeführt werden soll Transaction Script befindet sich: Server Pages CGI-Scripten Verteiltem-System-Objekt Isoliere Transaction Script von Präsentation so gut wie möglich Testvorteile Erweiterbarkeit

4 04.05.03Transaction Script Struktur von TS Mehrere TS in einer einzigen Klasse Jedes TS in einer eigenen Klasse, indem das Command pattern [Gang of four] anwendet wird. Manipulieren von Instanzen von Scripten zu Laufzeiten Eine Annäherung: meist gibt es für jede DB- Transaktion ein Transaction Script

5 04.05.03Transaction Script Wann wird TS eingesetzt Vorteil: Simplizität Wenn die Anwendung nur wenig Logik beinhaltet Nachteil: Duplikation: gemeinsamer Code tendiert dazu dupliziert zu werden Domain Model Comlexity of Domain Logic Effort to Enhance Transaction Script

6 04.05.03Transaction Script Beispiel CREATE TABLE products (ID int primary key, nam varchar, type varchar) CREATE TABLE contracts (ID int primary key, product int, revenue decimal, dateSigned date) CREATE TABLE revenueRecognitions(contract int, amount decimal, recognizedOn date, PRIMARY KEY (contract, recognizedOn) ) Textverarbeitung Tabellen Datenbanken sofort 1/3 sofort 1/3 60 Tagen1/3 in 90 Tagen 1/3 sofort 1/3 30 Tagen1/3 in 90 Tagen

7 04.05.03Transaction Script Beispiel Class Gateway... public ResultSet findRecognitionsFor(long contractID, MfDate asof) throws SQLExceptions { PrepareStatement stmt = db.prepareStatement(findRecognitionsStatement); stmt =db.prepareStatement(findRecognitonsStatment); stmt.setLong(1, contractID); stmt.setData(2, asof.toSqlDate()); ResultSet result = stmt.executeQuery(); return result; } private static final String findRecognitionsStatements = SELECT amount + FROM revenueRecognitions + WHERE contract = ? AND recognizedOn <= ?; private Connection db;

8 04.05.03Transaction Script Beispiel Class RecognitionService... Public Money recognizedRevenue(long contractNumber, MfDate asOf) { Money result = Money.dollars(0); Try { ResultSet rs = db.findRecognitionsFor(contractNumber, asOf); While(rs.next()){ Result = result.add(Money.dollars(rs.getBigDezimal(amount))); } return result; }catch(SQLException e) { throw new ApplicationException (e); }

9 04.05.03Transaction Script Class RecognitionService... Public void calculateRevenueRecognitions(long contractNumber){ Try{ ResultSets contracts = db.findContract(contractNumber); contracts.next(): Money totalRevenue = Money.dollars(contracts.getBigDecimal(revenue)); MfDate recognitionDate = new MfDate(contracts.getDate(dateSigned)); String type = contracts.getString(type); if(type.equals(S)){ Money[]allocation =totalRevenue.allocate(3); db.insertRecognition(contractNumber, allocation[0], recognitationDate); db.insertRecognition(contractNumber, allocation[1], recognitationDate.addDays(60)); db.insertRecognition(contractNumber, allocation[2], recognitationDate.addDays(90)); }else if(type.equals(W)){ Money[]allocation =totalRevenue.allocate(3); db.insertRecognition(contractNumber, allocation[0], recognitationDate); }else if(type.equals(D)){ Money[]allocation =totalRevenue.allocate(3); db.insertRecognition(contractNumber, allocation[0], recognitationDate); db.insertRecognition(contractNumber, allocation[1], recognitationDate.addDays(60)); db.insertRecognition(contractNumber, allocation[2], recognitationDate.addDays(90)); } }catch(SQLException e) {throw new ApplicationException (e);}}

10 04.05.03Transaction Script Beispiel Class Gateway.... Public Result findContract (long contractID) throws SQLException { PreparedStatement stmt = db.prepareStatement(findContractStatement); Stmt.setLont(1, contractID); ResultSet result = stmt.executeQuery(); Return result; } private static final String findContractStatement = SELECT * + FROM contracts c, products p + WHERE ID = ? AND c.product = p.ID;

11 04.05.03Transaction Script Beispiel Class Gateway.... Public void insertRecognition(long contractID, Money amount, MfDate asof) throws SQLException { PreparedStatement stmt = db.prepareStatement(insertRecongnitionStatement); Stmt.setLong(1, contractID); Stmt.setBigDezimal(2,amount.amount()); Stmt.setDate(3, asof.toSqlDate()); Stmt.executeUpdate(); } public static final String insertRecognitionStatement = INSERT INTO revenueRegnitions VALUES(?,?,?); }


Herunterladen ppt "Transaction Script Software Component Technology for Distributed Applications."

Ähnliche Präsentationen


Google-Anzeigen