+ All Categories
Home > Technology > Čtvrtkon #53 - Marian Benčat

Čtvrtkon #53 - Marian Benčat

Date post: 12-Apr-2017
Category:
Upload: pehapkari
View: 92 times
Download: 2 times
Share this document with a friend
32
Programovací paradigmata Marian Benčat
Transcript
Page 1: Čtvrtkon #53 - Marian Benčat

Programovací paradigmata

Marian Benčat

Page 2: Čtvrtkon #53 - Marian Benčat

2

Marian Benčat• Programátor • „Ten hater“

Page 3: Čtvrtkon #53 - Marian Benčat

3

O přednášce• Co nezazní?• OOP je nejlepší• Funkcionální programování je nejlepší• …. je nejlepší….

„good luck for those, who are left behind“

Page 4: Čtvrtkon #53 - Marian Benčat

4

Prozření

„V kariéře každého dobrého programátora nastane okamžik, kdy si uvědomí, že neexistuje nejlepší tool.“

Page 5: Čtvrtkon #53 - Marian Benčat

5

Rychlé rozdělení paradigmat• Imperativní• OOP• Procedurální

• Deklarativní• Funkcionální• Logické

Page 6: Čtvrtkon #53 - Marian Benčat

6

Deklarativní vs. Imperativní• Funkcionální se zaměřuje na to „co“ chceme udělat• Imperativní na to „jak“ to chceme udělat P1

Page 7: Čtvrtkon #53 - Marian Benčat

7

OOP a setkání s reálnými projekty• Abstrakce • ORM• DAL (Data access layer) P2

EnkapsulaceORMUI

Výkon? P3

Page 8: Čtvrtkon #53 - Marian Benčat

8

Page 9: Čtvrtkon #53 - Marian Benčat

9

Na vysoké škole…

„Má to garbage collector, tak se nemusíš zajímat o paměť“, říkali…….

„Bude to sranda“, říkali…

Page 10: Čtvrtkon #53 - Marian Benčat

10

Anemic vs Rich Domain Model• Anemic• Doménové modely pouze nosiči dat (PDO, DTO, OPDO, POD,..)• Logika v servisách (manažerech)• OOP papaláši považováno za anti-pattern

• RDM• Doménové modely obsahují veškerou logiku a jsou nosiči dat (enkapsulace) • Servisy slouží pouze jako „UI fasády“• OOP papaláši vyzdvihován

Page 11: Čtvrtkon #53 - Marian Benčat

11

RDM

Page 12: Čtvrtkon #53 - Marian Benčat

12

Anemic

Page 13: Čtvrtkon #53 - Marian Benčat

13

Anemic vs Rich Domain Model• A co na to SOLID?• Single responsibility principle• Open/closed principle• Liskov substitution principle• Interface segregation principle• Dependency inversion principle

Page 14: Čtvrtkon #53 - Marian Benčat

14

Anemic?• API• Expose databáze

Page 15: Čtvrtkon #53 - Marian Benčat

15

Funkcionální programování - principy• Pure functions• Immutability• Honest code• Stateless• Avoid-primitive obsession• Composition P1

• Rail-way programming

Page 16: Čtvrtkon #53 - Marian Benčat

16

Pure functions• Output = fce(Input)• Pro stejné vstupy dostáváme vždy stejné

výstupy• Není závislá na ničem jiném, než jsou

vstupy• Nemá žádné side effecty• Pointa v odstranění stavu

• Výhody:• Testovatelnost• Exceptions rejuvenate

Page 17: Čtvrtkon #53 - Marian Benčat

17

Side effecty a exception recovery- Funcionalita vykoná side effect (Stream, store, queue,..)

- Vyvolá exception- Chceme to zkusit znovu- Co skryté závislosti?

Page 18: Čtvrtkon #53 - Marian Benčat

18

Immutability• Po vytvoření nelze objekt už měnit• Eliminuje side efekty• Jde to vždy? Co FS? Co Databáze?

• Immutable core x mutable shell

• Nevýhody?• Výkon• Překážky

Page 19: Čtvrtkon #53 - Marian Benčat

19http://enterprisecraftsmanship.com/2016/05/12/immutable-architecture/

Page 20: Čtvrtkon #53 - Marian Benčat

20

Immutable conflict Immutable core:

Void Add(car);ChangeRequest<Car> Add(car);

Mutable shell: db.save(List<ChangeRequest<T>>);

Integrační testy? Pustíme immutable shellem a vyflusnuté artefakty můžeme otestovat

Page 21: Čtvrtkon #53 - Marian Benčat

21

Honest functions• int Divide(int a, int b) {

if (b==0) throw new ArgumentException(); return a / b;}• int Max(int [] arr) { // Max(); -> -infinite

var max = Int.Min; for(…) { if(…) max = arr[i]; } return max;}

Page 22: Čtvrtkon #53 - Marian Benčat

22

Honest functions• int Divide(int a, int b); // throws exceptions• int Max(int [] arr);• int? Max(int [] arr);

• void Save(Car car);

• To vždycky klapne

Page 23: Čtvrtkon #53 - Marian Benčat

23

Honest functions

Page 24: Čtvrtkon #53 - Marian Benčat

24

Exceptions vs. GOTO• Kdy použít exceptiony?• Je tedy GOTO špatné?

Page 25: Čtvrtkon #53 - Marian Benčat

25

Honest functions

Page 26: Čtvrtkon #53 - Marian Benčat

26

Honest functions

Page 27: Čtvrtkon #53 - Marian Benčat

27

Ne příliš patrné problémy se stavem

Page 28: Čtvrtkon #53 - Marian Benčat

28

Ne příliš patrné problémy se stavem

Page 29: Čtvrtkon #53 - Marian Benčat

29

Primitive obsession

Page 30: Čtvrtkon #53 - Marian Benčat

30

Primitive obsession

Page 31: Čtvrtkon #53 - Marian Benčat

31

Railway-oriented programmingtype Result<'TSuccess, 'TFailure> = | Success of 'TSuccess | Failure of 'Tfailure Promise.then(succ=>{},err=> {

} );

Page 32: Čtvrtkon #53 - Marian Benčat

32

Railway-oriented programming

http://enterprisecraftsmanship.com/2015/03/20/functional-c-handling-failures-input-errors/


Recommended