vbug talks in bristol coordinators david ringsell [email protected] steve hallam...

50
VBUG Talks in Bristol http://cms.vbug.net Coordinators David Ringsell [email protected] www.talk-it.biz Steve Hallam [email protected]

Upload: magdalen-fletcher

Post on 12-Jan-2016

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

VBUG Talks in Bristol http://cms.vbug.net

Coordinators

David [email protected]

Steve [email protected]

Page 2: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

VBUG Winter Conference 2005www.vbug.net

Ain’t No Mountain High Enough .Net Case Study

Matt Link Wednesday February 15th

What?!? C# Could Do That???

Shay FriedmanTuesday March 27th

Talks in Bristol

Page 3: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Ain’t No Mountain High Enough- a product case study

Matt Link

Page 4: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Covering……..

Challenges in writing a product vs. bespoke Customisations Version Control Deployment

Security

Page 5: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

What is Parnassus?

A mountain of limestone in central Greece 

Page 6: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

What is Parnassus?

Page 7: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

What is Parnassus?•Sit

es•Q

ualifications Offered

Centres•Pa

thways

•Units

Qualifications

•Registrations (Single and bulk upload)

•Grades (Single and bulk upload)

Learners

•Certificate Printing

•Export to 3rd Party printing software

Certification

Awarding Body Management Software

Page 8: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

What is Parnassus?

To Parnassus…..

Page 9: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Challenges in writing a product

Versioning & Deployment Many installations, not all upgraded at the same

time

Integrations Many require integration with other systems

Customisations UI Business Logic Security

Page 10: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Challenges in writing a product

How to handle these issues whilst: Keeping the code maintainable One code base Ensure changes for one customer don’t adversely

affect another customer

Page 11: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Customisations

Page 12: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Plug-ins

Improved Maintainability of code• Customer Specific code doesn’t end up in core

Parnassus• Fewer settings

Easier to test• Additional code is self-contained in the Plug-in

Greater Flexibility• Not all code changes now require a new version of

Parnassus to be created

Page 13: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF (Managed Extensibility Framework)

A bit like

eBay WebsiteBuyers• Looking for X

Sellers• Have x

Page 14: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF

eBay WebsiteBuyers• Looking for X

Sellers• Have x

MEF Composition ContainerImports• Looking for X

Exports• Have x

Page 15: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF

A Composable Part is something which either

• Needs (Imports) something• Offers (Exports) something• Both!

These “needs” and “offers” are matched based on Contracts by a Container

We use Interfaces, but you can just use a string……..

Page 16: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF (Managed Extensibility Framework)

Page 17: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF

A Part Specifies what it wants to Import

[ImportMany(typeof(IQualificationRegistrationCreated))]

A Part specifies what it can Export

[Export(typeof(IQualificationRegistrationCreated))]

The Container matches the two together

A Catalogue is used to discover the Parts

Page 18: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF

public static CompositionContainer Container {

get {

string dir = PluginDirectory; DirectoryCatalog cat = new DirectoryCatalog(dir); var container = new CompositionContainer(cat); return container; } }

public static void Compose(object toCompose) { try { CompositionContainer c = Container; c.ComposeParts(toCompose); } catch (Exception ex1) { throw new Exception("Error Composing Object: " + toCompose.GetType().Name, ex1); }}

Calling “ComposeParts” on a Container matches Imports to Exports

DirectoryCatalog scans a given directory for Parts

Page 19: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF - A Quick demo

ImportedPlugins Class

[ImportMany(typeof(IQualificationRegistrationCreated))]

public FilteredExportCollection<IQualificationRegistrationCreated> QualificationRegistrationCreated

{

get;

internal set;

}

Contract

FilteredExportCollection<T> : ICollection

QualificationRegistrationCreated_Demo Class

[Export(typeof(IQualificationRegistrationCreated))]public class QualificationRegistrationCreated_Demo : IQualificationRegistrationCreated

Page 20: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF - A Quick Demo

To the Code………..

Page 21: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF

1.When the Compose Method is called on the Container, MEF matches Imports to Exports based on the Contracts.

2.This populates a collection (in our case a generic FilteredExportCollection<T>)

3.Any Exports matching the Contract are now available in the collection

Page 22: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

MEF – Example Uses Custom Validation

• Normally involves • Yet another setting / Code into core Parnassus

Finance

Address Lookup

Integration• E.g. On learner save send details to another system

Page 23: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Translations

Every customer calls things by different names

Translations needs to be applied everywhere with minimum of developer effort

Every customer has a different set of translations

Page 24: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Translations

Extension Method “Add" methods to existing types

Enables you to do:

Page 25: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Translations

Page 26: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Translations

On every page:

For each Control on the page…1. Get Control Type2. Change a property to the translated

version…

Page 27: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Security

Similar challenge with security Every customer has different rules asp.net Page level security not fine grained

enough

Only controls access to whole pages / folders

Field level security required Minimise developer effort (make security easy)

Page 28: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Security

Page 29: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Security

Gets cached security rules for the page For each Control on the page…

1. Get Control Type2. Apply security rules based on control type

1. E.g. GridView - Adds an Event Handler to DataBound event

Page 30: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Security

Parnassus as a Centre User…. Limited menu options Restricted to seeing limited details of own centre Restricted to viewing only their learners

Customer decides how much each User / Role can see and do in Parnassus

To Parnassus…… User: Centre1 Pass: Centre1

Page 31: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Deployment

Page 32: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Deployment Many customers, many versions

About 4 different versions being supported

Initially struggled with upgrade paths DB change scripts from one specific version another specific

version

V2.0 Scripts V2.3 Scripts V3.0

Customer A - Jan Feb December

V2.0 Scripts V2.5 Scripts V3.0

Customer B - Jan April December

Page 33: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Deployment

Problems: Almost no reuse of upgrade scripts

Customer A’s V3.0 not quite the same as Customer B’s

OK when fairly regular updates, harder when big jumps

Page 34: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Deployment

No more schema upgrade scripts

Will upgrade any version of Parnassus

Quicker than producing upgrade scripts

Potential to use them for Source Control of the Database

Solution = Database Projects

Page 35: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Deployment – Database Projects

Visual Studio

SQL

1) Database Synced with Database Project

Build Output

2) DB Project produces .dbschema

Page 36: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Deployment

To a quick Parnassus Upgrade…..

Page 37: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Versioning

Page 38: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Versioning – What changed / changing when

Work Items in TFS for us Assign work to Versions / Iterations Track work status (Design / Coding / Testing) Associate code check-in with work items

Change Log comments for the customer Viewer App to extract them Quickly generate a change log for a version

Page 39: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

TFS Work Items

Page 40: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Branching & Merging

Need to be able to release patch versions Fix once, apply to all versions

Allow ongoing development at the same time

Requires Source Control Software (TFS) Compare / Merge tool (DiffMerge) A branching strategy…..

Page 41: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Branch Label

Page 42: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Branches are duplications of an object under revision control so that modifications can happen in parallel along both branches.

Page 43: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

On going development of new functionality

Page 44: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk
Page 45: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk
Page 46: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk
Page 47: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk
Page 48: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Branching & Merging

Visual Studio TFS Branching Guidehttp://vsarbranchingguide.codeplex.com/

Page 49: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Other things to talk about….

Custom User Controls Settings Code Generation Auditing

Page 50: VBUG Talks in Bristol  Coordinators David Ringsell david@talk-it.biz  Steve Hallam steve@plumsoft.co.uk

Questions