wpf & ef 4 tales from the trenches. introductions nathan allen-wagner senior.net architect...

33
WPF & EF 4 Tales From the Trenches

Upload: tiara-eyre

Post on 01-Apr-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF & EF 4Tales From the Trenches

Page 2: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Introductions

Nathan Allen-Wagner

Senior .NET Architect

Bennett Adelson Consulting

www.bennettadelson.com

[email protected]

Page 3: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Introductions

Me - Online

Blog http://blog.alner.net

Podcast http://NorthCoastCodeCast.net

Twitter @nathanaw

Page 4: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Agenda

Quick Intro

Entity Framework• Models, Repositories, and T4 Templates• Demos

WPF• Tips, Tricks, and Approaches• Undo / Redo• Demos

Page 5: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Session Goal…

If I Succeed Today…

1. We’ll cover a lot of topics

2. I’ll convince you to download and explore the demo app.

3. I’ll introduce you to a couple open-source libraries

Page 6: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Quick Intro – High Level

Entity Framework1. Self Tracking Entities

2. Repositoriesa. Enabling Change Tracking

b. Saving Changes

3. Customized templatea. Partial Classes / Methods

b. Delayed Initialization

c. Undo

WPF / MVVM1. INotifyPropertyChanged

2. Undo / Redo

3. MVVM & Locators

4. Keyboard Focus

5. Reactive Programming

6. Threading

Page 7: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Quick Intro – Relevant Scenarios

How does this apply to ME?

Entity Framework Undo MVVM

WPF Y Y Y

WinForms Y Y N

Silverlight Y * Y * Y

Web Y N N

Page 8: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Preview – The Demo App

Demo!

Before we dive in…

… Here’s our demo app

Page 9: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

PART 2 – WPF

PART 1

Entity Framework

Page 10: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Definition of Terms: Models

Models Are…

…the “M” in MVC, MVP, MVVMModel View Controller

Model View Presenter

Model View ViewModel

…the Data

…the “Single Source of Truth”

…Behavioral (methods)

Page 11: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Definition of Terms – Repositories

Repositories are…

…a way to get a model

…a way to save changes to a model

Persistence Ignorance…

…hides data storage / access choicesRDO, ADO, ADO.NET

Nhibernate, EF, Linq2SQL

…separates concerns

…makes unit testing easier

Page 12: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Model Designer & Code Generator

Entity Framework:

Model Designer- Database First- Model First

Code Generator (T4 Templates)- Default Template- Self Tracking Entities Template- Plain Old CLR Objects (POCO) Template

Page 13: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Self Tracking Entities

Self Tracking Entities…

Originally designed to enable EF over WCF1) Share entity dll with client

2) Client entities track their changes

3) Changes sent back to service

4) Service applies changes to context

But… works great for the Desktop too!

Page 14: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Build your own Repository

Goals for a Repository:

1) Use interfaces for definition

2) Expose methods to get, save and query

3) Keep all EF “stuff” inside. a. Clients should not need a reference to

System.Data.Entities

Page 15: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Repository Demo

Demo – EF Basics

• EF Model• Getting and Applying the STE template• Separating entities into separate project• Interfaces for repository• Multiple Repositories: SQL & XML

Page 16: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Repository Tips

Demo – EF Tips & Tricks

• Loading Children From the DB .Include(“”) vs. LoadProperty(o => o.Child)

• Saving ApplyChanges(), SaveChanges() MarkAllAddedAsUnmodified(), RefreshAll() AcceptAllChanges(), StartTrackingAll()

• Deletes Parent.Remove() does not delete the record…

Page 17: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Template Tips

Demo – T4 Customizations

• Partial Classes / Methods Partial Classes = Custom Logic / Properties Partial Methods = Hooks into property changes

• Undo Hooks T4 includes calls to UndoService

for property changes

• OnInitializing() & OnInitialized() Works with DelayedInitializationScope

Page 18: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Delayed Initialization Scope

Demo - Delayed Init Scope

• Entities call RegisterForEndInit()• … Then EndInit() called after last scope completes

• Use in a using block• Supports nesting• ThreadStatic variables to track “current” • Callers can check whether a

scope is active

