Skip to content

Commit 0867baa

Browse files
committed
Specify Transaction interface
- Separate proxy object and transaction API - Define methods
1 parent c37a9dd commit 0867baa

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

JavaScript/9-separate.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
'use strict';
2+
3+
// Interface definition
4+
5+
function Transaction() {}
6+
7+
Transaction.start = (data) => {
8+
// place implementation here
9+
return [obj, transaction];
10+
};
11+
12+
// Transaction.delta
13+
Transaction.prototype.commit = () => {};
14+
Transaction.prototype.rollback = () => {};
15+
Transaction.prototype.revoke = () => {};
16+
Transaction.prototype.timeout = (msec) => {};
17+
Transaction.prototype.before = (event, listener) => {};
18+
Transaction.prototype.after = (event, listener) => {};
19+
// Events: commit, rollback, revoke, set, get, timeout
20+
21+
// Usage
22+
23+
const data = { name: 'Marcus Aurelius', born: 121 };
24+
25+
const [obj, transaction] = Transaction.start(data);
26+
console.dir({ data });
27+
28+
obj.name = 'Mao Zedong';
29+
obj.born = 1893;
30+
obj.city = 'Shaoshan';
31+
obj.age = (
32+
new Date().getFullYear() -
33+
new Date(transaction.born + '').getFullYear()
34+
);
35+
36+
console.dir({ obj });
37+
console.dir({ delta: transaction.delta });
38+
39+
transaction.commit();
40+
console.dir({ data });
41+
console.dir({ obj });
42+
console.dir({ delta: transaction.delta });
43+
44+
obj.born = 1976;
45+
console.dir({ obj });
46+
console.dir({ delta: transaction.delta });
47+
48+
transaction.rollback();
49+
console.dir({ data });
50+
console.dir({ obj });
51+
console.dir({ delta: transaction.delta });

0 commit comments

Comments
 (0)