MVC The Good, The Bad and the Evil Hadi Hariri Developer & - - PowerPoint PPT Presentation

mvc
SMART_READER_LITE
LIVE PREVIEW

MVC The Good, The Bad and the Evil Hadi Hariri Developer & - - PowerPoint PPT Presentation

MVC The Good, The Bad and the Evil Hadi Hariri Developer & Technical Evangelist JetBrains http://hadihariri.com http://twitter.com/hhariri <inpu nput type pe=" ="hid hidden den" " name=" ="__VI


slide-1
SLIDE 1

MVC

The Good, The Bad and the Evil

Hadi Hariri Developer & Technical Evangelist JetBrains http://hadihariri.com http://twitter.com/hhariri

slide-2
SLIDE 2
slide-3
SLIDE 3

<inpu nput type pe=" ="hid hidden den" " name=" ="__VI VIEW EWST STAT ATE" E" id="_ ="__VI VIEW EWST STAT ATE" E" value lue=" ="B6w B6wx5mi4gVh i4gVhW2+ 2+73 73t44EG 44EGLv LvhH hH6G 6GoM

  • M0g

0gz+lg +lg712/ 12/i1 i1Bz Bz/s1kL8w L8wqD qDTPb Pbs2j4J j4JJG0Yt 0Yt4w 4wHld ldE5jD E5jDQ1Q Q1QMue ueIk17 5MDIHxwsdFnk nkkcAiN AiNQ0 Q05SPJ 5SPJDyoR

  • RiBrd

iBrdze58N 58NqG/ G/TSJ SJdgG gGkvAJ AJYr YrQL QL6t 6tImJqCdL3F dL3FDMh7F 7FyOX6 OX6TKx Kx2ZuH uHUUQQja QQja dUPy PyzMecyWre re35y 35yQ/ Q/gRkOD OD5Kq 5KqnqKib nqKibxTAa Aa9o 9o2QBZ 2QBZV1 V1iOx iOxJku+ u+kZEOGq EOGqBW BWgW gWgD gDEz EzXagC XagCId5 d5fo/21YPC 1YPCfkpix pixmZX 2h25 25NiBG iBGCqE qEHcWvniF niFCYc Yc03XPv 03XPvnQ nQYa2SAC Ya2SAC7z 7zfaBbSAt aBbSAtgM gMM+R5R 5R90t 90tvdU dUmPX PXCGiO GiOuO uOG9PJ G9PJNI9EU EUMI9XF 9XFn0f 0fSw Sw RkGcG GcGxH8jU 8jUUh/ h/nj8 nj8sPM PMySpj Spjiy iy6+ 6+Rpc pc4HK0z K0zfI12S 12ScvAJ2 AJ2LoE LoE3db dbl5I l5I2ag 2agSG SGTLNXt Xt26 26GlB GlBaF aFJR2R 2RlR lRwRkqXeR XeR/2KhG KhGK D/wkCOQk OQkDBs BsK6E6h K6E6h2p 2piPqJ iPqJUMl1 l1zMlc lcK51 K51WaF aFiglT iglTdP+ P+bSC bSC77 77CVlp Vlp+u +uDpx pxCfPw PwBlf BlfFzsnh nhow

  • wZ6SEJ

6SEJgs gsAy AyVs VsTeDzm BYWUMLqs qsk/Rn8J n8JP4E0 P4E001M 01MoaKd

  • aKdlhu

lhu0v 0vECVD VDhQVKW hQVKWq1 q1cjw jwEhZ EhZR5I 5I/ID5D 5D1mlQGYg lQGYg4Qi8 4Qi8p/ p/Lf LfTJE0YdPXd E0YdPXdMQu Qu91I 91I+ x5t 5t22 22Z8XSN 8XSNppAL ppALsz30 30Gc Gc02 02Sm SmXv XvxGM GMG36 36OK/ OK/6x 6xh1 h16Qp 6QpaD aDzt4s9CflI lIFJYW YWCH12nJ 12nJ8BSF SFTvbK6y K6ykPp Pphur hurscJtDg3X g3X mGKx KxNVT VTRlO lOBhI BhIxV6 V6i4v i4vy6ds dssmfXL XLA1H A1HUTnCOU OUuL+ uL+05r 5rrJ rJf8N 8NH8pPBGB4 8pPBGB4jX+ X+6ojn 6ojn7T 7TzSx SxTrM rMNkWIiom iomCeMv1Xm XmLl Ll 0fr6v r6vs/rcfoG

  • G6q

