La persistenza delle entity del domain model è, a dispetto dell'apparente semplicità, un task applicativo che nasconde molteplici problematiche. Perché allora non avvalersi di quello che, attualmente, è il più utilizzato framework di persistenza al mondo?
NHibernate consente di sfruttare al meglio le tecnologie di accesso ai dati, di minimizzare la scrittura di codice e di evitare quindi errori inutili. In una frase, aumentare la nostra produttività.
Introduzione al Domain Model
Domain Model e modello E/R: Paradigm Mismatch
Nasce l'esigenza di un ORM: Introduzione al progetto NH
Architettura di NHibernate: le factory, la session, e le entity
Demo: Configurazione, Il file di mapping, e un esempio con un Oggetto di dominio semplice
Demo: Dirty Checking, Optimistic Lock, e Unit of Work (IndentityMap e Transparent Write Behind)
Presentazione e demo di NHDomain Mapper
Persistenza di un grafo complesso
Strategie di retrieving dei dati
Esempio di architettura di un'applicazione reale
Q & A
In ASP.NET Core 3.0 è stato introdotto il supporto a gRPC, una framework altamente performante per fare Remote Procedure Call (RPC). Leggero e molto efficiente, supportato da molti linguaggi, supporto ad una comunicazione bidirezionale, riduzione del consumo di banda...solo questi solo alcuni dei vantaggi che descrivono gRPC, e che durante la sessione cercheremo di capire se siano reali o meno.
Fatto sta che è una tecnologia assolutamente da conoscere e sfruttare nello sviluppo di app moderno, e non solamente in ambito web.
Codice: https://github.com/andreadottor/XE.Dottor.gRPC
Evento: https://www.xedotnet.org/eventi/grpc-and-c-optimising-night/
Slides from a presentation to students attending the South Shore Chamber of Commerce's Leadership in Action conference about how to use Social Media responsibly.
In ASP.NET Core 3.0 è stato introdotto il supporto a gRPC, una framework altamente performante per fare Remote Procedure Call (RPC). Leggero e molto efficiente, supportato da molti linguaggi, supporto ad una comunicazione bidirezionale, riduzione del consumo di banda...solo questi solo alcuni dei vantaggi che descrivono gRPC, e che durante la sessione cercheremo di capire se siano reali o meno.
Fatto sta che è una tecnologia assolutamente da conoscere e sfruttare nello sviluppo di app moderno, e non solamente in ambito web.
Codice: https://github.com/andreadottor/XE.Dottor.gRPC
Evento: https://www.xedotnet.org/eventi/grpc-and-c-optimising-night/
Slides from a presentation to students attending the South Shore Chamber of Commerce's Leadership in Action conference about how to use Social Media responsibly.
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBSteve Maraspin
Pirma parte del seminario su NoSQL al DiTeDi di Udine del 15/12/2012. Affrontato il caso di studio di un'architettura enterprise, basata su datastore relazionali (PostgreSQL) e non (CouchDB, MongoDB, Redis e OrientDB).
L'Internet of Things è una realtà e primo o dopo avrà il suo impatto significativo nelle nostre aziende.
E a quel punto, i device saranno un asset di cui gestire il lifetime, alla pari dei nostri server, reti e cloud.
Azure IoT è la piattaforma su cui possiamo sviluppare la nostra soluzione IoT e cerchiamo di comprendere cosa significa amministrare un parco device.
Alcuni temi: protocolli di comunicazione e sicurezza del device e della comunicazione. Provisioning dei device. Gestione e monitoraggio dei dispositivi. Strumenti ed API a disposizione per l'IT Pro.
Repository Pattern: Un buon design al servizio della testabilità.
Le slides si riferiscono al talk tenuto in Mikamai Milano durante i TDD Meetup di Milano, il 02/05/2017
Un gioco senza un backend in Internet non è più pensabile. Un backend in Internet senza Azure nemmeno. Quali sono i servizi necessari per costruire un backend di un videogioco? Vediamo quali...
OVERVIEW: Java secondo Microsoft
STRUMENTI:Java nel cloud
MODALITA’: Il Development life cycle secondo Microsoft
APPROCCIO: Stack cloud native basato su JAVA ed Azure
CAMBIAMENTO: Know how necessario per lo sviluppo su AZURE con Java
OPPORTUNITA: Use case di implementazione «first approach»
Azure Day Rome 2019 Reloaded - Utilizzare Azure Kubernetes Service per i nost...azuredayit
Con AKS, Azure Kubernetes Service , è possibile creare istanze Sql server in modo semplice e veloce, beneficiando delle funzionalità di failover clustering native di AKS.
In questa sessione vedremo come installare, gestire e migrare istanze tradizionali su AKS.
Presentazione architettura ed ambiente di sviluppo per dispositivi mobile dotati di SO Android. Verrà mostrata la struttura di un'applicazione creata con l'IDE Eclipse.
Proposta per un MSP (Managed Service Provider).
Zabbix, OcsInventory e GLPI: 3 pacchetti open source per offrire servizi di monitoring, hardware software inventory e IT asset management.
An overview of technologies and best practices for the development of a full-stack web application using JavaScript. How to realize an entire Application Server with a single programming language, the use of event-driven logic and the potential of Node.js.
Simple presentation on Twisted fundamentals.
Originally part 4 of a 4 lectures seminar for the Networking class of the Computer Science course at the University of Parma
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...DotNetMarche
Come è nata l'esperienza della community romana di Host e come siamo riusciti ad essere riconosciuti da Airbnb. Cosa stiamo imparando, cosa funziona, gli errori da non fare.
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...DotNetMarche
4 iscritti al meetup. Nessun commento al post. 1 solo speaker (che poi è tuo cugino). Se sai di cosa sto parlando allora significa che conosci la stretta allo stomaco che si prova quando la tua comminity è silenziosa quanto un cimitero. Ma è davvero la fine? Oppure un community leader può diventare il Dottor Frankenstein di turno e ribaltare la situazione? In questo talk vedremo come basarci sulle metriche per analizzare cosa non sta funzionando nella tua tribù e alcuni consigli azionabili per "resuscitare" l'entusiasmo dei suoi membri.
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBSteve Maraspin
Pirma parte del seminario su NoSQL al DiTeDi di Udine del 15/12/2012. Affrontato il caso di studio di un'architettura enterprise, basata su datastore relazionali (PostgreSQL) e non (CouchDB, MongoDB, Redis e OrientDB).
L'Internet of Things è una realtà e primo o dopo avrà il suo impatto significativo nelle nostre aziende.
E a quel punto, i device saranno un asset di cui gestire il lifetime, alla pari dei nostri server, reti e cloud.
Azure IoT è la piattaforma su cui possiamo sviluppare la nostra soluzione IoT e cerchiamo di comprendere cosa significa amministrare un parco device.
Alcuni temi: protocolli di comunicazione e sicurezza del device e della comunicazione. Provisioning dei device. Gestione e monitoraggio dei dispositivi. Strumenti ed API a disposizione per l'IT Pro.
Repository Pattern: Un buon design al servizio della testabilità.
Le slides si riferiscono al talk tenuto in Mikamai Milano durante i TDD Meetup di Milano, il 02/05/2017
Un gioco senza un backend in Internet non è più pensabile. Un backend in Internet senza Azure nemmeno. Quali sono i servizi necessari per costruire un backend di un videogioco? Vediamo quali...
OVERVIEW: Java secondo Microsoft
STRUMENTI:Java nel cloud
MODALITA’: Il Development life cycle secondo Microsoft
APPROCCIO: Stack cloud native basato su JAVA ed Azure
CAMBIAMENTO: Know how necessario per lo sviluppo su AZURE con Java
OPPORTUNITA: Use case di implementazione «first approach»
Azure Day Rome 2019 Reloaded - Utilizzare Azure Kubernetes Service per i nost...azuredayit
Con AKS, Azure Kubernetes Service , è possibile creare istanze Sql server in modo semplice e veloce, beneficiando delle funzionalità di failover clustering native di AKS.
In questa sessione vedremo come installare, gestire e migrare istanze tradizionali su AKS.
Presentazione architettura ed ambiente di sviluppo per dispositivi mobile dotati di SO Android. Verrà mostrata la struttura di un'applicazione creata con l'IDE Eclipse.
Proposta per un MSP (Managed Service Provider).
Zabbix, OcsInventory e GLPI: 3 pacchetti open source per offrire servizi di monitoring, hardware software inventory e IT asset management.
An overview of technologies and best practices for the development of a full-stack web application using JavaScript. How to realize an entire Application Server with a single programming language, the use of event-driven logic and the potential of Node.js.
Simple presentation on Twisted fundamentals.
Originally part 4 of a 4 lectures seminar for the Networking class of the Computer Science course at the University of Parma
Creare una community dal basso ed arrivare ad un'azienda milionaria - Emanue...DotNetMarche
Come è nata l'esperienza della community romana di Host e come siamo riusciti ad essere riconosciuti da Airbnb. Cosa stiamo imparando, cosa funziona, gli errori da non fare.
Metriche per Zombie Communities: come "iniettare vita" in tribù di morti vive...DotNetMarche
4 iscritti al meetup. Nessun commento al post. 1 solo speaker (che poi è tuo cugino). Se sai di cosa sto parlando allora significa che conosci la stretta allo stomaco che si prova quando la tua comminity è silenziosa quanto un cimitero. Ma è davvero la fine? Oppure un community leader può diventare il Dottor Frankenstein di turno e ribaltare la situazione? In questo talk vedremo come basarci sulle metriche per analizzare cosa non sta funzionando nella tua tribù e alcuni consigli azionabili per "resuscitare" l'entusiasmo dei suoi membri.
Vedremo come sfruttare le potenzialità di WPF per realizzare applicazioni diverse dalle classiche LOB (Line of Business applications), basandosi su 3D e Natural User Interface.
Cos'è la UI Composition e che problemi può risolvere
Perchè MVVM e WPF sono importanti per la UI Composition
Il concetto di 'region' e 'UI Injection'
Analisi del toolkit PRISM di Microsoft e cosa comporta realizzarsene uno in proprio.
Cos'è la UI Composition e che problemi può risolvere
Perchè MVVM e WPF sono importanti per la UI Composition
Il concetto di 'region' e 'UI Injection'
Analisi del toolkit PRISM di Microsoft e cosa comporta realizzarsene uno in proprio.
In questa sessione verranno analizzate alcune pagine ASP.NET che verranno sottoposte a refactoring per aumentarne la modularità e comprensibilità del codice, nonchè favorire la testabilità delle funzioni core.
Si presenteranno techiche e strumenti che è possibile utilizzare in modo da avere un approccio più razionale ed 'ordinato' nella stesura del codice. Le pratiche ed i concetti illustrati sono di carattere generale, quindi liberamente applicabili ad ogni tipologia di applicazione.
In questa sessione a quattro mani introdurremo alcuni dei refactorings più comuni e più facilmente applicabili nell'utilizzo quotidiano, e vedremo come risolverli in maniera facile, veloce ed indolore utilizzando ReSharper e pochi colpi di tastiera.
Incidentalmente, inseriremo nel mentre un pò di patterns e di Test-Driven Development, perchè "se non è testato, allora non funziona"
"It's all about simplicity": perchè le applicazioni basate su Javascript sono spesso complesse, farraginose e difficilmente manutenibili quando è possibile renderle semplici, eleganti e funzionali?
In questa sessione a quattro mani vedremo per prima cosa come sfruttare Javascript al meglio, utilizzando i prototipi, i namespaces, gli oggetti, gli eventi, le chiusure e le altre mille funzionalità di un linguaggio di programmazione troppo spesso sottovalutato.
Ci soffermeremo poi su jQuery per analizzare il suo contributo nel semplificare task normalmente tediosi come la manipolazione del DOM, la gestione degli eventi, la programmazione asincrona (AJAX) e le problematiche di compatibilità cross-browser.
In questa sessione 'hands-on' suddivisa in tre parti, vedremo come, codice alla mano, è possibile realizzare applicazioni business tramite Silverlight, cercando inoltre di renderle compatibili con WPF (Windows Presentation Foundation) in modo da riutilizzare ciò che è stato sviluppato
Ci focalizzeremo su questioni come:
- architettura del progetto
- realizzazione di interfacce utente
- interazione con il Data Layer e servizi in generale
- multitargetting Silverlight / WPF
-integrazione dell'applicazione principale con moduli / plugin, tramite pattern MVP e MVC (per semplificare il porting su WPF)
- modularità ed inversione di controllo
Asp.NET MVC è un nuovo framework per lo sviluppo di applicazioni web alternativo al modello webform. Questo consente di utilizzare il pattern MVC per lo sviluppo di applicazioni Asp.NET, permettendo quindi una miglior separazione delle responsabilità che a sua volta porta ad una maggior manutenibilità, riusabilità e facilità nel testing.
La sessione illustrerà i motivi che hanno portato alla nascita di Asp.NET MVC e le sue caratteristiche fondamentali.
Agenda:
- Storia dei framework MS per lo sviluppo web
- Introduzione a Asp.NET MVC
- Vantaggi di Asp.NET MVC
- Il pattern MVC
- Hello MVC: DEMO
- Componenti di MVC: Routing, Controller, Model, View
Nello sviluppo software il termine “test” assume molti significati;
le tipologie di test sono infatti numerose, ma tutte hanno un unico scopo: provare che il software realizzato sia attinente alle specifiche e non presenti bug.
Tra tutti i test, quelli unitari rappresentano senza dubbio la categoria più interessante per lo sviluppatore, dato che sono dedicati alla verifica di piccole porzioni di
codice e sono spesso scritti nello stesso linguaggio usato per realizzare il software.
Agenda:
- Introduzione ai concetti base del testing
- Test unitari
- Librerie xUnit ed automazione dei test
- Alcuni pattern standard per test unitari
Un altro building block del Framework 3.0 si chiama CardSpace ed ha l'ambizione di risolvere uno dei problemi più ricorrenti della quasi totalità delle applicazioni sia internet sia intranet: l'autenticazione utente.
I problemi correlati all'autenticazione sono di diversa natura: da una parte la difficoltà dell'utente nel gestire elenchi di username e password, dall'altra la sempre crescente necessità di evitare l'hacking delle password, o ancora la tipologia di informazioni che un utente vuole rivelare di sé a seconda del contesto, fino ad essere anche un semplice utente anonimo; ed infine la necessità di contemplare autorità di autenticazioni differenti a seconda del contesto.
Se nel passato Passport ha fallito la sua missione, CardSpace affronta in modo totalmente differente il problema rendendosi fruibile cross-browser e cross-platform per costruire un sistema universale di identificazione nel pieno rispetto della privacy.
7. 1.E’ un algoritmo ricorsivo: Tutti le istanze di
oggetti “raggiungibili” da un oggetto
persistente diventano anch’essi persistenti.
Top Level
(root)
9. Soluzione di NHibernate:
Persistence by Reachability con Cascade
Istanza Istanza
Associazione
Cascade
Behaviour
10. • Hibernate Query
Language
• Linguaggio di
Intgerrogazione
Object Oriented
• Interrogazione
mediante SQL puro
• Risultato mappato
sulle entity
• Query by example
• Query prodotta a
partire da una
istanza di oggetto
prorotipo
• Query By Criteria
• Esecuzione di
Query Type Safe e
Object Oriented
QbC QbE
HQL
SQL
native
16. User Interface Layer
Context E E E
Business Layer
Context E E
Data Access Layer
Context Provider
DAO DAO DAO
Context:
Identity Map
Unit of Work
Automatic Dirty Check
Optimistic Concurrency
Pessimistic Concurrency
Proxy per Lazy...
18. “...Hibernate’s job is to reduce the amount of code you have to write
for the most common 90 percent of use cases (common CRUD and
reporting)...”
“…Hibernate’s learning curve is high at first.
In our experience, a developer needs at least two to four weeks to
learn the basics.
Don’t jump on Hibernate one week before your project deadline.
It won’t save you…”
“…Finally, use SQL, JDBC, and stored procedures for the 5 percent of
use cases
you can’t implement with Hibernate, such as mass data manipulation
or complex reporting queries with vendor-specific SQL functions…”
[Gavin King, Hibernate in Action]
19. Il Domain Model agnostico al layer di persistenza...ma deve essere
disegnato per “favorire” la persistenza...
Fornire Identity Field a tutte gli Entity Type
Entity che hanno delle collection devono essere definite come
IList<T> (favorisce la Dependency Injection)
Evitare classi sealed per le entity che hanno bisogno di lazy (gli
ORM solitamente forniscono dei proxy object)
DB: Favorite l’uso Surrogate Keys in luogo di Natural Keys, evitate
Composite Keys, pensate al Versioning