Upload
moscowjs
View
190
Download
6
Tags:
Embed Size (px)
DESCRIPTION
Слайды с выступления Марата Гайнуллина на MoscowJS 16
Citation preview
Platypus.js
Enterprise JavaScript
Container
Доклад: Марат Гайнуллин
Чтение данных без ORM-а
1. var results = executeQuery(“some sql select text”);
2. while(!results.eof()){
3. results.first();
4. var address = results.fieldByName(“address”).asString();
5. var phone = results.fieldByName(“phone”).asString();
6. var email = results.fieldByName(“phone”).asString();
7. var dateOfBirth = results.fieldByName(“birth”).asDate();
8. }
2
Использование ORM-а
1. var customers = Models.find(“select * from customers …”);
2. customers.forEach(function(aCustomer){
3. …
4. });
5. var fifthCustomer = customers[4];
6. If(customers[2].name == =“”){
7. var cName = prompt(“Введите имя”);
8. customers[2].name = cName;
9. }
3
Запрос как источник схемы данных
4
Platypus.js ORM
1. /**
2. * Devices communication module.
3. * @acceptor asc6
4. */
5. function Asc6Acceptor() {
6. var self = this;
7. var model = P.loadModel(this.constructor.name);
8. model.packets.elementClass = Packet;
9. var packets = model.packets;
10.
11. self.flush = function () {
12. model.save(function (aAffected) {
13. log(“saved “);
14. }, function (e) {
15. log(“failed”);
16. });
17. };
18.}5
Knockout.js
1. function TaskListViewModel() {
2. // Data
3. var self = this;
4. self.tasks = ko.observableArray([]);
5. self.newTaskText = ko.observable();
6. self.incompleteTasks = ko.computed(function () {
7. return ko.utils.arrayFilter(
8. self.tasks(),
9. function (task) {
10. return !task.isDone()
11. });
12. });
13. }
14. ko.applyBindings(new TaskListViewModel());
6
Bookshelf.js
1. var Customer = bookshelf.Model.extend({
2. initialize: function () {
3. this.on('saving', this.validateSave);
4. },
5. validateSave: function () {
6. return checkit(rules).run(this.attributes);
7. }
8. });
7
Backbone.js
1. var Subject = {};
2. _.extend(Subject, Backbone.Events);
3. Subject.on("alert", function (msg) {
4. alert("Triggered " + msg);
5. });
6. Subject.trigger("alert", "an event");
8
Platypus.js Декларативный жизненный цикл
1. /**2. * @resident3. * 4. */5. function GlobalModule() {6. }
7. /**8. * @stateless9. * 10. */11.function SessionModule() {12.}
9
Platypus.js Декларативная безопасность
1. /**2. * @rolesAllowed buh3. */4. function SessionModule() {5. var self = this;6. /**7. * @rolesAllowed manager 8. */9. self.calcProfit = function () {10. };11.}
10
Platypus.js Чистый прикладной код
1. function Packet(){
2. // Pure application class
3. Packet.superclass.constructor.apply(this, arguments);
4. self = this;
5. self.calcVolume = function(){};
6. self.logtitude = 67;
7. self.latitude = 34;
8. self.calcTime = function(){};
9. }
10.//…
11.var p = new Packet();
12.p. calcVolume();
13.p. calcTime();
14.//…
11
12
Platypus UI
13
14
Java SE Client Browse
r
15
16
17
Java EE
18
Node
19
Platypus
20
Уровни параллелизма Platypus.js
Browser
Browser 2
Browser
Browser
Stateless server
module
Stateful server
module
Resident server
module
Browser 3
Browser 1
Browser
Уровень 1
Уровень 2
Уровень 3
21
Архитектура Platypus.js
22
Спасибо за вниманиеPlatypus.js документация, дистрибутивы:
http://www.platypus-platform.org
Исходники:
https://github.com/altsoft
Направляйте вопросы по адресу:
Доклад: Марат Гайнуллин. [email protected]
23