6qy8mCxyRq6C q6CtxU5/ 5/7t 7tblr blrs2gt gtR9w 9wQSN QSNyfNFv4Ps PsCspv pvay ay31 31Er+a Er+anQN nQNqcsNh3O h3OMXKR XKRHEM EM0H 0HIR8jE23 8jE23 M9QK QKam amfXeL XeLXfYe XfYeDFGe0 e0C1M 1MXC XCdeq deqb8a b8a5x 5xZKPa KPaxMI36 36Mo6p

  • 6poXE
  • XEiC

iCxj6 j6dGN dGNC9R 9R34 34HK4 K4/E+ E+m6VU 6VUR6W 6WE+ E+3XR XR8Xg 8Xg7 mpvO3N 3NVA VADYKZ YKZ/8iioc 8iiocIp0 p0WbH bHh/ h/1oH

  • HJUeL

eLSuN SuN2jU 2jUw4p7 4p7Gnp GnphVt hVtr/ r/aM aMTNCYXX5gf YXX5gfU4SW 4SWTyds dsys6VO 6VOSQel6 SQel6k7c7e0 e05 q+ev evtyqXSz Sz65 65LI LIklhy lhy3I 3If0QN QNIc9wiVU iVUiuR iuRRoLz

  • LznL

nLfCWPZ PZPlW PlWFkAYQ7c AYQ7cn2eKT 2eKTNMBJ BJLYM LYMr6I 6I5q 5qwrs rsGUeF eFdN dNi43 i43mjT jTj7B j7B LXr1u r1uEXG XGg2 g29U 9UJmeB2ay B2ayqjC jCc5q 5q5/ 5/az azue ueeT eTi4 i47u6 7u61Vk 1Vkk9Qy 9QyTNxo3XU 3XU8g 8gnI nItEAiz EAizlH lH97U 97UT7L 7LqKn qKntCIjC jCKoju KojuzPhT PhTY2Q Y2QKW KW q1Rs9U+4 +4DWSR SRZV/ V/rt+j9v j9vE9SO0 E9SO04z 4zXy Xy2rm rmvr5OL 5OLLYoa LYoaiXbt iXbtIlQs lQsL5P6 L5P65v 5vj8N j8NuL uLOF OF8jb8+ jb8+YBv BvMDscSVBD SVBD0iC 0iCeD eDgh/ gh/Hxj npNstdI dIzf77O 7OX/ X/xnH nHPW PWQE QE/yWge1 ge1ajz ajzRCQW QWUU44E6h 44E6hvueiu eiuoH

  • Hu5

u5Ewhp hpeQ eQ2oF 2oFHDAk Akv7Yt Yt/G0 G0URLS2 LS2L85 L85uL uLWaX3t aX3tH 5pRHlf lf97 97dnK dnKVT VT1HZ6hr 6hrgS5 gS5BYm BYmlz lzWxBn Bnvjr jr6u5 6u5pQ pQPpR PpRHEh EhcHpBW pBWaYR aYR3ejX 3ejXdmjgw jgwvRdn8g n8gr9 r9SAT SAT7Eo 7EonXKu XKu/Bw Bw2g 2gVo Vo 3nlAiW lAiW4p+ 4p+viPU iPU4jBAU 4jBAUXt Xtkat8I 8Ihn hnrQv rQvNulJ ulJ6s 6skDbI bIznO nOLD LDg1 g1NRqr qrzDHqt qt+w +w1H 1HJUI6s 6slu8 lu8BY5 BY5tfD0lKM 0lKMRTwBKu BKuac acny nyTwnF nF Uf4e7 4e7z1iBR iBRo5+

  • 5+X1