Page 19: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Entity Framework – Undo / Redo Tracking

Demo – Undo / Redo Tracking

• Each setter tells Undo framework about change SelfTrackingEntityUndoService.OnChanging()

• Undo framework adds a “change” to the undo stack

• Each “change” knows how to apply the previous value

• More on this later

Page 20: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

PART 2 – WPF

PART 2

WPF

Page 21: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Agenda Revisited

WPF / MVVM

1. INotifyPropertyChanged

2. Undo / Redo

3. MVVM & Locators

4. Keyboard Focus

5. Reactive Programming

6. Threading

Page 22: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – App Goals

Goals for the Demo App

Good Architecture…

… Community says MVVM for WPF / SL.

“Single Source of Truth” rendered in one or more views, which stay in sync as data changes in the model.

Model contains core data and behavior. View-specific concerns are in the ViewModel or View.

Undo / Redo support

Page 23: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Bindings and INotifyPropertyChanged

WPF Bindings & INotifyPropertyChanged

WPF means Powerful Binding Support!

Two-Way bindings require Change Notification

WPF UI elements use DependencyProperties for change notification.

What about the model…???

Page 24: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Bindings and INotifyPropertyChanged

Model Change Notification:

System.ComponentModel.INotifyPropertyChanged• Primary way to tell WPF that a property value

changed

System.Collections.ObjectModel.ObservableCollection• Primary way to tell WPF that a collection changed• Implements INotifyCollectionChanged• Raises an event whenever items added, removed,

replaced or relocated.

Page 25: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Using an Entity Framework Model

Using a Model – Self Tracking Entities

Partial Methods Revisited Raising PropertyChanged for “dependent” properties Validating data

Undo / Redo Support Importance of INPC for Undo – It changes the model Available from http://muf.codeplex.com/ Hooking it up – Commands Optimizations – Undo Batches

Page 26: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Dealing with ViewModels

Dealing With ViewModels

“Completing the INPC loop” Snippets for Implementing INPC

– On My Blog (http://blog.alner.net/...)

Remember to raise PropertyChanged for “dependent” properties

Crazy Cool: ContinuousLinq’s ReactiveObject– http://clinq.codeplex.com/

Page 27: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Tips and Tricks

WPF Tips and Tricks

Keyboard Focus Toolbars don’t cause “LostFocus” event Use the CommitBindingsBehavior to force bindings. Demo…

Page 28: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Tips and Tricks

WPF Tips and Tricks

Design Time & “Blendability” Use “design-time” detection to populate ViewModels. Demo…

Page 29: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Tips and Tricks

WPF Tips and Tricks

Threading Use the BackgroundWorker for lengthy operations Marshal all changes back to UI thread via:

– Dispatcher.Invoke() / BeginInvoke()– SynchronizationContext.Send() / Post()

Warning! Collections are problematic. Some solutions exist, but each has problematic edge cases.

T4 Template includes SynchronizedContextCollection, which attempts to marshall changes to UI via SynchronizationContext.

Page 30: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – Weak References & Weak Events

FYI: Weak References & Weak Events

WPF uses these extensively

Critical to allowing the GC to collect memory

Important when you have GC roots holding on to things (like static instances). May need a memory profiler.

Event Handlers create a reverse reference. If you don’t disconnect, it might lock things in memory.

Page 31: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

WPF – ViewModel Locators

ViewModel Locator Options

Code-behind / Resource

MVVM Light – Smart Resource

Caliburn – ViewModel-First (awesome framework!)

MEFed MVVM – Using MEF to create ViewModels

My Preference:

Converter Based Locators

Demo (if time permits)

Page 32: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Thanks!

Congratulations! We made it to…

The End!

(If you’d like more info one of these topics, let us know)

Page 33: WPF & EF 4 Tales From the Trenches. Introductions Nathan Allen-Wagner Senior.NET Architect Bennett Adelson Consulting  nallen-wagner@bennettadelson.com

Thanks!

Thanks! See you next month!

(Please turn in evals)

Nathan Allen-Wagner.NET Architect - Bennett Adelson

[email protected]

Blog http://blog.alner.net

Podcast http://NorthCoastCodeCast.net

Twitter @nathanaw