Malte Clasen, Christian Ahrenkiel | adesso AG

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

Forschungszentrum Informatik
Objektrelationales Mapping mit JPA
Was gibt´s neues im Bereich Sicherheit
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Web-Entwicklung mit ASP.NET 2.0 und Visual Studio 2005 Uwe Baumann Marketing Manager Developer Tools Microsoft Deutschland GmbH Oliver Scheer Developer.
Office XP und XML Web Services Dariusz Parys.NET Strategy & Developer Group
Einführung von Team System Ein Vorgehensvorschlag
Was ist neu in VS 2003 ? Ein Überblick. Bernd Marquardt Software & Consulting
Web Matrix Project Kurzüberblick Dirk Primbs Technologieberater Developer Platform Strategy Group Microsoft Deutschland GmbH.
SharePoint Development Sebastian Weber
SPS / WSS Entwicklung Martin Saternus Technical Student Consultant Microsoft Deutschland GmbH
Ruby on Rails im Überblick
Erweiterung B2B Usermanagement / LDAP-Anbindung
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
XDoclet ETIS SS05.
Software Design Patterns Extreme Programming (XP).
DVG Einführung in Java1 Einführung in JAVA.
Erstellen von WebServices mit Visual FoxPro 9.0
MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 10 Die erste, eigene Klassenbibliothek (Level 100) Presenter: Daniel Walzenbach Technologieberater.
Web Content Management mit SharePoint Fabian Moritz SharePoint MVP
Oliver Schnider Peaches Industries GmbH Its time to be ready for May 12th.
Migrieren eines Sharepoint Designer Workflows zu Visual Studio .NET
Silverlight Eine Einführung. Agenda 1.Was ist Silverlight? 2.Die Silverlight Philosophie 3.Vorstellung des Szenarios 4.Einführendes Beispiel 5.Konzepte.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 12 Folie 2 Web Services (1)
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
SharePoint 2010 for Information Architects
SQL Server 2005 CLR-Integration
Consulting and Solutions.NET Vortragsreihe – Vorstellung der Referenten Happy Arts Software Markus Kämmerer IT-Erfahrung seit 1987,
Präsentation von Sonja Pathe
Architekturen und Techniken für computergestützte Engineering Workbenches.
Developer Day Office APPs entwicklen Simon Amrein Trivadis AG Die ersten Schritte in eine neue Office-Welt.
Version 2008 Team Foundation Version Control (TFVC) … ist eine vollständige Neuentwicklung … wurde für große Teams, die auch weltweit verteilt arbeiten,
Cooperation unlimited © Zühlke Juni 2009 Hansjörg Scherer Folie 1 Cooperation unlimited TFS als BackEnd für Visual Studio und Eclipse.
Reiner Ganser Solution Architect 1stQuad Solutions GmbH Presentation Subtitle.
3/28/2017 8:11 PM Visual Studio Tools für Office { Rapid Application Development für Office } Jens Häupel Platform Strategy Manager Microsoft Deutschland.
Dariusz Parys Developer Evangelist Microsoft Deutschland GmbH Christian Weyer Solutions Architect thinktecture.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 ADO.NET s.a:
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 9 Folie 2 ADO.NET (1) Klassen für Zugriffe.
… und was man damit machen kann.
SharePoint FIS HandsOn – out of the Box.
NDK Enterprise Technologien Informationen Infrastruktur und Fallstudie Daniel Nydegger Studienleiter Enterprise System Entwicklung.
© 2009 Quest Software, Inc. ALL RIGHTS RESERVED Quest Recovery Manager for SharePoint Volker Pingen Senior System Consultant
Bonn-to-code.net Thomas van Veen Website:
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Torque robert.resch-wolfgang.schneider. uebersicht Was ist Torque Komponenten von Torque Generator Erzeugte Klassen Methoden Torque in Turbine Demobeispiel.
Warum IIS? Best of Microsoft Webserver
Sind Migrationen ein Kinderspiel ?
TDD mit MSTest Stefan Lieser
Thomas Schissler – artiso solutions GmbH Artur Speth – Microsoft Deutschland GmbH.
Generative Softwareentwicklung in der Praxis Olaf Kaus, „Java User Group“, Hannover 6.Oktober 2003.
Microsoft.NET InfoPoint 8. Juni 2005 Stefan Bühler.
7.-8. März 2013, Rosenheim Brand my SharePoint grafische Gestaltung von SharePoint 2013-Webseiten Fabian Moritz | MVP SharePoint Server.
Datenbanken im Web 1.
TDD mit MSTest Stefan Lieser Web:
TemplaVoilá. Allgemeines Dient nicht der Erweiterung der Funktionalität bestehender TYPO3-Sites, sondern der Erhöhung der Produktivität und der Vereinfachung.
Microsoft Student Partner
Was gibt’s neues im Bereich Anpassung Fabian Moritz Consultant, Developer SharePointCommunity.de.
© Copyright INFORM GmbH Seminarvortrag im Studiengang Scientific Programming von Nicole Küpper am Analyse des Updatevorgangs und Auswahl.
IT-Dienstleistungen E-Learning Systeme Content Management 1 Fallbeispiel ILIAS: Das Repository-Objekt-Plugin „Centra“
Seminararbeit Release Management von Web-Systemen Minh Tran Lehrstuhl für Software Engineering RWTH Aachen
Campus Bern Patrick Mäschli, Software Architect
Gewachsene Architektur Das kann nicht funktionieren!
SOFTWARE- UND WEB-LÖSUNGEN
 Präsentation transkript:

