48
Data, Context, Interaction Игорь Карпенко Virus Music

Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

  • Upload
    fwdays

  • View
    184

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, InteractionИгорь КарпенкоVirus Music

Page 2: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

• Data, Context, Interaction – парадигма программирования от автора шаблона MVC, Тригве Реенскауга.

PHP Frameworks Day 2016Data, Context, Interaction

Page 3: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

• DCI делит систему на две части: то, чем система является, и то, что система делает.

PHP Frameworks Day 2016Data, Context, Interaction

Page 4: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

• DCI делит систему на две части: то, чем система является, и то, что система делает.

• То, чем система является, - отражает структуру данных, которыми оперирует система. Эта часть системы либо неизменна, либо меняется редко.

PHP Frameworks Day 2016Data, Context, Interaction

Page 5: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

• DCI делит систему на две части: то, чем система является, и то, что система делает.

• То, чем система является, - отражает структуру данных, которыми оперирует система. Эта часть системы либо неизменна, либо меняется редко.

• То, что система делает, - контекстно-зависимое, быстро изменяющееся поведение системы.

PHP Frameworks Day 2016Data, Context, Interaction

Page 6: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

• Context (контекст) – это конкретный сценарий (use case), в котором принимают участие данные.

PHP Frameworks Day 2016Data, Context, Interaction

Page 7: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

• Т.к. интерфейс данных предоставляет лишь простейший набор методов доступа, которых однозначно недостаточно для покрытия всех сценариев, в которых принимают участие данные, Контекст должен иметь возможность расширить во время исполнения программы список методов, доступных каждому отдельному объекту данных.

PHP Frameworks Day 2016Data, Context, Interaction

Page 8: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Page 9: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Traits

Page 10: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Traits

Множественная диспетчеризация

Page 11: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Traits

Множественная диспетчеризация

Dependency injection

Page 12: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Traits

Множественная диспетчеризация

Dependency injection

AOP

Page 13: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Traits

Множественная диспетчеризация

Dependency injection

AOP

Role-oriented programming

Page 14: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Mixins

Объектно-ориентированные концепции, которые пересекаются с ключевыми идеями DCI:

Traits

Множественная диспетчеризация

Dependency injection

AOP

Role-oriented programming

Page 15: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Role-oriented programming

SCROLLSCala ROLes Language

You are able to define compartments, roles and play-relationships. Invoking Role-methods is done via the Dynamic trait.

Page 16: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Role-oriented programming

SCROLLSCala ROLes Language

You are able to define compartments, roles and play-relationships. Invoking Role-methods is done via the Dynamic trait.

Page 17: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Traits

Page 18: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Traits

class SomeClass {

// …

use SomeTrait;

// …

}

Page 19: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Traits

class SomeClass {

// …

use $someTrait;

// …

}

Page 20: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Object A

Object B

Object C

Object D

Message B1

Message C1

Message D1

Message D2

Use Case

Page 21: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Object A

Object B

Object C

Object D

Message B1

Message C1

Message D1

Message D2

Use Case 1

Page 22: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Object A

Object B

Object C

Object D

Message B2

Message D3

Use Case 2

Message B3

Page 23: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Object A

Object B

Object C

Object D

Message B1

Message C1

Message D1

Message D2

Use Case 1

Page 24: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Object A

Object B

Object C

Object D

Use Case 1 (Context)

Role X

Message B1

Role Y

Message C1

Role Z

Message A1

Role W

Message D1Message D2

Page 25: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Fatty – библиотека для PHP, которая реализует DCI.

https://github.com/kirkbushell/fatty

Page 26: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Reverse Wrapper – техника реализации DCI в PHP.

Пример реализации: https://github.com/mbrowne/dci-php

Page 27: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

Page 28: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

Data

Page 29: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

Data

Context

Page 30: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

Data

Context

Interaction

Page 31: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

Page 32: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

<?phpnamespace DataObjects;class Account implements \DCI\RolePlayerInterface{

use \DCI\RolePlayer;

private $balance = 0;

function __construct($initialBalance) {$this->balance = $initialBalance;

}function getBalance() {

return $this->balance;}function increaseBalance($amount) {

$this->balance += $amount;}function decreaseBalance($amount) {

$this->balance -= $amount;}

}

Page 33: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

namespace UseCases{

class TransferMoney extends \DCI\Context{

public $sourceAccount;public $destinationAccount;public $amount;

function __construct($sourceAccount, $destinationAccount, $amount) {$this->sourceAccount = $sourceAccount->addRole('SourceAccount', $this);$this->destinationAccount = $destinationAccount->addRole('DestinationAccount', $this);$this->amount = $amount;

}

function transfer() {$this->sourceAccount->transferOut($this->amount);

}}

}

Page 34: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

//…

$this->sourceAccount = $sourceAccount->addRole('SourceAccount', $this);

$this->destinationAccount = $destinationAccount->addRole('DestinationAccount', $this);

//…

Page 35: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

//…

$this->sourceAccount = $sourceAccount->addRole('SourceAccount', $this);

$this->destinationAccount = $destinationAccount->addRole('DestinationAccount', $this);

//…trait SourceAccount{

function withdraw($amount) {$this->decreaseBalance($amount);

}

function transferOut($amount) {$this->context->destinationAccount->deposit($amount);$this->withdraw($amount);

}

}

Page 36: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

//…

$this->sourceAccount = $sourceAccount->addRole('SourceAccount', $this);

$this->destinationAccount = $destinationAccount->addRole('DestinationAccount', $this);

//…

trait DestinationAccount{

function deposit($amount) {$this->increaseBalance($amount);

}

}

Page 37: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

Page 38: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

$acct1 = new \DataObjects\Account(20);$acct2 = new \DataObjects\Account(0);

$moneyTransfer = new \UseCases\TransferMoney($acct1, $acct2, 10);

$moneyTransfer->transfer();

var_dump($acct1->getBalance(), $acct2->getBalance());

https://github.com/mbrowne/dci-php

Page 39: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Не стоит забывать о…

Page 40: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Не стоит забывать о…

YAGNI

Page 41: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Не стоит забывать о…

YAGNI KISS

Page 42: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Не стоит забывать о…

YAGNI KISS DRY

Page 43: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Не стоит забывать о…

YAGNI KISS try to DRY

Page 44: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

S O L I D

Page 45: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

S O L I Dinterface segregation principle

Page 46: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

S O L I Dinterface segregation principle

HeaderInterface/RoleInterface

(M. Fowler)

Page 47: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

S O L I Dinterface segregation principle

HeaderInterface/RoleInterface

(M. Fowler)

http://martinfowler.com/bliki/RoleInterface.html

Page 48: Игорь Карпенко "Data, Context, Interaction – парадигма программирования от автора шаблона MVC"

Data, Context, Interaction

PHP Frameworks Day 2016Data, Context, Interaction

Ссылки для дальнейшего изучения:

http://www.artima.com/articles/dci_vision.html

http://fulloo.info/