Este documento presenta una introducción sobre arquitecturas y posicionamientos tecnológicos. Explica que las aplicaciones se pueden categorizar por su tamaño y criticidad, y que la tecnología elegida depende de estas necesidades. Para aplicaciones pequeñas y medianas se recomiendan aproximaciones rápidas de desarrollo, mientras que para aplicaciones críticas el enfoque debe ser a largo plazo y enfocado al dominio.
2. SEATTLE
1511 Third Avenue
Suite 512
WA 98101
(+1) 206 708 1285
MADRID
BILBAO
General Rodrigo 6
Cuerpo alto, 1ª planta
28003
(+34) 915 346 836
Nervión 3
6ª planta
48001
(+34) 946 008 168
www.plainconcepts.com
3. Introducción
¿Quíen soy?
Unai Zorrilla Castro
Development Lead en Plain Concepts
Microsoft MVP ASP.NET
Microsoft Data Insider
¿Expectativas?
Hablar de “arquitectura” y posicionamiento tecnológico.
Estado del arte en stack webs.
unai@plainconcepts.com
http://geeks.ms/blogs/unai
7. Arquitectura y tecnología por
necesidades
Small/medium
Business-Applications
Productividad | Fácil empezar
Large Mission critical
Business-Applications
Long-term | Core business.
Aproximaciones
Aproximaciones
Data-driven development.
Domain-driven design o similar.
Simple approaches
Arquitecturas desacopladas.
Rapid development (RAD).
Long-term, mantenimiento evolutivo.
8. Categorizar aplicaciones o subsistemas???
Large
composite
application
Small-med size Application
VS.
Subsistema
colateral
Mission-Critical Core-Business
Sub-system
Mission-Critical Application
Subsistema
colateral
Subsistema
colateral
9. ¿Data Driven?
What is a Data-Driven Application?
Basicamente, CRUD application (CREATE, READ, UPDATE,
DELETE).
El nivel de lógica de negocio es bajo
ISSUES cuando evolucionamos a lógicas más complejas
Application
Conocimiento
de
los usuarios
Data-Driven
Applications
Manual de procedimientos
CREATE
READ
UPDATE
DELETE
10. UI alternativas
para desktop applications (small/medium size)
WPF (Windows Presentation Foundation)
• La preferida para Windows-based desktop con complejidad de UI, customización de estilos.
• Mismas Skills que otros muchos productos conocidos, Store Apps, Silvelight, LakeView...
• Capacidades de asincronía simplificadas .NET 4.5 (async/await).
Windows Forms
•
•
•
•
No necesitamos tantas necesidades de UI
Solución madura
Limita el camino de aprendizaje hacia Store apps, no está en el mismo path
Capacidades de asincronía simplificadas .NET 4.5 (async/await).
Cliente Desktop para LightSwitch projects
• Solamente para data driven LOB applications.
• Usa el mismo engine que el usado para LightSwitch HTML5 client.
13. LARGE APPLICATION
Web/app
Tier
Unified UI—Visual aggregation
UI
DAL
Legacy
system
Background
Server
Tier
Database
Tier
Integration Events
Integration Events
Integration Events
Integration Events
14. Martin Fowler.
Greg Young, Martin Fowler, etc.
Dan North, Chris Matts, etc.
Frameworks: SpecFlow, Nspec,
Cuke4Nuke, Nbehave, and MSpec.
Eric Evans, Jimmy Nilsson,
Vaughn Vernon, etc.
Use of Dependency Injection
and IoC containers
Microsoft P&P Unity, MEF, Ninject,
Castle Windsor, etc.
Microsoft P&P „CQRS Journey,‟
Greg Yound, Udi Dahan.
•
•
•
•
•
Single Responsibility principle.
Open/close principle.
Liskov substitution principle.
Interface segregation principle.
Dependency Inversion principle.
17. ¿Quiénes somos?
Adrián Fernández García
Gorka Madariaga Núñez
@tracker086
@Gk_8
agarci@plainconcepts.com
gmadariaga@plainconcepts.com
Xbox Developer & Full Time Geek & NFL Addict
Xbox Developer & Ironman & NBA Freak
18. ¿Qué es una aplicación?
80’s y 90’s
2000
.exe
.exe
Hoy
21. Características
Centradas en el usuario
Presencia y accesibilidad en distintos dispositivos
Experiencia de usuario unificada
Sociales
Permitir interacción con compañero de
equipo, amigos, familiares, etc.
Centradas en los datos
Datos, momento y formato adecuados
Datos compartidos en todo el ecosistema
24. En apps modernas…
Planificación
REQUISITOS
Feedback
Agile Portfolio Management
Scrum, CMMI, Kanban…
Sistema de etiquetas (tags)
Team Room
Storyboarding,
wireframes,
pruebas de
concepto…
Herramienta de
feedback (VS+TFS)
Desarrollo
Feedback
Entrega
Desarrollo
Visual Studio
TFS, Git, TFS+Git, Github, Bitbucket…
.NET 4.5, WinRT/WinJS, WinPRT, Windows Azure SDK…
Planes de pruebas, pruebas de carga
en la nube como servicio…
VERSION FUNCIONAL
Builds
automatizadas
Despliegues
automatizados
31. Estructura básica
Windows Phone
Windows 8
Arranque de la app / Ciclo de vida
Arranque de la app / Ciclo de vida
Vistas
Vistas
Converters
Converters
ViewModels
ViewModels
Portable Class Library
CoreViewModels
Servicios
Modelos
32. Y si juntamos todo…
Cloud Services
Storage
W8
Mobile Services
Active Directory
Desktop
Biz
Dev
ITPro
Team
Visual Studio
TFS
Storyboarding
Feedback
Clientes
WP
Web
33. ¿One ASP.NET?
¿Os acordáis?
La evolución hasta hoy en
dia
¿Diferentes
productos?¿Cual
selecciono?
Web Forms
Web Pages
MVC
Web API
SignalR
34. One ASP.NET
¿Porqué elegir?
No son imcompatibles
Podemos seleccionar
diversas piezas para un
mismo proyecto o solución.
35.
36. OWIN?????
OWIN = Open Web Interface for .NET
Interfaz para comunicar servidores con
aplicaciones .net
Especificación en http://owin.org/
¿Qué intenta?
Eliminar el acoplamiento actual del stack web.
No solo en codigo de framework y ASP.NET
sino también entre ASP.Net y la infraestructuraIIS.
Similar a Rack, para el mundo Ruby!
37. OWIN – KATANA ?????
¿Qué propone?
Eliminar el acoplamiento actual del stack web.
No solo en codigo de framework y ASP.NET
sino también entre ASP.Net y la infraestructuraIIS.
IDictionary<string, object>
38. Owin-Katana
Key Name
"owin.RequestBody"
A Stream with the request body, if
any. Stream.Null MAY be used as a
placeholder if there is no request
body. See Request Body.
"owin.RequestHeaders"
An IDictionary<string, string[]> of
request headers. See Headers.
"owin.RequestMethod"
Func<IDictionary<string, object>, Task>
Value Description
A string containing the HTTP request
method of the request (e.g., "GET",
"POST").
"owin.RequestPath"
A string containing the request path.
The path MUST be relative to the
"root" of the application delegate;
see Paths.
"owin.RequestPathBase"
A string containing the portion of the
request path corresponding to the
"root" of the application delegate;
see Paths.
"owin.RequestProtocol"
A string containing the protocol
name and version (e.g. "HTTP/1.0" or
"HTTP/1.1").
"owin.RequestQueryString"
A string containing the query string
component of the HTTP request URI,
without the leading “?” (e.g.,
"foo=bar&baz=quux"). The value
may be an empty string.
"owin.RequestScheme"
A string containing the URI scheme
used for the request (e.g., "http",
"https"); see URI Scheme.
39. Katana???
Katana = Implementación de Owin
http://katanaproject.codeplex.com/documentati
on
Modelo OSS
Soporte para frameworks como MVC, SignalR,
Web API
40.
41. SEATTLE
1511 Third Avenue
Suite 512
WA 98101
(+1) 206 708 1285
MADRID
BILBAO
General Rodrigo 6
Cuerpo alto, 1ª planta
28003
(+34) 915 346 836
Nervión 3
6ª planta
48001
(+34) 946 008 168
www.plainconcepts.com
Microsoft Technologies possibilities and combinations are endless, so, what Technologies should I use for each application approach?Let’s dig into each of the approaches and their Preferred Technologies..
Create a Hello World LS HTML5 sample, from Scratch.New Project HTML5 C#New Table in Sever (Rename the table/entity to “Conference”)Add Screen BrowseConferences related to that tableAdd Screen AddNewConference related to that tableEdit the Scree BrowseConferences and add 2 buttons, one for Add/Edit, another button for EditSelected (both related to current Screens)SHOW EXTENSIBILITY POINTSHTML-JAVASCRIPT extensibility point.NET extensibility pointRUN the App and add a few records and aditShow/execute the other Complex CONFERENCE LS application we have for the conferences…Say we’ll extend it in order to integrate this BOUNDED-CONTEXT to the other, through the EVENT-BUS
Create a Hello World LS HTML5 sample, from Scratch.New Project HTML5 C#New Table in Sever (Rename the table/entity to “Conference”)Add Screen BrowseConferences related to that tableAdd Screen AddNewConference related to that tableEdit the Scree BrowseConferences and add 2 buttons, one for Add/Edit, another button for EditSelected (both related to current Screens)SHOW EXTENSIBILITY POINTSHTML-JAVASCRIPT extensibility point.NET extensibility pointRUN the App and add a few records and aditShow/execute the other Complex CONFERENCE LS application we have for the conferences…Say we’ll extend it in order to integrate this BOUNDED-CONTEXT to the other, through the EVENT-BUS
Create a Hello World LS HTML5 sample, from Scratch.New Project HTML5 C#New Table in Sever (Rename the table/entity to “Conference”)Add Screen BrowseConferences related to that tableAdd Screen AddNewConference related to that tableEdit the Scree BrowseConferences and add 2 buttons, one for Add/Edit, another button for EditSelected (both related to current Screens)SHOW EXTENSIBILITY POINTSHTML-JAVASCRIPT extensibility point.NET extensibility pointRUN the App and add a few records and aditShow/execute the other Complex CONFERENCE LS application we have for the conferences…Say we’ll extend it in order to integrate this BOUNDED-CONTEXT to the other, through the EVENT-BUS
Create a Hello World LS HTML5 sample, from Scratch.New Project HTML5 C#New Table in Sever (Rename the table/entity to “Conference”)Add Screen BrowseConferences related to that tableAdd Screen AddNewConference related to that tableEdit the Scree BrowseConferences and add 2 buttons, one for Add/Edit, another button for EditSelected (both related to current Screens)SHOW EXTENSIBILITY POINTSHTML-JAVASCRIPT extensibility point.NET extensibility pointRUN the App and add a few records and aditShow/execute the other Complex CONFERENCE LS application we have for the conferences…Say we’ll extend it in order to integrate this BOUNDED-CONTEXT to the other, through the EVENT-BUS