X1dH dHSGH SGHd70 d70zpQED QEDR0S4VJ 0S4VJXoYp+ XoYp+A+ A+nArv nArvj3k j3kLy LyQAH QAH2p 2plqx lqxa6 a63+ 3+qxG8G 8G8GF 8GF58Se 58SeSpv Spvp3 p38s 8sgs gsRMc qwPy PyO9/ O9/KqG KqGT8M 8M8KJ KJkMxPVy PVyBy ByAPx APxTueq eq+S +S7Vh 7VhC4k 4kQ944 944+d +dTzhkgaz azd6 d6Mrs rsWEgP75 EgP75l4lw l4lwBt BtQuSgAp uSgApik ikoC5v 5vLNz0U 0Uj XHx31iU 31iU38Ev 38EvZMk8ET 8ETqW+b +b3p 3pWgy gyZpc pc++ ++Gdr drzJe3 e3m6g 6g+P +PY+ Y+8wwnU nUHHCZG3 G3QU QUhGq hGq6SN 6SNY1iU Y1iUxdwe9C e9Cax axhie hieps pslz lzpg ghpn pn7r 7rrhu rhuPnlYm PnlYmLa4o a4ovCXx XxfPT PT0KQ1t KQ1tHdN dNe6 e6nm nmjOM jOMjM jMm75 75i9eN i9eN/YAid7y YAid7yMS9C S9C3a 3a6w 6wpw pwPc Pcbru rugf gfBjv BjvZGlpZ GlpZiw iwo0

  • 07I

7IoZ

  • ZS

+HlA4L A4LPN1bU bUvYm YmCJAo Ao3W 3WLVb LVbxCY7V Y7VSM SMuD uDf2a 2a7J 7JQbQ QbQpR pR4w 4wOd OdEeP EePmyEgB EgBo6

  • 6z+qVp

qVpGe0L e0LgXF gXFTXCda dakDqEvVN qEvVNQ MQ3elEc 3elEcfKdF KdFV1b V1bfNXt Xtf2aa aaF5g 5gtB0 B02P98 2P98UT7H8dlt 8dltCIHjV6J jV6JF+h +h7a 7atS5 S54VnQ 4VnQZm3+ 3+Nphe pheCohW

  • hWnH

nHz/E4F E4FMN5D 5D56x 56xnlI nlIy G8B1I B1IiH iHp5t p5tPg7 Pg7dgi/ dgi/fGo GoV3dS3 V3dS3Ijf jfhYh hYh3q 3qvMBg Bgnz nzY7nYe Y7nYerf rfktuMOM OMzqD qDtzg1+ 1+w4HT1O3 O3uF uFGE7 GE7yLVM VM7x 7xIveFXU XU7Z 7ZLABf LABf5 inJEf EfmMaBg aBguPh4 uPh4cJd9 d9AlLOM AlLOM0x 0xfJ5D 5D9jCZTD58 58v5f 5fGdG GdGRsMs9T 9TFVM VMLu LuvKpE+ KpE+lQ0O lQ0Ojbw jbwFrXv rXvILM LMFlN lN2J 2JTs9KD 9KD+8 +8/9qv qv 9rKw KwUDL6o L6ouQ uQ7/ 7/tQB7y QB7ynYt nYtAgSpF AgSpFj1z j1zDlq lq4R 4Ret etwEw EwrKh rKhm61 61DpR pR8T 8TJGEdid GEdidEi5 i5lD lDOI OIc6JVw VwzQrYZ rYZjh jhEGw EGwqt qt24q 24qXeZ XeZYH YHo MgjT jTV1M V1MDjpm jpm2oj9w

  • j9wQa

Qa6Xu 6Xu28G 28GtpZGw Gwoh

  • hM+z

+zBr4 Br41F 1FcZS6BR S6BRYeW YeWyh2B2 2B2tWkmCSc ScyVw Vwy15f 15fRvqYrv YrvO3 O3BR BRrnk rnkVPp1d VPp1d HWLdv dvg0 g0Df9Z 9ZGqJ qJgBL gBLoH

  • HoC
  • CuM

uMZKd Kd0e 0eBbI BbI=" />

slide-4
SLIDE 4
slide-5
SLIDE 5

Fallacy of Visual Productivity

