Architecting Design Decisions

Architecting Design Decisions

We have a tendency to dive into a project and start coding prematurely. Sometimes we forget that we need to take a step back and ask "How do I best achieve the goals of this project?". Before writing the code, we need to understand the problem, the difficulties, and the architecture of a proposed solution. We need to understand the different layers of the architecture we are proposing. In this talk, I will be showing attendees the proper design for these layers. * Application * Service * Data I will show you the responsibilities for each of these layers, where they fit into your application, and how they should properly interact with each other. Before you fire up your text editor and start writing code, stand back and take a look. See the beauty of the layers.

9c3934401516e367891d48ccfefbb4f0?s=128

Viraj Khatavkar

May 29, 2016
Tweet

Transcript

  1. 'PMMPX143 @virajkhatavkar

  2. "SDIJUFDUJOH%FTJHO %FDJTJPOT

  3. @virajkhatavkar

  4. @virajkhatavkar

  5. 5IFIFBSUPGTPGUXBSFJTJUT BCJMJUZUPTPMWFEPNBJO SFMBUFEQSPCMFNTGPSJUTVTFS @virajkhatavkar

  6. $PNQMFYJUZJOUIFIFBSUPG TPGUXBSFIBTUPCFUBDLMFE IFBEPO5PEPPUIFSXJTFJT UPSJTLJSSFMFWBODF @virajkhatavkar

  7. '6/$5*0/"- 3&26*3&.&/54 @virajkhatavkar

  8. 64&$"4&4 @virajkhatavkar

  9. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF \ 4JHO6QUIFVTFS#VU XIBUFMTFEPUIFZXBOU 3FHVMBS4VCTDSJCFS

    +PJOJOHB5FBN 3FHJTUFSGPS'PSVN ^ ^ @virajkhatavkar
  10. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ 4JHO6QUIFVTFS#VU XIBUFMTFEPUIFZXBOU

    VTFS OFX 6TFS  VTFSOBNFSFRVFTUOBNF VTFSSPMFSFRVFTUSPMF 3FHVMBS4VCTDSJCFS VTFSTBWF VTFS  +PJOJOHBHJTUFS GPS'PSVN ^ ^ @virajkhatavkar
  11. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF \ 4JHO6QUIFVTFS#VU IPX 3FHVMBS4VCTDSJCFS

    +PJOJOHB5FBN 3FHJTUFSGPS'PSVN ^ ^ @virajkhatavkar
  12. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF \ 4JHO6QUIFVTFS#VU IPX 3FHVMBS4VCTDSJCFS

    +PJOJOHB5FBN 3FHJTUFSGPS'PSVN ^ ^ @virajkhatavkar
  13. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF \ 4JHO6QUIFVTFS#VU IPX 3FHVMBS4VCTDSJCFS

    +PJOJOHB5FBN 3FHJTUFSGPS'PSVN ^ ^ @virajkhatavkar
  14. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF \ 4JHO6QUIFVTFS#VU IPX 3FHVMBS4VCTDSJCFS

    +PJOJOHB5FBN 3FHJTUFSGPS'PSVN ^ ^ @virajkhatavkar
  15. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ JG SFRVFTUIBT

    bGPSVN`  \ 3FHJTUFSGPS'PSVN ^ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ 4VCTDSJCFUPQBJEQMBO ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ 4VCTDSJCFUPBOFYJTUJOHUFBNBDDPVOU ^ ^ ^ @virajkhatavkar
  16. 453"5&(:1"55&3/ @virajkhatavkar

  17. %FGJOFBGBNJMZPG BMHPSJUINT FODBQTVMBUFFBDI POF BOENBLFUIFN JOUFSDIBOHFBCMF @virajkhatavkar

  18. @virajkhatavkar

  19. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ JG SFRVFTUIBT

    bGPSVN`  \ 3FHJTUFSGPS'PSVN ^ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ 4VCTDSJCFUPQBJEQMBO ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ 4VCTDSJCFUPBOFYJTUJOHUFBNBDDPVOU ^ ^ ^ @virajkhatavkar
  20. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  21. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  22. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  23. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  24. *EFOUJGZBQPJOUPGGMFYJCJMJUZ • 3FHVMBS4VCTDSJCFS • +PJOB5FBN • 3FHJTUFSGPS'PSVN @virajkhatavkar

  25. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  26. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ JG SFRVFTUIBT

    bGPSVN`  \ 3FHJTUFSGPS'PSVN ^ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ 4VCTDSJCFUPQBJEQMBO ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ 4VCTDSJCFUPBOFYJTUJOHUFBNBDDPVOU ^ ^ ^ @virajkhatavkar
  27. DMBTT 3FHJTUFST3FHVMBS4VCTDSJCFS \ ^ @virajkhatavkar

  28. DMBTT 3FHJTUFST5FBN.FNCFS \ ^ @virajkhatavkar

  29. DMBTT 3FHJTUFST'PSVN6TFS \ ^ @virajkhatavkar

  30. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  31. JOUFSGBDF 3FHJTUFST6TFS \ ^ @virajkhatavkar

  32. JOUFSGBDF3FHJTUFST6TFS \ QVCMJD GVODUJPO IBOEMF  ^ @virajkhatavkar

  33. DMBTT 3FHJTUFST3FHVMBS4VCTDSJCFS JNQMFNFOUT 3FHJTUFST6TFS \ QVCMJD GVODUJPO IBOEMF \ -PHJDGPS3FHJTUFSJOHB3FHVMBS4VCTDSJCFS

    ^ ^ @virajkhatavkar
  34. DMBTT 3FHJTUFST5FBN.FNCFS JNQMFNFOUT 3FHJTUFST6TFS \ QVCMJD GVODUJPO IBOEMF \ -PHJDGPS+PJOJOHUPB5FBN

    ^ ^ @virajkhatavkar
  35. DMBTT 3FHJTUFST'PSVN6TFS JNQMFNFOUT 3FHJTUFST6TFS \ QVCMJD GVODUJPO IBOEMF \ -PHJDGPS3FHJTUFSJOHBTB'PSVN6TFS

    ^ ^ @virajkhatavkar
  36. "DUJPOJUFNT  *EFOUJGZBQPJOUPGGMFYJCJMJUZ  &YUSBDUFBDITUSBUFHZJOUPJUTPXO DMBTT  "EIFSFFBDITUSBUFHZUPBDPOUSBDU  %FUFSNJOFUIFQSPQFSTUSBUFHZBOEMFU

    JUIBOEMFUIFUBTL @virajkhatavkar
  37. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ ^ QSPUFDUFEGVODUJPO

    TUSBUFHZ \ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ SFUVSO OFX3FHJTUFST3FHVMBS4VCTDSJCFS ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ SFUVSO OFX3FHJTUFST5FBN.FNCFS ^ SFUVSO OFX3FHJTUFST'PSVN6TFS ^ ^ @virajkhatavkar
  38. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ UIJTTUSBUFHZ SFRVFTU

    IBOEMF  ^ QSPUFDUFEGVODUJPO TUSBUFHZ SFRVFTU \ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ SFUVSO OFX3FHJTUFST3FHVMBS4VCTDSJCFS ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ SFUVSO OFX3FHJTUFST5FBN.FNCFS ^ SFUVSO OFX3FHJTUFST'PSVN6TFS ^ ^ @virajkhatavkar
  39. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU \ UIJTTUSBUFHZ SFRVFTU

    IBOEMF  ^ QSPUFDUFEGVODUJPOTUSBUFHZ SFRVFTU \ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ SFUVSOOFX3FHJTUFST3FHVMBS4VCTDSJCFS ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ SFUVSOOFX3FHJTUFST5FBN.FNCFS ^ SFUVSOOFX3FHJTUFST'PSVN6TFS ^ ^ @virajkhatavkar
  40. DMBTT 4VCTDSJQUJPO$POUSPMMFS \ QVCMJD GVODUJPO TUPSF 3FRVFTUSFRVFTU 'BDUPSZ GBDUPSZ \

    GBDUPSZHFU4USBUFHZ SFRVFTU IBOEMF  ^ QSPUFDUFEGVODUJPOTUSBUFHZ SFRVFTU \ JG SFRVFTUIBT bQBJE@TVCTDSJQUJPO`  \ SFUVSOOFX3FHJTUFST3FHVMBS4VCTDSJCFS ^ JG SFRVFTUIBT bKPJO@B@UFBN`  \ SFUVSOOFX3FHJTUFST5FBN.FNCFS ^ SFUVSOOFX3FHJTUFST'PSVN6TFS ^ ^ @virajkhatavkar
  41. @virajkhatavkar

  42. "SDIJUFDUVSF%FDJTJPO WT %FTJHO%FDJTJPO @virajkhatavkar

  43. "SDIJUFDUVSF%FDJTJPO WT %FTJHO%FDJTJPO @virajkhatavkar

  44. "SDIJUFDUVSF%FDJTJPO WT %FTJHO%FDJTJPO @virajkhatavkar

  45. "EFTJHOSFQSFTFOUTPOF QPJOUJOUIFQPUFOUJBM EFDJTJPOTQBDF @virajkhatavkar

  46. "MMBSDIJUFDUVSFJTEFTJHOCVU OPUBMMEFTJHOJTBSDIJUFDUVSF @virajkhatavkar

  47. "SDIJUFDUVSFSFQSFTFOUTUIF TJHOJGJDBOUEFTJHOEFDJTJPOTUIBU TIBQFBTZTUFN XIFSF TJHOJGJDBODFJTNFBTVSFECZDPTU PGDIBOHF @virajkhatavkar

  48. 5ZQJDBM$POUSPMMFS @virajkhatavkar

  49. QVCMJDGVODUJPO TUPSF 3FRVFTUSFRVFTU  \ UBTL OFX 5BTL  UBTLUJUMFSFRVFTUUJUMF

    UBTLEVF@EBUF SFRVFTUEVF@EBUF JG UBTLTBWF  \ 4FOE&NBJMUPUFBNNFNCFST /PUJGZ5FBN-FBEFS -PH"DUJPO 4FU$30/+PCGPSSFNJOEFST SFUVSO UIJTSFEJSFDU bFEJU@QBHF`  ^ UISPX OFX /PU'PVOE&YDFQUJPO  ^ @virajkhatavkar
  50. @virajkhatavkar

  51. *OEFGFOTFPG$36% UIJTJT QFSGFDUMZ0,J "EWJDF'PSTNBMMBQQT @virajkhatavkar

  52. @virajkhatavkar .PEFM %PNBJO-BZFS $POUSPMMFS 7JFX

  53. @virajkhatavkar .PEFM 4FSWJDF-BZFS $POUSPMMFS 7JFX %PNBJO-BZFS

  54. QVCMJDGVODUJPO TUPSF 3FRVFTUSFRVFTU  \ UBTL OFX 5BTL  UBTLUJUMFSFRVFTUUJUMF

    UBTLEVF@EBUF SFRVFTUEVF@EBUF JG UBTLTBWF  \ 4FOE&NBJMUPUFBNNFNCFST /PUJGZ5FBN-FBEFS -PH"DUJPO 4FU$30/+PCGPSSFNJOEFST SFUVSO UIJTSFEJSFDU bFEJU@QBHF`  ^ UISPX OFX /PU'PVOE&YDFQUJPO  ^ @virajkhatavkar
  55. $PNNBOEPSJFOUFE BSDIJUFDUVSF @virajkhatavkar

  56. $PNNBOET • $PNNBOETBSFTJNQMF%50T • 5IFJSPOMZSFTQPOTJCJMJUZJTUPDPOUBJOJOGPSNBUJPO @virajkhatavkar

  57. DMBTT $SFBUF5BTL$PNNBOE \ QVCMJD OBNF QVCMJD EVF@EBUF QVCMJDGVODUJPO @@DPOTUSVDU UBTL@OBNF

    EVF@EBUF \ UIJTOBNF UBTL@OBNF UIJTEVF@EBUF EVF@EBUF ^ ^ @virajkhatavkar
  58. $0.."/% 1SFTFOUBUJPO-BZFS 4FSWJDF-BZFS $0.."/% )"/%-&3 @virajkhatavkar

  59. $0.."/% 1SFTFOUBUJPO-BZFS 4FSWJDF-BZFS $0.."/% )"/%-&3 @virajkhatavkar

  60. $0.."/% 1SFTFOUBUJPO-BZFS 4FSWJDF-BZFS $0.."/% )"/%-&3 $0.."/% #64 @virajkhatavkar

  61. QVCMJDGVODUJPO TUPSF 3FRVFTUSFRVFTU  \ UBTL OFX 5BTL  UBTLUJUMFSFRVFTUUJUMF

    UBTLEVF@EBUF SFRVFTUEVF@EBUF JG UBTLTBWF  \ 4FOE&NBJMUPUFBNNFNCFST /PUJGZ5FBN-FBEFS -PH"DUJPO 4FU$30/+PCGPSSFNJOEFST SFUVSO UIJTSFEJSFDU bFEJU@QBHF`  ^ UISPX OFX /PU'PVOE&YDFQUJPO  ^ @virajkhatavkar
  62. DMBTT $SFBUF5BTL$PNNBOE \ QVCMJD OBNF QVCMJD EVF@EBUF QVCMJDGVODUJPO @@DPOTUSVDU UBTL@OBNF

    EVF@EBUF \ UIJTOBNF UBTL@OBNF UIJTEVF@EBUF EVF@EBUF ^ ^ @virajkhatavkar
  63. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO@@DPOTUSVDU 5BTLUBTL .BJMFSNBJMFS \ UIJTUBTLUBTL UIJTNBJMFSNBJMFS ^

    ^ @virajkhatavkar
  64. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL .BJMFS NBJMFS \

    UIJTUBTL UBTL UIJTNBJMFS NBJMFS ^ ^ @virajkhatavkar
  65. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL .BJMFS NBJMFS \

    UIJTUBTL UBTL UIJTNBJMFS NBJMFS ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ ^ ^ @virajkhatavkar
  66. QVCMJD GVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ ^ @virajkhatavkar This function

    is responsible for carrying out all the sequential tasks
  67. QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF

     \ 4FOE&NBJM 4FU$SPO +PCT 8SBQJOB%#5SBOTBDUJPO ^ ^ @virajkhatavkar
  68. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL .BJMFS NBJMFS \

    UIJTUBTL UBTL UIJTNBJMFS NBJMFS ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF  \ 4FOE&NBJM 4FU$SPO +PCT 8SBQJOB%#5SBOTBDUJPO ^ ^ ^ @virajkhatavkar
  69. $POUSPMMFS QVCMJDGVODUJPO TUPSF 3FRVFTUSFRVFTU  \ DPNNBOE OFX $SFBUF5BTL$PNNBOE SFRVFTUOBNF

    SFRVFTUEVF@EBUF  UIJTDPNNBOE#VTFYFDVUF DPNNBOE  SFUVSO UIJTSFEJSFDU bFEJU@QBHF`  ^ @virajkhatavkar
  70. CREATE TASK COMMAND Presentation Layer @virajkhatavkar

  71. CREATE TASK COMMAND Presentation Layer Service Layer CREATE TASK COMMAND

    HANDLER COMMAND BUS @virajkhatavkar
  72. 6TFDBTF @virajkhatavkar

  73. CLI WEB API @virajkhatavkar

  74. CLI Command WEB API @virajkhatavkar

  75. CLI Command WEB API @virajkhatavkar

  76. &WFOUTJ @virajkhatavkar

  77. &YBNQMFTPGFWFOUT • 6TFS3FHJTUFSFE • 1PTUMJLFE • 6TFS5BHHFE • 1BTTXPSE$IBOHFE @virajkhatavkar

  78. Events (are fired) @virajkhatavkar

  79. Events (are fired) Listeners Are caught by @virajkhatavkar

  80. Listeners Services dispatch @virajkhatavkar

  81. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL .BJMFS NBJMFS \

    UIJTUBTL UBTL UIJTNBJMFS NBJMFS ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF  \ NBJMFSUBTL$SFBUFE UBTL  ^ ^ ^ @virajkhatavkar
  82. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL .BJMFS NBJMFS \

    UIJTUBTL UBTL UIJTNBJMFS NBJMFS ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF  \ NBJMFSUBTL$SFBUFE UBTL  ^ ^ ^ @virajkhatavkar Task Created event
  83. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL .BJMFS NBJMFS \

    UIJTUBTL UBTL UIJTNBJMFS NBJMFS ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF  \ NBJMFSUBTL$SFBUFE UBTL  ^ ^ ^ @virajkhatavkar
  84. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL \ UIJTUBTL UBTL

    ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF  \ FWFOUOFX &WFOU  UIJTFWFOU.BOBHFS EJTQBUDI FWFOU  ^ ^ ^ @virajkhatavkar
  85. DMBTT $SFBUF5BTL$PNNBOE)BOEMFS \ QVCMJDGVODUJPO @@DPOTUSVDU 5BTL UBTL \ UIJTUBTL UBTL

    ^ QVCMJDGVODUJPO IBOEMF $SFBUF5BTL$PNNBOE DPNNBOE \ UIJTUBTLUJUMFDPNNBOEUJUMF UIJTUBTLEVF@EBUF DPNNBOEEVF@EBUF JG UIJTUBTLTBWF  \ FWFOU OFX &WFOU  UIJTFWFOU.BOBHFS EJTQBUDI FWFOU  ^ ^ ^ @virajkhatavkar
  86. TaskCreatedEvent (is fired) TaskCreatedListener caught by @virajkhatavkar

  87. Log Info TaskCreatedListener Set Cron Job Send Email @virajkhatavkar

  88. $-&"/"3$)*5&$563& • *OEFQFOEFOUPGGSBNFXPSLT @virajkhatavkar

  89. $-&"/"3$)*5&$563& • *OEFQFOEFOUPGGSBNFXPSLT • 5FTUBCMF @virajkhatavkar

  90. $-&"/"3$)*5&$563& • *OEFQFOEFOUPGGSBNFXPSLT • 5FTUBCMF • *OEFQFOEFOUPG6* @virajkhatavkar

  91. $-&"/"3$)*5&$563& • *OEFQFOEFOUPGGSBNFXPSLT • 5FTUBCMF • *OEFQFOEFOUPG6* • *OEFQFOEFOUPG%BUBCBTF @virajkhatavkar

  92. $-&"/"3$)*5&$563& • *OEFQFOEFOUPGGSBNFXPSLT • 5FTUBCMF • *OEFQFOEFOUPG6* • *OEFQFOEFOUPG%BUBCBTF •

    *OEFQFOEFOUPGFYUFSOBMBHFODZ @virajkhatavkar
  93. $234

  94. @virajkhatavkar

  95. "CPVU.F • 'PVOEFS )FBEPG5FDIOPMPHZ • 1)1 • 6*69 • "OHVMBS+4

    • WJSBK!UBOUSBHZBODPN • !WJSBKLIBUBWLBS @virajkhatavkar 5BOUSB(ZBO
  96. KPJOEJOUBMLDF

  97. 26&45*0/4