Your SlideShare is downloading. ×
0
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .net per sviluppatori DDD

303

Published on

Scrivere Object Oriented è ora possibile anche in Javascript con Typescript. E in generale bisogna concentrarsi nello scrivere codice di valore e non "autogenerato" dallo scaffolding. Capiamo come si …

Scrivere Object Oriented è ora possibile anche in Javascript con Typescript. E in generale bisogna concentrarsi nello scrivere codice di valore e non "autogenerato" dallo scaffolding. Capiamo come si fa riscrivendo un vecchio gioco della Licasfilm!

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
303
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e .NET per sviluppatori DDD Marco Parenzan
  • 2. Marco Parenzan Formazione & Divulgazione con 1nn0va Formazione & Progettazione con ITS Kennedy Ricerca e Innovazione con Servizi Cgn www.slideshare.net/marco.parenzan marco [dot] parenzan [at] libero/live [dot] it www.innovazionefvg.net Developer e Architect in .NET e Web Cloud (Candidate) Developer Loves functional programming Some videogames for fun
  • 3. Can three hack programmers, three MVPs, and a bunch of good programming principles save new softwares writing them without database scaffolding? Not without your help!
  • 4. And the Alien Database
  • 5. Alcuni incubi  Sviluppare (web) applications  Pensando solo alla trasformazione dei dati  Attraverso i (infamous three) tiers
  • 6. Step 1. Ubiquious Language  Mettiamoci d’accordo su cosa fa il sistema, non su quali dati tratta  Non partiamo dal Database…  …e quindi da dove?  Nel gioco ZakDDD compie delle azioni, ben definite (è la prima generazione delle avventure punta e clicca) espresse in termini di verbi  Verbi che servono per interagire con le cose e gli altri personaggi
  • 7. UL per programmatori  Ubiquitous Language è un insieme di concetti condivisi  Condivisi tra coloro che interagiscono con il Dominio  Ognuno esprime i concetti nella lingua più congeniale  Il programmatore usa i linguaggi di programmazione…il buon vecchio OOP  Obiettivo è quello di definire un Domain Specific Language  Se usiamo il C# e le fluent interfaces avremo un DSL interno
  • 8. Object are King but ORM are «anemic»  OOP: incapsulamento, ereditarietà e polimorfismo  Design Patterns: creational, singleton, strategy, ….  DDD: Aggregates, Value Types, DTOs, Entities
  • 9. Step 2. Bounded Context  Zak Mc Kracken è il secondo gioco di una famiglia nata con Maniac Mansion  Tutti i giochi di questa prima generazione di avventure hanno un runtime comune: lo SCUMM (System Creation Utility for Maniac Mansion)  Ogni gioco è composto quindi da due parti: il runtime e la parte specifica del gioco  Se ci volete giocare ancora oggi: http://scummvm.org/
  • 10. Bounded Context in un progetto .NET  È convezione assegnare un bounded context ad una «unità di distribuzione»  In .NET  un assembly, un namespace  In Visual Studio un progetto  I BC hanno ruoli diversi  I Core Context sono quelli più affini al problema di business che stiamo modellando  Altri «context» posso modellare soluzioni più «infrastrutturali»
  • 11. No more rectangles  Quando sviluppo ad oggetti l’obiettivo è scrivere codice «di valore»
  • 12. «Look Json, no state »  Senza stato non serializzo….  …automaticamente!  Perché serializzo? Perché devo passare tra i tier, …
  • 13. Step 3. Aggregates  Gli aggregati sono oggetti responsabili in toto della vita dell’oggetto  Affinchè «evolva», all’oggetto non devo modificare proprietà, ma specificare le azioni….che modificano lo stato  Quindi un aggregato, tipicamente, non ha proprietà pubbliche  Ma, se dovessi inviare questo oggetto attraverso i tier?
  • 14. Step 4. Read Model  Chiedo all’oggetto di fornirmi «informazioni» sul suo stato  Ma nessuno dice che quello che ho è lo stato dell’oggetto  È un insieme di informazioni utili a qualche scopo, e dello stato è solo una parte  Ci possono essere tanti oggetti R/M per descrivere tante situazioni diverse
  • 15. Ogni Aggregate è responsabile del proprio stato (interno)  Non deve fare alcuna assunzione, se non strettamente contrattualizzata, minimizzando le dipendenze  Delega al vero responsabile la richiesta dei dati, non si prende la briga di prenderseli da sé
  • 16. No more triangles  Quando sviluppo ad oggetti l’obiettivo è scrivere codice «di valore»
  • 17. Ma GetScript non ha una equivalente SetScript!   Bravo, te ne sei accorto! Certo che no! Mica puoi modificare lo stato dell’aggregato dandogli un ReadModel! Lo stato «evolve» perché compio azioni sull’aggregato  «Quindi se con quell’oggetto, in presentation ti fai una form, quei dati non ti servono a niente!!!»  E allora che me ne faccio?  Quello che vuoi! Ad esempio ti aiutano a scegliere un’altra azione da fare.  Sicuramente con il ReadModel non ti puoi costruire automaticamente una maschera  Devi costruire un modello «by hand» nella presentation
  • 18. Step 5. Model in Presentation = ViewModel  Quale è il miglior modo per creare un modello?  La programmazione OOP  Ma se il modello è nella Presentation?  La programmazione OOP  Ma se l’applicazione è Web e la presentation è HTML 5/CSS3 e Javascript?  La programmazione OOP  E tu vorresti farmi scrivere OOP in Javascript? Ma non ci sono le classi!  A parte il fatto che si possono scrivere oggetti anche in Javascript (è solo il modello di riferimento che è diverso – prototyping) adesso c’è un’alternativa…
  • 19. Typescript  Large scale JavaScript development is hard.  A language for large scale JavaScript development.  A typed superset of JavaScript that compiles to plain JavaScript.  Any browser. Any host. Any OS.  Open Source.  Le più recenti presentazioni alla Build 2014  http://channel9.msdn.com/Events/Build/2014/3-576  http://channel9.msdn.com/Events/Build/2014/3-583
  • 20. Type System  Structural typing and type inference  In practice very few type annotations are necessary  Generics  Increases accuracy and expressiveness of type system  Works with existing JavaScript libraries  Declaration files can be written and maintained separately  Types enable tooling  Provide verification and assistance, but not hard guarantees  An accurate static representation of JavaScript’s dynamic run-time type system
  • 21. Classes, Interfaces, Modules  Scalable application structuring  Classes, interfaces, and modules enable clear contracts in code  Aligned with emerging standards  Class and lambda syntax aligns with ECMAScript 6 proposals  Supports popular module systems  CommonJS and AMD modules in any ECMAScript 3 environment
  • 22. Step 6. CQRS  Ma se il ReadModel non si spedisce indietro al Servizio, cosa invio?Comandi! Ovvero richieste di compiere azioni sul dominio!  Questo è il principio base del CQRS (Command Query Responsibility Segregation)  E il ViewModel non è un adattamento dei dati alla presentation ma un meccanismo per comporre comandi!  Quindi è tutto un model da scrivere, non una «bella copia» del model dei dati nel server
  • 23. Step 7. One Way WebApi  Quando il comando è pronto faccio una chiamata Ajax?  Sì  Dato che tutto il codice è in Javascript oppure negli Aggregates nel server rimane ben poco  Già  Tanto vale usare le Web Api più che MVC  Già  Cosa mi aspetto come risposta?  Niente!  Come niente?  Beh, un metodo dell’Aggregate non restituisce niente…  E allora cosa mando a fare un comando?  Il comando non restituisce niente, ma non ho detto che tu non vieni a sapere niente, non «in (a)sincrono» con la chiamata post
  • 24. Step 8. (il ritorno degli) eventi  Un sistema in generale non evolve solo perché l’utente comanda l’azione  Il sistema potrebbe autonomamente evolvere (processi schedulati)  Il sistema è multiutente (qualche altro utente agisce su un aggregato e tu devi venire a saperto)  Un sistema di eventi (publisher/subscriber) nasce proprio per questo
  • 25. Step 9. Web Sockets/SignalR  Ah ah! Divertente! E adesso che hai sollevato l’evento, chi lo ascolta? Io che sono sul client?  Certo!  E come mi raggiungi, se io non faccio una chiamata HTTP?  Non mi serve l’HTTP, c’è altro  Ah!
  • 26. Domanda. E il mio amato Database?  Intanto, hai notato quando ne abbiamo parlato? Eppure l’applicazione, funziona per la maggior parte senza il Dabatase?  Te gà rason   Bene a questo punto ricordati che:  Parliamo di Repository per gli aggregati  Nascono assieme all’aggregato (lo conoscono bene – internals)  E poi…  E poi?  E poi, a questo punto, comunque ti potresti essere liberato del DB  AAAAAARRGH!!!!  Io voglio bene a SQL Server, ma non c’è solo SQL Server  DDD dice: «Ogni BC ha diritto di organizzare i dati come meglio gli aggrada»  Quindi puoi usare anche cache, NoSQL, files  E tu tratterai questa selta come una scelta consapevole, un tuo requisito e non un vincolo
  • 27. Conclusioni
  • 28. Conclusioni  Mi hai cambiato la vita!  Certo!  Tocca studiare!  Certo!  MI fai scrivere più codice!  Sembra a te, ma comunque tutto quello che scrivi è di valore, mica solo «mapping»  Tu invece ti sei accorto del regalo?  Quale?  Ti ho ridato l’OOP e quindi puoi modellare meglio la tua applicazione e non sei vittima e schiavo di Entity Framework e Linq  È vero!  E poi…  E poi?
  • 29. Step 10. Scaling Out  Un sistema basato sui comandi è molto tracciabile  Un sistema basato sugli aggregati gestisce molto bene lo stato (1 aggregato 1 stato, facile controllare la statefullness/statelessness)  Un sistema basato sugli eventi è facilmente asyncronizzabile grazie all’inserimento delle code  UN sistema DDD/CQRS è naturalmente un sistema pronto per il Cloud Computing
  • 30. Q & A www.slideshare.net/marco.parenzan https://github.com/marcoparenzan/dddmckracken marco [dot] parenzan [at] libero/live [dot] it www.innovazionefvg.net
  • 31. Eventstorming & DDDHandsOn …con @ziobrando e @amelchiori, presto su questi schermi…

×