Malte Clasen, Christian Ahrenkiel | adesso AG Agile SharePoint-Entwicklung

Übersicht PLAN DEV DEPLOY TEST REFACTOR Christian Process Locator

Variable Anforderungen Problem ??? Variable Anforderungen „Bei uns ist alles spezifiziert…“ Aber dann kommen doch noch Änderungen: Choice Field  ManagedMetaData Field „Abteilung“  „Division“ während der Entwicklung nach Inbetriebnahme Christian Process Locator

Agile Entwicklungsprozesse Kommentar ! ! ! Agile Entwicklungsprozesse ständig lauffähige Software Mehrwert nach jeder Iteration Neue Aufgaben nach jeder Iteration Iterationslänge: 2 Wochen bis 3 Monate Auswirkungen auf die technische Struktur: Solution nach fachlichen Aspekten gliedern Christian Process Locator

Technologien übernehmen Lösung Technologien übernehmen für agile Prozesse entwickelte Technologien sind auch in anderen Prozessen einsetzbar Motivation durch agile Prozesse  kein Zwang Praxis: Im Wasserfall erfolgreich eingesetzt Malte Process Locator

Kommentar ! ! ! Migration alle vorgestellten Ansätze fügen sich in bestehende Strukturen ein und können gemischt mit klassischen Methoden verwendet werden Ansätze sind unabhängig voneinander. Sie ergänzen sich, aber man kann sie auch einzeln verwenden kein Framework, sondern Toolkit Malte Process Locator

Implementierung Ansätze implementiert in Fluom Kommentar ! ! ! Implementierung Ansätze implementiert in Fluom vergleichsweise dünne Schicht  Ideen auch in eigenem Code umsetzbar, falls kein externer Code zulässig ist Malte Process Locator

Iterationen PLAN DEV DEPLOY TEST REFACTOR Visual Studio Templates DEVELOPMENT DEPLOYMENT PRODUCTION Visual Studio Templates Powershell Scripte (WSPs) Right Click – Deploy Third Party Tools CSS XSL Settings UPDATE? Update-SPSolution Update1.wsp Christian Process Locator

