Rozszerzalna architektura

Slides:



Advertisements
Podobne prezentacje
Programowanie obiektowe
Advertisements

Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Static, const, volatile.
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Generics w .NET 2.0 Łukasz Rzeszot.
Visual Studio Codename „Orcas”, LINQ
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
Rozszerzalna architektura. Rozszerzalna architektura - Zagadnienia: Interfejsy Odkrywanie Komunikacja.
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
C# Windows Forms Zastosowania Informatyki Wykład 3
Test Doubles Adam Gabryś , v1.1,
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Programowanie obiektowe III rok EiT
Komponentowe i rozproszone
Tworzenie aplikacji mobilnych
Java – coś na temat Klas Piotr Rosik
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
C# Cz.7 Refleksja, Atrybuty
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Komponentowe i rozproszone Komponenty i zależności.
Paweł Starzyk Obiektowe metody projektowania systemów
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Asocjacja,Kompozycja,Agregacja
Komunikacja pomiędzy luźno powiązanymi komponentami Mateusz Sionkowski.
Dobre praktyki w projektowaniu aplikacji mobilnych Arkadiusz Waśniewski
Moduł SDI – zasilanie węzłów IIP oraz wykorzystanie danych. Wprowadzenie. Szkolenie przeprowadzone w ramach projektu „TERYT 3 – Rozbudowa systemów do prowadzenia.
EFaktury Organizacje. Księgowość. Usprawnienie. Obieg faktur. Opis. Rozliczanie. Weryfikacja. Zatwierdzanie.
Język Java Paweł Rajba
Dziedziczenie, polimorfizm, Interfejsy
BVMS 5.5 Blok2- Moduł 8: Użytkownicy i grupy
BANKOWOŚĆ ELEKTRONICZNA Metoda wzorca rozwoju Hellwiga – przykład
Programowanie Obiektowe – Wykład 1
Programowanie Obiektowe – Wykład 7
Przeglądarka stron WWW
T. 16 e Proces DGA - opis ogólny.
(według:
Realizacja aplikacji internetowych
Nazwa firmy Plan biznesowy.
„Prawa Ceteris Paribus i socjo-ekonomiczne mechanizmy”
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
(c) Krzysztof Barteczko 2014
Akademia C# lab. 9 Zdarzenia i delegaty.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe
Lekcja 1 – Hello World! Visual Studio, coś łatwego na początek 
Programowanie obiektowe
Kurs języka C++ – wykład 13 ( )
Programowanie obiektowe
Bezpieczeństwo dostępu do danych w systemie Windows
Dobre praktyki w Django REST Framework
MVC w .NET Adam Żyliński.
Dynamics 365 CE i język TypeScript
Programowanie obiektowe
Prezentacja planu biznesowego
Podstawy informatyki Zygfryd Głowacz.
Tworzenie aplikacji WCF, Bartłomiej Bielecki, opracowanie wzorowane na:
PGO Kolekcje Michail Mokkas.
J2EE: Bazy danych c.d. Język zapytań EJB QL.
Zdarzenia (eventy) Zdarzenia służą do powiadomienia użytkownika, gdy w używanej klasie dojdzie do pewnych wydarzeń zdefiniowanych przez twórcę klasy.
Nazwa firmy Biznesplan.
Modelowanie obiektowe - system zarządzania projektami
Rozszerzanie biblioteki Prism
Autor: Magdalena Linowiecka
Asynchroniczne operacje I/O za pomocą IOCP
„Junit”.
Zapis prezentacji:

Rozszerzalna architektura

Rozszerzalna architektura - Zagadnienia: Interfejsy Odkrywanie Komunikacja

Rozszerzalna architektura Refleksja... IOC/DI Containers Decoupling, testowanie, scentralizowana rejestracja, MAF (System.AddIn-s) .NET v.3.5. Izolacja (odddzielna AppDomain), stosunkowo ciężki MEF .Net 4.0 Discovery, obsługa metadanych, opóźniona kreacja

MAF – System-addin Aktywacja/wyładowywanie – (w rune-time) Wersjonowanie Izolacja (oddzielny AppDomain/proces) Zarządzanie czasem życia Piaskownica – (możliwośc okreslenia zestawu uprawnień) Odkrywanie (odkrywanie pluginow w czasie dzialania)

MAF – System-addin System.AddIn System.AddIn.Contract Klasy z System.AddIn.Hosting: AddInController, AddInEnvironment, AddInProcess,, AddInStore, AddInToken, InvalidPipelineStoreException, AddInSegmentDirectoryNotFoundException Źródła: MSDN http://clraddins.codeplex.com/

MAF – architektura

MAF – kontrakt [System.AddIn.Pipeline.AddInContract] public interface ICalculatorContract : IContract { IListContract<IOperationContract> GetOperations(); double Operate(IOperationContract op, double[] operands); string GetName(); }

MAF – instancjonowanie i użycie AddInStore.Rebuild(path); IList<AddInToken> tokens = AddInStore.FindAddIns(typeof(Calculator), path); foreach (AddInToken token in tokens) { addins.Add(token.Activate<IAddIn>( AddInSecurityLevel.Internet) ); } addins[i].Operate(...);

MAF – pipeline builder - nazwy [assembly:PipelineHints.SegmentAssemblyName(PipelineHints.PipelineSegment.HostView, "MyApplica PipelineHints.PipelineSegment.HostView, PipelineHints.PipelineSegment.AddInView, PipelineHints.PipelineSegment.HostSideAdapter, PipelineHints.PipelineSegment.AddInSideAdapter

MAF – kalkulator WPF Plugin: Visual Studio Pipeline Builder http://clraddins.codeplex.com/releases/view/9454

MEF Discovery Atrybuty DI Brak izolacji

MEF - koncepcja

MEF - architektura

MEF – Podstawowe pojęcia Export Export dla typu/funkcji/pól Wymuszony typ: Export(typeof(Ixxx)) Nazwany kontrakt: Export("name",typeof(Ixxx)) Export nie jest dziedziczony – można użyć InheritedExport Import Dla typu określonego w kodzie Import określonego typu/kontraktu

MEF – Zalecane praktyki Imort/Eksport Interfejsów zamiast konkretnych typow Stałe jako nazwy kontraktow Stale/i kontrakty w oddzielnych assembly

MEF – rozwiązywanie zależności Pola importowane są inicjowane po konstruktorze stąd nie mozna ich uzyc w konstruktorze Rozwiazanie: ImportingConstructor na konstruktorze (ciagle potrzbne import na parametrach) Przy konstruktorze - eksportowane klasy/interfejsy musza byc publiczne

MEF – export/import [Export] public class SomeComposablePart { ... } public class MessageSender { [Export(typeof(Action<string>))] public void Send(string message) { … } } public class Configuration { [Export("Timeout")] public int Timeout { get { return …; } } }

MEF – export/import class Program { [Import] public IMessageSender MessageSender { get; set; } } class Program { [ImportingConstructor] public Program(IMessageSender messageSender) { ... } } class Program { [Import] private IMessageSender _messageSender; }

MEF – tworzenie obiektu var catalog = new AssemblyCatalog(System.Reflection.Assembly .GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this);

MEF – liczebność (cardinality) 1 – domyślne podejście 0..1 [Import(AllowDefault=True)], 0..* [ImportMany] -> zwraca IEnumerable<interface>

MEF – nieobligatoryjny import [Export] public class OrderController { private ILogger _logger; [ImportingConstructor] public OrderController( [Import(AllowDefault=true)] ILogger logger) { if(logger == null) logger = new DefaultLogger(); _logger = logger; } }

MEF – import kolekcji public class Notifier { [ImportMany(AllowRecomposition=true)] public IEnumerable<IMessageSender> Senders {get; set;} public void Notify(string message) { foreach(IMessageSender sender in Senders) { sender.Send(message); } } }

MEF – opóźniony import Pozwala nie tworzyc nieużywanych (jeszcze?) obiektów GetGetExport<>(), GetExports(), GetExports<>() Zwracają: Lazy<T> Lazy<T,Metadata> Value IsValueCreated Meadata

MEF – opóźniony import [Export] public class HttpServerHealthMonitor { [Import] public Lazy<IMessageSender> Sender { get; set; } }

MEF – metadane Dictionary<String,obiect> Mogą zostać odczytane I przetworzone przed utworzeniem obiektu Metadane -> ExportMetada Dictionary<String,obiect> Silnie typowane, oparte o interfejsy Metadane można wykorzystać np do wyświelenia informacji o nieutworzonych obiektach Podjęcia decyzji czy tworzyć dane obiekty

MEF – filtrowanie var catalog = new AssemblyCatalog(typeof(Program).Assembly); var parent = new CompositionContainer(catalog); var filteredCat = new FilteredCatalog(catalog, def => def.Metadata.ContainsKey("scope") && def.Metadata["scope"].ToString() == "webrequest"); var perRequest = new CompositionContainer( filteredCat, parent); var controller = perRequest. GetExportedObject<HomeController>(); perRequest.Dispose();

MEF – rekompozycja Możliwa jest zmiana skomponowanych obiektów w rune-time. Nie dziala to przy wstrzykiwaniu przez konstruktor Wymaga zezwolenia Import(RecompositionAllowed=true) Można miejscowo zablokowac przez SatisfyImportOnce...

MEF – czas życia Shared = singleton Release – uwalnianie elementu var batchProcessorExport = container.GetExport<IBatchProcessor>(); var batchProcessor = batchProcessorExport.Value; batchProcessor.Process(); container.ReleaseExport(batchProcessorExport);

MEF – kompozycja kontenerów

MEF – diagnostyka

MEF – diagnostyka Command window: The mefx Command-Line Analysis Tool

MEF – Typowe problemy Liczebność skojarzeń (cardinality) Katalogi, maska, ignorowanie części Niedopasowanie kontraktów – zbyt ogólne/szegółowe Brak eksportów Warto włączyć tracing w konf. (std. .NET)