dev link2009 multi tenancy beyond the whiteboard chris hefley

13
Multi-Tenancy: Beyond the Whiteboard Chris Hefley, Bandit Software Blog: http://indomitablehef.com Email: [email protected] Twitter: @indomitablehef

Upload: chris-hefley

Post on 21-Nov-2014

3.451 views

Category:

Technology


1 download

DESCRIPTION

Multi-Tenancy: Beyond the Whiteboard. Presentation from Devlink 2009, Nashville, TN, Chris Hefley http://indomitablehef.com See sample project at http://code.google.com/p/sokmunkae/

TRANSCRIPT

Page 1: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Multi-Tenancy: Beyond the Whiteboard

Chris Hefley, Bandit Software

Blog: http://indomitablehef.comEmail: [email protected]

Twitter: @indomitablehef

Page 2: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Multi-Tenancy

Page 3: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

The Big Decision• Database Per Tenant• Schema Per Tenant• Tenant Id per Row• Tenant as Aggregate Root

Page 4: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Other Considerations• The Url– app.com (salesforce.com)– tenant.app.com (me.basecamphq.com)– app.com/tenant (facebook.com/me)– tenant.com (mynewyahoostore.com)

• Data access– ORM– Dynamic SQL– Stored Procedures

Page 5: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Design Goals

•Agnostic•Secure•Maintainable

Page 6: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Design Patterns: Repository

Data Access Layerdao.RetrieveOne(Dictionary<string,object> parameters)dao.Delete(person.Id) dao.SaveOrUpdate(Person p)dao.RetrieveAll( Dictionary<string,object> parameters)

Domain Modelpublic class Person {…}

Repository (PersonRepository)repository.Find(PersonQuery q) {…return Person}repository.Remove(Person p) {}respostory.Add(new Person {…})repository.ListByProject(Project p) {…return List<Person>}

Page 7: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Repository as BoundaryYour Application “Knows Nothing”

RepositoryEffectively adds:

“WHERE TenantId =“To every set of

criteria passed on to the data layer

Page 8: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Design Patterns: DI/IOC

Page 9: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Inversion of Control

Page 10: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Inversion of Control

Page 11: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

First Benefit: Testing

Page 12: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

But wait, there’s more!

Page 13: Dev Link2009 Multi Tenancy Beyond The Whiteboard Chris Hefley

Sok Munkae Data Model

Organization

User Project

Task