Updatefähigkeit Beispiel: Redaktionelle TagCloud Problem ??? Updatefähigkeit Beispiel: Redaktionelle TagCloud WebPart (C#, *.webpart) Liste (XML) ContentType (XML) SiteColumns (XML) Ressourcen (*.css, *.xsl) Workflow (C#) Update: - Update-SPSolution? - Retract & Redeploy? Christian Process Locator

SQL vergleichbare Möglichkeiten in SQL und SharePoint-Object-Model Kommentar ! ! ! SQL SQL SharePoint, XML SharePoint, OM Table List SPList SQL-Code ListDefinition SPListTemplate create table deploy SPListCollection.Add drop table retract SPListCollection.Delete alter table - SPList.* vergleichbare Möglichkeiten in SQL und SharePoint-Object-Model Inspiration: LiquiBase, dbDeploy Process Locator

inkrementelle programmatische Updates Lösung inkrementelle programmatische Updates [TestMethod] public void AddsContentType() { var list = Fixture.CreateAnonymous<SPList>(); var contentType = Fixture.CreateAnonymous<SPContentType>(); list.Edit(0).AddContentType(contentType).Apply(); list.ContentTypes.Cast<SPContentType>() .Should().Contain(ct => ct.Id.IsChildOf(contentType.Id)); } Malte Process Locator

inkrementelle programmatische Updates Lösung inkrementelle programmatische Updates [TestMethod] public void RemovesChildContentTypes() { var list = Fixture.CreateAnonymous<SPList>(); var contentType = Fixture.CreateAnonymous<SPContentType>(); list.Edit(0).AddContentType(contentType).Apply(); list.Edit(1).RemoveChildContentTypesOf(contentType).Apply(); list.ContentTypes.Cast<SPContentType>() .Should().NotContain(ct => ct.Id.IsChildOf(contentType.Id)); } Malte Process Locator

DEV Iterationen TEST REFACTOR PLAN DEV DEPLOY TEST REFACTOR Christian Process Locator

Test-Isolation Reproduzierbarkeit: Identische Umgebungen pro Testlauf Fokussierung: Genau ein Aspekt wird betrachtet Wechselwirkungen Verhalten in Gesamtumgebung  d.h. ständige Integrationstests Christian Process Locator

gemeinsame Datenbank Entwicklung (WebApplication) SiteCollection Liste Problem ??? gemeinsame Datenbank Entwicklung (WebApplication) SiteCollection Liste UnitTest Christian Test wird auf Entwicklung ausgeführt – nicht in isolierter Umgebung Process Locator

Kommentar ! ! ! Mocking SharePoint-API teils versteckt kontextsensitiv  Integrationstests wichtig Beispiel: SPWeb.EnsureUser("forms:UserName")  System.Web.Security.Roles.Providers  web.config: system.web/roleManager Details: http://blog.mastykarz.nl/inconvenient-programmatically-sharepoint-users-spweb-ensureuser/ Malte Process Locator

SiteCollection pro Test Lösung SiteCollection pro Test weitgehend isoliert (unabhängige Listen, Felder, etc.) nicht so teuer wie eigene WebApplication (Sekunden statt Minuten) Site-Cache für minimierten Overhead: Sites in Windows-Service erzeugen und vorhalten Malte Process Locator

Global Assembly Cache UnitTest compile execute debug/bin/*.dll Problem ??? Global Assembly Cache UnitTest Build erzeugt DLL in bin-Verzeichnis Testausführung lädt DLL aber aus GAC Würde die DLL in den GAC kopiert, würde die lokale Installation verändert! compile execute debug/bin/*.dll Christian Global Assembly Cache Process Locator

Kommentar ! ! ! Tests in GAC keine Parallelität auf Continuous Integration Servern möglich beeinflusst bestehende Deployments Malte Process Locator

Kommentar ! ! ! ILMerge Aufteilung der Assemblies in Implementierung.dll (Klassenbibliothek) und Container.dll (SharePoint-Projekt) Implementierung.dll testbar Implementierung.dll mit ILMerge in Container.dll einfügen  wird nicht im GAC gefunden, kein Konflikt Nachteil: Verdoppelt Typen, also auch statische Variablen, unerwartetes Verhalten Malte Process Locator

Bin-Deployment Solutions in bin-Ordner deployen Lösung Bin-Deployment Solutions in bin-Ordner deployen Out-of-the-Box für Web-Frontend-Code FeatureReceiver etc.: GAC-Proxy, findet Implementierung im bin-Ordner via System.AppDomain.AssemblyResolve Malte vssphost4.exe Wrapper mit AppDomain.AssemblyResolve in GAC, der den Rest nachlädt [erläuternde Grafik] Process Locator

FeatureReceiverProxy Lösung Bin-Deployment vssphost4.exe liest FeatureActivated() GAC bin SharePoint SPFeatureReceiver Malte container.dll implementierung.dll FeatureReceiverProxy FeatureReceiver FeatureActivated() AssemblyResolve Feature.xml Process Locator

Keine isolierte Testbarkeit möglich! Problem ??? Abhängigkeiten Klassen Keine isolierte Testbarkeit möglich! web.config WebServices Log Christian Zugriff auf lokale Ressourcen Direkter Zugriff verhindert isolierte Testbarkeit Process Locator

Service-Locator Microsoft-Empfehlung (Patterns & Practices) Kommentar ! ! ! Service-Locator Microsoft-Empfehlung (Patterns & Practices) Anti-Pattern: Implizite Abhängigkeiten  überraschende API-Nutzung  aufwändig zu testen (Locator-Reset) Details: Dependency Injection in .NET, Mark Seemann, Manning Publications Malte Process Locator

Lösung Dependency Injection Prinzip: Objekte bekommen Abhängigkeiten von außen geliefert (Constructor-Parameter)  explizit, isolierte Tests einfach möglich SharePoint: Kein DI out-of-the-box; Controls, Pages, etc. werden von SP instanziiert Ninject-Anbindung über Inject(this)-Basisklassen analog zu ninject.extensions.web Malte Process Locator

Refactoring Wartbarkeit inkrementelle Architektur Namenskonventionen Zentralisierung […] inkrementelle Architektur Erweiterung von Metadaten Verlagerung der Listen Unterschiedliche Sprachversionen (Titel vs. Title) Christian Process Locator

NullReferenceException! Problem ??? Strings Beispiel: Feld wird umbenannt „Abteilung“  „Division“ SPListItem item = […]; item[„Abteilung“] = „Finance“; SPQuery q = new SPQuery(); q.Query = „[…]<FieldRef Name=‘Abteilung‘ />[…]“; var items = list.GetItems(q); NullReferenceException! Christian SPException! Process Locator

LINQ-to-SharePoint Data-First Fehlerhaft Kommentar ! ! ! LINQ-to-SharePoint Data-First Fehlerhaft Query: <Value Type=”DateTime”> ohne IncludeTimeValue=”TRUE” Code-Generator erzeugt unter Umständen falsche Feld-Properties Anpassung generierten Codes umständlich keine Kombination aus CAML/SPList und LINQ-to-SharePoint möglich  keine inkrementelle Migration möglich Malte Process Locator

Micro-ORM Inspiration: Massive, Dapper, LINQ-to-SQL Code-First Lösung Micro-ORM Inspiration: Massive, Dapper, LINQ-to-SQL Code-First Query via LINQ, Extension für SPList bidirektionales Mapping SPListItem  MeineKlasse nur neues API, keine neue Funktionalität mit unklaren Performance-Implikationen (LtoSP: LINQ-to-Objects, Object-Tracking) Malte Process Locator

Datei-Deployment-Konflikte Problem ??? Datei-Deployment-Konflikte Poweruser Manuelle Änderungen werden durch den Code aus dem Repository bei einem Update wieder überschrieben! custom.css v1.1 Developer custom.css v2.0 Christian DocumentLibrary: custom.css v1.0 Process Locator

Eingebettete Resource Kommentar ! ! ! Eingebettete Resource In Assembly enthalten: Unveränderlich und isoliert ASP.NET-Mechanismen für Dateien (Bilder, CSS, JavaScript) Nachteil: geringe Akzeptanz bei Power-Usern Malte Process Locator

Reverse Deployment .csproj, Elements.xml, etc. parsen Lösung Reverse Deployment .csproj, Elements.xml, etc. parsen Dateien aus SharePoint-Listen in lokalen Workspace herunterladen in Versionskontrollsystem einspielen je nach Entwicklungsprozess entweder regelmäßig oder vor Deployments Malte Process Locator

Deployment Fluom nutzt SharePoint Standards! WSPs Features EventReceiver Elements.xml Nichts passiert „am System vorbei“ z.B. Multi-Server Szenarien werden daher ebenfalls vollständig unterstützt Christian Process Locator

Bonus: Hilfsmittel Logging Installer Automatische Erweiterung der Areas & Categories Installer WSP Deployment Erstellung von SiteCollections & Websites Erstellung von Pages Aktivierung von Features Platzierung von WebParts Christian Process Locator

Produkt „Fluom“ Status? Basisfunktionalität steht bereit Bereits im Kundenprojekt im Einsatz Stetige Weiterentwicklung nach Bedarf Wie geht es weiter? Abhängig von Resonanz der Fachwelt! Christian Process Locator

Zusammenfassung PLAN DEV DEPLOY Änderung der Anforderungen Strukturierung der Solution Potentielle Updates berücksichtigen TEST REFACTOR Tests in der lokalen Installation GAC Deployment Gemeinsam genutzte Ressoucen Christian Updateverhalten deklarativer Elemente Dateikonflikte CAML-Strings Spaltennamen