440 likes | 568 Views
.NET baserede arkitekturer. Henrik Lykke Nielsen Softwarearkitekt Microsoft Regional Director for Danmark lykke@captator.dk www.captator.dk 8748 0202 2237 3311. Agenda. Hvad er det egentlig vi vil? Objektorienteret serviceorienteret If OO Then HowTo Logiske flerlagsmodeller del 1
E N D
.NET baserede arkitekturer Henrik Lykke Nielsen Softwarearkitekt Microsoft Regional Director for Danmark lykke@captator.dk www.captator.dk 8748 02022237 3311 .NET baserede arkitekturer ved Henrik Lykke Nielsen
Agenda • Hvad er det egentlig vi vil? • Objektorienteret serviceorienteret • If OO Then HowTo • Logiske flerlagsmodeller del 1 • Service orienterede arkitekturer • Framework udvikling • Eksempler på fleksible, generiske arkitekturer • ADO.NET • Logning • Logiske flerlagsmodeller del 2 • Distribution – pragmatisk fanatisme • Lav den rigtige applikation .NET baserede arkitekturer ved Henrik Lykke Nielsen
Målsætning med IT-infrastrukturen Produktivitet Simpel administration, udrulning og anvendelse Effektivisere brugeres arbejde – rigtig information Robust og understøttende implementation (for brugere) Pålidelig Performance Stabilitet, tilgængelighed og skalerbarhed Sikkerhed Sammenhæng Integration mellem applikationer Brug af standarder Brug af tilgængelige resourcer og funktionalitet Samlet omkostning - Total Cost of Ownership Udbytte - Return on Investment Små projekter – hurtig leverance – lille risiko Økonomi .NET baserede arkitekturer ved Henrik Lykke Nielsen
Gartner konklusioner • Application integration will be, arguably, the most important IS deliverable during the next five years. • The most common mistake in application integration is treating it as the responsibility of individual development teams - it is an enterprise-wide issue. • The two keys to implementing great business processes are “zero-latency enterprise” and “straight-through processing” strategies. • The most successful businesses will deploy a real-time, middleware-based “enterprise nervous system” for integrating applications. • Create an integration competency center, maintain an evolving integration architecture (e.g., city plan) and implement a shared technical infrastructure for integration. • All of the business units, application systems, people and automated devices throughout a virtual enterprise should be viewed as participants in one holistic system. .NET baserede arkitekturer ved Henrik Lykke Nielsen
Agility – evnen til forandring “As we see it, enterprise technologies need to do far more than serve up the essential ‘abilities’ – availability, reliability, scalability, and manageability; they also need to provide businesses with the agility to understand, anticipate, and respond to changing customer needs.” – Steve Ballmer .NET baserede arkitekturer ved Henrik Lykke Nielsen
Lav gode afvejninger • Performance • Skalerbarhed • Korrekthed • Stabilitet • Sikkerhed • Hurtig udvikling • Kodegenbrug • Let vedligehold • Lille kodemængde • Letforståelig kode • Fleksibilitet • Centralisering af implementation .NET baserede arkitekturer ved Henrik Lykke Nielsen
Objekt orientering serviceorienteret • Traditionel statefull OO: • Serviceorienteret stateless model: Session-state { Property1 Property2 Property3 Method( ) Method(p1, p2, p3) Statefull og chatty Stateless Stateless og chunky .NET baserede arkitekturer ved Henrik Lykke Nielsen
Objekt orientering • Klassisk syn ofte: Klasser håndterer selv persistens • Indeholder CRUD metoder • Ikke lagdelt – ikke løse koblinger • Nedarvning handler om typer ikke funktionalitet • To OO or not to OO? What is the question? • OO er ikke et mål men et middel • Brug OO på de rigtige tidspunkter • Ikke alt er OO • Design patterns kan give god OO • Men ikke altid .NET baserede arkitekturer ved Henrik Lykke Nielsen
Brugen af OO OO er død! R.I.P. Længe leve OO! OO er mere end nogensinde før af stor vigtighed Men anbefalingerne om brugen har ændret sig .NET baserede arkitekturer ved Henrik Lykke Nielsen
Logiske flerlagsmodeller User Business Data MSSQL XXDB .NET baserede arkitekturer ved Henrik Lykke Nielsen
Logiske flerlagsmodeller • Hvorfor lagdele? • Skabe uafhængighed af forandring • Skabe overblik og struktur • Datalaget er ikke bare databaser • Præsentationslaget er meget volatilt • Forretningslogik er den kode der (stadig) gælder • ...uanset valgt præsentationslag • ...uanset valgt datakilde .NET baserede arkitekturer ved Henrik Lykke Nielsen
Logiske flerlagsmodeller • Lagdeling kan være en rekursiv process • Komponenter, services, assemblies, ... • er logiske enheder, der kan bestå af flere fysiske .NET baserede arkitekturer ved Henrik Lykke Nielsen
Hvad gør et system agilt? • Fleksibel, servicebaseret arkitektur • Løse koblinger • Beskedbaseret (message-driven) • Udveksling af bløde ”dokumenter” i stedet for hårde kald • Kan være en implementationsmæssig detalje • Standardbaseret kommunikation og datarepræsentation • Klar adskillelse mellem generisk og specifik kode .NET baserede arkitekturer ved Henrik Lykke Nielsen
Hvad er services? • Citat Microsoft: • Ikke kun forretningsprocesser • Ikke kun via webben • Services er • Baserede på standarder • Uafhængige af platform, sprog, teknologier • Gode til distribuerede applikationer • Gode til integration af heterogene systemer • Ofte asynkrone og message baserede • Gode for langvariage kald, skalerbarhed, sikre systemer • Baseret på grovkornede kald • Ofte fokuseret på genbrug af høj-niveau processer (f.eks. forretningsprocesser) Visse vasse!! What is a "Service" ?A reusable Business Process that can be accessed through the web .NET baserede arkitekturer ved Henrik Lykke Nielsen
Services • Finkornede contra grovkornede metoder • Services er ofte grovkornede • Alle data med i kaldet => ingen state på serveren • Bør dog være komplette • Stærke koblinger skyldes ofte mange ”små kald” • Services gør stærke koblinger svage (løse) .NET baserede arkitekturer ved Henrik Lykke Nielsen
XML web services som services • Det er ikke kun XML web services, der er services! • Direkte services • WebMethod attribut direkte på metode • Ingen (yderligere) abstraktion • Facade services • Ikke (nødvendigvis) en 1-til-1 sammenhæng mellem logik metoder og service metoder • Undgår at logik metoden forurenes med service teknologi og service logik <WebMethod(...)>Sub Metoden() <WebMethod(...)>Sub Facaden() Sub Metoden() .NET baserede arkitekturer ved Henrik Lykke Nielsen
Framework Class Libary System.Web System.Windows.Forms Services UI Design ComponentModel Description HtmlControls “Form” “Control” Discovery WebControls System.Drawing Protocols Caching Security Drawing2D Printing Text Configuration SessionState Imaging System.Data System.Xml ADO.NET SqlClient Xsl/XPath Serialization “Reader/Writers” “XmlDocument” OleDb Odbc System Collections IO Configuration Runtime InteropServices Security Net CodeDom Remoting Text Reflection Diagnostics Serialization Globalization Resources Threading .NET baserede arkitekturer ved Henrik Lykke Nielsen
Hvad er et framework? • A set of cooperating classes that makes up a reusable design for a specific class of software. A framework provides architectural guidance by partitioning the design into abstract classes and defining their responsibilities and collaborations. A developer customizes the framework to a particular application by subclassing and composing instances of framework classes.[Design Patterns, GOF, 1995] .NET baserede arkitekturer ved Henrik Lykke Nielsen
Hvad er et framework? • Et framework er en række konsistent sammenhængende softwareenheder, der implementerer en given arkitektur eller centrale dele deraf for en familie af applikationer. [.Henrik, 2002] .NET baserede arkitekturer ved Henrik Lykke Nielsen
Komponent frameworks giver... • Kodegenbrug… • Effektivitet i udviklingen: Billigere og hurtigere • Effektivitet i vedligeholdelsen • Lettere at rette fejl og ændre funktionalitet • Færre fejl (efterhånden ;^) • Indpakning letter optimering • Bedre abstraktion • Reducerer kompleksitet • Mindre mængder konkret applikationskode • Mere ensartet programmeringsstil .NET baserede arkitekturer ved Henrik Lykke Nielsen
Kriterier for gode frameworks • Performance, skalerbarhed og stabilitet er givne (!) • Skal give stor grad af genbrug • Skal understøtte arkitekturen • Har indbygget kompetence • Er sammenhængende og konsistente • Lette at forstå brugen af • Giver god implicit kodestandard • Er fleksible – understøtter agility • Er ikke statiske over tid • Skal designes til at kunne ændres og udvides • Frameworks kan være tekniske såvel som forretningsspecifikke .NET baserede arkitekturer ved Henrik Lykke Nielsen
Web/Win Form Controls VS.NET Class Generator XML Parser Kode Cust OLEDB SQL … ADO.NET arkitekturen VS.NET Designers DataSet .NET Data Provider DataAdapter DataReader Item Command Order Connection <xml>…</xml> .NET baserede arkitekturer ved Henrik Lykke Nielsen
Data Provider System.Data • Managed Providers • System.Data.SqlClientMS SQL Server 7 eller senere • System.Data.OleDb • System.Data.Odbc • System.OracleClient • Består af Connection, Command, DataReader, DataAdapter • Specifikke for datasource • Er ikke (helt) ens i struktur • Lidt besynderlig opbygning Data store .NET baserede arkitekturer ved Henrik Lykke Nielsen
System.Data OleDb • OleDbConnection • IDbConnection • OleDbCommand • IDbCommand • OleDbDataAdapter • DbDataAdapter • DataAdapter • IDataAdapter • IDataAdapter • IDbDataAdapter • IDataAdapter • OleDbDataReader • IDataReader • IDataRecord • IDataRecord SqlClient • SqlConnection • IDbConnection • SqlCommand • IDbCommand • SqlDataAdapter • DbDataAdapter • DataAdapter • IDataAdapter • IDataAdapter • IDbDataAdapter • IDataAdapter • SqlDataReader • IDataReader • IDataRecord • IDataRecord .NET baserede arkitekturer ved Henrik Lykke Nielsen
Overvejelser • Løse bindinger kræver adskillelse af provider og consumer – implementation skjult for klienterne • System.Data.Ups • Providers er specifikke og forskelligeBåde på type og data niveau (f.eks. forskellig SQL-syntaks og semantik) • Trade-off • performance og specifik funktionalitet • generalitet (uafhængighed af provider) • Målsætning: • Om muligt have det bedste af begge verdener • Specifik opførsel søges specificeret deklarativt, afkoblet og som data • ADO.NET er meget fleksibelt, meeen... • Der skal en del kode til • Lav derfor forsimplende abstraktioner .NET baserede arkitekturer ved Henrik Lykke Nielsen
Generaliseret tilgang til provider • Mange muligheder... • Brug overloading • På kaldsstedet tages konkret stilling • Indpakning • Bliver noget tungt • Programmér mod basisklasser og interfaces • Ikke al funktionalitet er tilgængelig • Instansiering stadig et problem • Lav instansieringerne via en factory • Lav under alle omstændigheder et generelt datalag .NET baserede arkitekturer ved Henrik Lykke Nielsen
Valgt løsning • ConnectionInfo • Abstrakt strategiklasse: DataStrategy • Konkrete strategier:DataStrategySqlClient, DataStrategyOleDb, ... • DataStrategyFactory:GetStrategy(ConnectionInfo) • RecordIdStrategy: ...Identity, ...Guid, ...TableDefined, ... • TimeStampStrategy: ...Auto, ...Guid, ...DateTime, ... • DataUtil • DataStringBuilders .NET baserede arkitekturer ved Henrik Lykke Nielsen
ConnectionInfo • Captator.Eifos.Data.ConnectionInfo • Dataklasse til ”connection”-informationer • Specifikation af konkrete strategier • New (dataStrategyNameSpace) • Provider, Server, Database, User, Password • RecordIdStrategy, TimeStampStrategy • Mulighed for Connection objekt • DataUtil.CreateConnectionStringKalder virtuel metode på DataStrategy .NET baserede arkitekturer ved Henrik Lykke Nielsen
Eifos.Data <<Create>> ConnectionInfo 1 2.1 2 DataUtil DataStrategy 2.3 2.4 StringBuilders SqlClientStrategy OleDbStrategy <<Create>> 2.2.1 2.2 DataStrategyFactory .NET baserede arkitekturer ved Henrik Lykke Nielsen
Opsummering - Data • Data • Abstrakt DataStrategy • Konkrete strategier instansieres af DataStrategyFactory vha. reflektion • Konkrete klasser – stateless aht. caching (singleton) • Ortogonal db-funktionalitet som selvstændige strategier • RecordIdStrategy, TimeStampStrategy • ConnectionInfo samler trådene • ”Stateless” utility funktioner som shared members .NET baserede arkitekturer ved Henrik Lykke Nielsen
ADO.NET • DataSet DataReader • Foretræk generelt DataSets • DataReaders kun ved brug-og-smid-væk • Brug ikke visuelle data-access designere • Brug ikke typed DataSets som et alternativ til generalisering • Pas på med Visual Studios typed Datasets • Lav et ADO.NET baseret framework .NET baserede arkitekturer ved Henrik Lykke Nielsen
Logning • Brugseksempel: • Logning af fejl • Mål: • Kunne logge til mange forskellige”medier” • Selve logningen uafhængig af de specifikke medier • Logge til en række af medier på én gang • Logning kan i sig selv medføre fejl • Der skal foretages en failover logning X 1 2 Y 2.1 .NET baserede arkitekturer ved Henrik Lykke Nielsen
* Eifos.Logging - et generisk logging framework LogManager AbstractLogger * FailOver SqlLogger EventLogger VisualLogger MessageQueueLogger TextFileLogger XmlFileLogger .NET baserede arkitekturer ved Henrik Lykke Nielsen
Eifos.Logging • LogManager • _loggersCollection • LogData metode • Logger • _failOverCollection • LogData metode • Specifikke konstruktører på konkrete loggere • F.eks. ConnectionInfo på SqlLogger • Abstrakt Formatter (ikke kun relevante ved logning!) • New(ByVal formatterDefinition As String) • Specifikke konstruktører på konkrete formattere • F.eks. TableName på DataSourceDataFormatter .NET baserede arkitekturer ved Henrik Lykke Nielsen
Eksempler fra vores framework (Eifos) • Data • Logning • Konfigurationsinformationer • Bruger-administration og -håndtering • Libra dokumentmodel • Website framework • Automatiseret data og user interface integration • Automatisk generering af user interface • Calculus • Håndtering af multiple sprog (internationalisering) • Statehåndtering og Caching • Generisk ObjectFactory • ... og meget, meget mere .NET baserede arkitekturer ved Henrik Lykke Nielsen
Flerlagsmodellen – logisk model Overfladisk! User Business Data MSSQL XXDB .NET baserede arkitekturer ved Henrik Lykke Nielsen
Logisk arkitekturmodel • Adskille forretningsregler og UI fra data tilgang • Adskille data logik fra data tilgang • Adskille generelle aspekter fra konkret kode • Adskille konkret UI fra generel UI • Resultat:Fleksibilitet og genbrug .NET baserede arkitekturer ved Henrik Lykke Nielsen
Data håndtering og tilgang • Business objekter med CRUD • Typisk statefull, håndterer selv database tilgang, altid metoder • Business Logic (BL) og Data Access Logic (DAL) • Business objekter/entiteter • Strongly typed, muligvis statefull, ofte metoder • Visual Studios ”Strongly Typed DataSets” • Strongly typed, ingen custom metoder • Datasets • Weakly typed ADO.NET objekter, ingen custom metoder • XML • Weakly typed XML dokument, ingen custom metoder • DAL • Stateless funktioner til database tilgang (CRUD, queries, m.m.) .NET baserede arkitekturer ved Henrik Lykke Nielsen
VisualLogger Logging Loggers.* Data ADO LibraDAL DocumentWebUIBL LibraBL DocumentValueDAL Udsnit af logisk arkitekturmodel Formatters Ext. Fil IOMSMQEventLog... Eifos.Data – generisk data lag Stateless funk. &Entiteter Stateless funktioner Statelessfunk. &Entiteter Stateless funktioner .NET baserede arkitekturer ved Henrik Lykke Nielsen
Aspekter • Aspekter der er ortogonale i forhold til den primære kode (f.eks. forretningslogikken) skal (om muligt) isoleres mest muligt fra denne • F.eks. sikkerhed, caching, overvågning, test, ... • Ofte søgt håndteret deklarativt og afkoblet fra koden (COM+, ASP.NET) • Konfigurationsfiler er gode til demoer, men... • ... skal også kunne ske programmeringsmæssigt • I .NET ofte via attributter (sikkerhed, WebMethod, ...) • Men pas på at det ikke bare bliver et ”nyt” programmeringssprog • Kan ofte implementeres meget fleksibelt via interfaces (ikke via nedavning) .NET baserede arkitekturer ved Henrik Lykke Nielsen
MSDN artikel • ”Application Architecture for .NET: Designing Applications and Services” • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp • Indeholder nogle ganske udmærkede og interessante arkitekturelle overvejelser • 166 sider .NET baserede arkitekturer ved Henrik Lykke Nielsen
Calculus • Calculus beregner udtryk angivet som tekststreng • Ingen datalag kun “businness” lag og evt. UI lag • En selvstændig “stand-alone” komponent • Kopieret den nødvendige kode ;^( • For ikke at få for mange, for små, stærkt fragmenterede komponenter og en for kompleks arkitektur • DLL-nightmare: Calculus Anden parser EifosFoundation Lex StringUtil .NET baserede arkitekturer ved Henrik Lykke Nielsen
Eksekveringsmodeller Web-applikation Windows-applikation WinForms .NET-applikation .NET baserede arkitekturer ved Henrik Lykke Nielsen
Spørgsmål www.captator.dknyheder, artikler, information, ... .NET baserede arkitekturer ved Henrik Lykke Nielsen