arquitecturas y posicionamientos tecnológicos
DESCRIPTION
Sesión de #ArchitectureDay de Plain Concepts sobre arquitecturaTRANSCRIPT
Arquitecturas y posicionamientos tecnológicos
MADRIDGeneral Rodrigo 6Cuerpo alto, 1ª planta28003(+34) 915 346 836
BILBAONervión 36ª planta48001(+34) 946 008 168
SEATTLE1511 Third AvenueSuite 512WA 98101(+1) 206 708 1285
www.plainconcepts.com
MADRIDGeneral Rodrigo 6Cuerpo alto, 1ª planta28003(+34) 915 346 836
BILBAONervión 36ª planta48001(+34) 946 008 168
SEATTLE1511 Third AvenueSuite 512WA 98101(+1) 206 708 1285
www.plainconcepts.com
Introducción
http://geeks.ms/blogs/unai
¿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.
Arquitectura
?
Arquitectura y tecnología por necesidadesTecnologías y estilos
Prioridades de negocio
¿RADs vs arquitecturas desacopladas ?.
¿Data-driven vs Domain-Driven?.
¿Modern-apps vs Desktop applications?.
Short Time-to-market vs long-term investment.
Departmental vs misión crítica.
Atraer clients vs Ejecutar el negocio
Infrastructure services
Application services
Client software
Deployment environment
On Premises Private Cloud Public Cloud
ALM
& d
evelo
pm
ent to
ols
Browser
LightSwitch HTML5
HTML5+JavaScript
JavaScript Libs
Native mobile (Windows 8 and Windows Phone 8)
.NET/XAMLHTML5/WinJS
C++
Desktop
.NET WPF/
WinForms
Apps for Office
C++
Web presentation/UI services
LightSwitch server
ASP.NETWebForms
ASP.NETMVC & SPA
Services
LightSwitch OData
services
ASP.NET Web API (REST)
WCF Workflow services
Collaboration and portals
Apps for SharePoint
Full-trust SharePoint
Sites
SharePointServices
Custom application platform
Custom component
s
Entity models
CacheSecurity,
authorizationApp.
workflows
Messaging
Service-Bus Queues
Business products and platforms
Dynamics CRMDynamics AX/
NAV/GP/SL
Storage
FilesSQL
ServerNo SQL Big-Data
App/Web server
IIS (Web Server)
AppFabric
Identity & access
Authentication
Federation
Instrumentalization & monitor
System Center
Arquitectura y tecnología por necesidades
Small/medium Business-Applications
Large Mission criticalBusiness-Applications
Productividad | Fácil empezar Long-term | Core business.
AproximacionesData-driven development.
Simple approaches
Rapid development (RAD).
AproximacionesDomain-driven design o similar.
Arquitecturas desacopladas.
Long-term, mantenimiento evolutivo.
Categorizar aplicaciones o sub-sistemas???
Mission-Critical Application
Small-med size Application
Mission-Critical Core-BusinessSub-system
Subsistema colateral
Subsistema colateral
Subsistema colateral
Large compositeapplication
VS.
¿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
CREATEREADUPDATEDELETE
Application
Conocimientode
los usuarios
Manual de procedimientosData-DrivenApplications
Cliente Desktop para LightSwitch projects• Solamente para data driven LOB applications.• Usa el mismo engine que el usado para LightSwitch HTML5 client.
LightSwitch
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).
UI alternativaspara desktop applications (small/medium size)
WPF
Windows Forms
HTML5JavaScript
ASP.NET MVC con soporte HTML 5• Best-of-breed para Web apps. También con Mobile Features.• MVC ofrece un full HTML rendering control, y mucho majorers practices de desarrollo.• Motor de optimizaciones de búsqueda y RESTFul URLs son partes integrals de MVC.ASP.NET
MVC
Services
LightSwitch OData
Services
ASP.NET Web API (REST)
WCF (SOAP and Binary)
Workflow services
HTML5JavaScript
ASP.NET Web Forms y Web Pages con soporte HTML5• Úsalo si ya conoces web forms y quieres ir hacia nuevos caminos de desarrollo• HTML5: Junto a librerías como Modernizr y otras .• Usa CSS3.
ASP.NETWeb FormsWeb Pages
LightSwitch
LightSwitch y cliente HTML 5• Lo más sencillo para crear Web data-driven apps.• Acoplado end-to-end LightSwitch Web app. • Tenemos puntos de extensibilidad, pero es menos flexible que ASP.NETLightSwitch
LightSwitchHTML5 client
HTML5JavaScript
ASP.NET SPA (Single Page Application)• Úsala para la mayoria de las aplicaciones web modernas, altamente interactivas y con un
mínimo de recargas de servidor, generalmente HTML 5, CSS3.• SPA uso de mucho javascript como Angular JS, KnockoutJS y otrosASP.NET
SPA
(*) Best fit for an “easy to get started way” (initial productivity is the priority) in Data-Driven Apps.
(*) Best fit for a lower level approach and more control (future growth is the priority). SPA for the best web UX with no round-trips.
(*) Use Web-Forms if it is already familiar to you. It might also be easier if your experience is based on desktop apps development.
Demo
BOUNDED CONTEXT C
BOUNDED CONTEXT D
BOUNDED CONTEXT A
BOUNDED CONTEXT B
Unified UI—Visual aggregation
UI
DALDDD
Layered
CQRS Legacysystem
CRUD or data-drivenarchitecture
for simple tasks
DDD Layered architecture
for core-domain
CQRS for core-domain
Oldarchitecture
(legacy)
LARGE APPLICATION
BackgroundServer Tier
Web/app Tier
DatabaseTier
Integration Events Integration Events Integration Events Integration Events
S.O.L.I.D. principles.
Patterns of Enterprise Applications Architecture.
Martin Fowler.
Domain-driven design (DDD).
Eric Evans, Jimmy Nilsson, Vaughn Vernon, etc.
CQRS (Command and Query Responsibility Segregation).
Microsoft P&P ‘CQRS Journey,’ Greg Yound, Udi Dahan.
Event driven andEvent sourcing.
Greg Young, Martin Fowler, etc.
Decoupled architectures.
Use of Dependency Injection and IoC containersMicrosoft P&P Unity, MEF, Ninject, Castle Windsor, etc.
Behavior-driven design (BDD) and TDD.
Dan North, Chris Matts, etc.Frameworks: SpecFlow, Nspec, Cuke4Nuke, Nbehave, and MSpec.
• Single Responsibility principle.• Open/close principle.• Liskov substitution principle.• Interface segregation principle.• Dependency Inversion principle.
Demo
ApplicationModernization
Modern Times!
¿Quiénes somos?
Gorka Madariaga Núñez
@Gk_8
Xbox Developer & Ironman & NBA Freak
Adrián Fernández García
@tracker086
Xbox Developer & Full Time Geek & NFL Addict
¿Qué es una aplicación?
80’s y 90’s
.exe
2000
.exe
Hoy
Evolución
Servicios
Dispositivos
+
+Servidor
Cliente
¿Qué es una app moderna?
Características
Centradas en el usuarioPresencia y accesibilidad en distintos
dispositivosExperiencia de usuario unificada
SocialesPermitir interacción con compañero de
equipo, amigos, familiares, etc.
Centradas en los datosDatos, momento y formato adecuadosDatos compartidos en todo el ecosistema
Modelo de desarrolloDESARROLLO | MEDICIÓN | RETROSPECTIVA
DESARROLLO | MEDICIÓN | RETROSPECTIVA
Planificación Desarrollo FeedbackEntrega
CONTINUO
En apps tradicionales…
En apps modernas…
PlanificaciónREQUISITOS
BACKLOG
RELEASE
FeedbackDesarrollo
VERSION FUNCIONAL
Desarrollo
FeedbackAgile Portfolio Management
Team Room
Visual StudioTFS, Git, TFS+Git, Github, Bitbucket….NET 4.5, WinRT/WinJS, WinPRT, Windows Azure SDK…
Storyboarding, wireframes, pruebas de concepto…
Builds automatizadas
Colaboración
Scrum, CMMI, Kanban…Sistema de etiquetas (tags)
Entrega
Herramienta de feedback (VS+TFS)
Planes de pruebas, pruebas de carga en la nube como servicio…
Despliegues automatizados
Escenarios
Consumo Empresarial
Apps modernas empresariales
Cliente
Proveedor de servicios
WindowsAzure
1PLATAFORMACONSISTENTE
Multi-dispositivo
Ciclo de vida rápido
Cualquier tipo de datos y tamaño
Segura
Núcleo compartido
NetworkingProximityIn-App PurchaseSensorsLocationFile SystemCore app modelThreading
Patrón MVVM
Model
Lógica de negocio
ViewModel
Lógica de presentación
View
XAML
Data Binding
Commands
Notificaciones
Patrón MVVM (definición gráfica)MODELVIEWMODELVIEW
Portable Class Libraries
Un códigoUn proyectoUna librería
Múltiples plataformas!
Estructura básica
Portable Class Library
CoreViewModels
Servicios
Modelos
Windows 8Arranque de la app / Ciclo de
vidaVistas
Converters
ViewModels
Windows PhoneArranque de la app / Ciclo de vida
Vistas
Converters
ViewModels
Y si juntamos todo…
Visual Studio TFS
W8 WP
Desktop Web
Clientes
Mobile Services
Cloud Services Storage
Active Directory
DevBiz ITPro
Team
Storyboarding Feedback
¿One ASP.NET?
¿Os acordáis?La evolución hasta hoy
en dia¿Diferentes productos?
¿Cual selecciono?Web FormsWeb PagesMVCWeb APISignalR
One ASP.NET
¿Porqué elegir?No son imcompatiblesPodemos seleccionar
diversas piezas para un mismo proyecto o solución.
Demo
OWIN?????
OWIN = Open Web Interface for .NET Interfaz para comunicar servidores con
aplicaciones .netEspecificació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 infraestructura- IIS.
Similar a Rack, para el mundo Ruby!
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 infraestructura- IIS.
IDictionary<string, object>
Owin-Katana
Key Name Value Description
"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"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.
Func<IDictionary<string, object>, Task>
Katana???
Katana = Implementación de Owinhttp://
katanaproject.codeplex.com/documentation
Modelo OSSSoporte para frameworks como MVC,
SignalR, Web API
Demo
MADRIDGeneral Rodrigo 6Cuerpo alto, 1ª planta28003(+34) 915 346 836
BILBAONervión 36ª planta48001(+34) 946 008 168
SEATTLE1511 Third AvenueSuite 512WA 98101(+1) 206 708 1285
www.plainconcepts.com
MADRIDGeneral Rodrigo 6Cuerpo alto, 1ª planta28003(+34) 915 346 836
BILBAONervión 36ª planta48001(+34) 946 008 168
SEATTLE1511 Third AvenueSuite 512WA 98101(+1) 206 708 1285
www.plainconcepts.com
Q & A