Data-Context-Interaction (DCI) и программируемое событие в javascript

Недавно я увидел следующую презентацию о DCI от Trygve Reenskaug: https://vimeo.com/43536416 Это как-то взорвало мой разум. Mmmh, видя в коде, взаимодействие между различными компонентами программного обеспечения является привлекательной идеей.

Я попытался найти примеры DCI в javascript, безуспешно. Затем я начал задаваться вопросом. Не является ли образец DCI противоположным шаблону программирования?

Событие программирования модно в javascript, я думаю, потому что он позволяет развязать, и потому, что классические концепции наследования не являются родными для js. Я думаю, что я понимаю преимущества программируемого события, но я также заметил, что отладка может быть чертовски сложной, когда требуется следить за сообщением о событиях.

Можно ли сказать, что обе концепции противоположны? Или я ошибался? Есть ли некоторые примеры реализации DCI в js, которые я пропустил? На что я должен смотреть, чтобы выкопать концепцию?

+4
источник поделиться
1 ответ

Во-первых, программирование событий или наследование являются ортогональными DCI. Вы можете сделать DCI без наследования и с программированием событий (или без).

JavaScript в какой-то мере является одним из лучших языков для DCI. Большинство языков имеет некоторые проблемы со следующим DCI. В JavaScript проблемы могут быть решены, если есть финализатор, но отсутствие финализатора означает, что вам придется "распоряжаться" своим значением, означающим какой-то код noilerplate.

Я написал пример в JavaScript, который я буду размещать в Интернете на http://fullOO.info, где вы найдете примеры Trygve, Jim и я создали вместе с некоторыми другими людьми также созданные.

fullOO.info также является ответом на то, куда вы могли бы пойти, чтобы лучше узнать DCI, или вы можете присоединиться к составу объектов для группы google для обсуждения DCI.

Пример, который я написал в JS, - это канонический денежный перевод на примере DCI, и интересная часть (то есть все, кроме кода шаблона/библиотеки) можно увидеть ниже:

var moneyTransferContext = function(sourcePlayer, destinationPlayer, amount) {
    var source = {
            withdraw: function() {
                var text = "Withdraw: " + amount;
                this.log.push(text);
                this.balance -= amount;
                console.log("Balance: " + this.balance);
            }
        },
        destination = {
            deposit: function() {
                var text = "Deposit: " + amount;
                this.log.push(text);
                this.balance += amount;
                console.log("Balance: " + this.balance);
            }
        };
    source = assign(source).to(sourcePlayer);
    destination = assign(destination).to(destinationPlayer);
    return {
        transfer: function() {
            source.withdraw();
            destination.deposit();
            return this;
        }
    };
},
sourceAccount = {
  log: [],
  balance: 100
},
destinationAccount = {
  log: [],
  balance: 0
};

moneyTransfer(sourceAccount, destinationAccount, 25).transfer().unbind();

Остальное можно увидеть на http://jsfiddle.net/K543c/17/

+4
источник

Посмотрите другие вопросы по меткам или Задайте вопрос