2 4 6 8 10 12 5 10 15

Drag’n’Drop Features

Maintainability Factor

slide-6
SLIDE 6

Model View Controller

slide-7
SLIDE 7

Separation of Concerns…

slide-8
SLIDE 8
slide-9
SLIDE 9
slide-10
SLIDE 10
slide-11
SLIDE 11
slide-12
SLIDE 12

You’d think we learned…

slide-13
SLIDE 13
slide-14
SLIDE 14
slide-15
SLIDE 15

…one of many anti-patterns

slide-16
SLIDE 16

Single Responsibility Principle

slide-17
SLIDE 17
slide-18
SLIDE 18

Write thy controllers so as tests shall not be needed

slide-19
SLIDE 19

Controller Responsibilities

  • Data conduit between View/Model
slide-20
SLIDE 20

Things to avoid

  • Everything that’s not data passing
  • Avoid repetitive tasks
  • Validations
  • Checks
slide-21
SLIDE 21

DRY up Controllers

  • Aspect Orientated Programming
  • Filters in MVC
  • Attribute
  • Filter Provider
  • Global Filters
slide-22
SLIDE 22

Filters

 Action 

OnActionExecuting OnActionExecuted OnResultExecuting OnResultExecuted

slide-23
SLIDE 23

DEMO

Unknown Record

slide-24
SLIDE 24

DEMO

Http Authentication

slide-25
SLIDE 25

Tight Coupling

slide-26
SLIDE 26
slide-27
SLIDE 27

DEMO

IoC

slide-28
SLIDE 28

DEMO

Startup Tasks - Cleaning up Global.asax

slide-29
SLIDE 29

DEMO

Startup Tasks - Containers

slide-30
SLIDE 30

NuGet

  • Create isolated infrastructure packages
  • Pluggable and Discoverable via
  • IoC
  • MEF
slide-31
SLIDE 31

The Model

slide-32
SLIDE 32

Model Options

  • Domain Model
  • Dynamic Model
  • View Model
slide-33
SLIDE 33
slide-34
SLIDE 34
slide-35
SLIDE 35
slide-36
SLIDE 36
slide-37
SLIDE 37

Domain Model

slide-38
SLIDE 38

How to perform Partial Updates?

slide-39
SLIDE 39

Where to place Extra Data?

slide-40
SLIDE 40

Dynamic Model

slide-41
SLIDE 41

Dynamic Model

slide-42
SLIDE 42

View Model

slide-43
SLIDE 43

Benefits of View Model

  • Clear Intentions
  • Ability for Extra Data
  • Ability for Partial Updates
  • Scaffolding Support
slide-44
SLIDE 44

Downside of View Model

  • Extra Mapping
  • Somewhat unnecessary Class explosion
slide-45
SLIDE 45
slide-46
SLIDE 46

When we map we DRY

slide-47
SLIDE 47

DEMO

AutoMapper

slide-48
SLIDE 48

DEMO

Conventions and Model Lookups

slide-49
SLIDE 49

Overall: Convention / Compromise

slide-50
SLIDE 50

Coping with Complex Sites

slide-51
SLIDE 51
slide-52
SLIDE 52

DEMO

RenderAction – RenderPartial

slide-53
SLIDE 53

RESTifying your application

slide-54
SLIDE 54

ASP.NET MVC 4

slide-55
SLIDE 55
slide-56
SLIDE 56

The “API” Controller

  • MVC for UI
  • Offers “REST” extensibility out of the box
  • Web API for API Controller
  • Offers “REST” features out of the box
slide-57
SLIDE 57

MVC 4 (not Web API)

  • Via extensibility
  • Content Negotiation
  • Caching
  • Routing
  • Hypermedia (not in Web API either)
slide-58
SLIDE 58

DEMO

EasyMVC: Conventions for routing and more

slide-59
SLIDE 59

Other things to watch out for

  • Better Validation
  • FluentValidation
  • Script Organization
  • Bundling in MVC 4
  • Async Controllers
  • Controllerless Actions
slide-60
SLIDE 60

Any framework / language can and will allow bad code

slide-61
SLIDE 61

Thank you!