Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
Implementing Domain-Driven Design: Part 1
Next
Download to read offline and view in fullscreen.

3

Share

Download to read offline

Application Architecture for Enterprise Win Store Apps with DDD Pattern

Download to read offline

Related Books

Free with a 30 day trial from Scribd

See all

Application Architecture for Enterprise Win Store Apps with DDD Pattern

  1. 1. Application Architecturefor EnterpriseWin Store Apps Mar, 30, 2013 @atsukanrockwith DDD Pattern Room metro Tokyo
  2. 2. @atsukanrockhttp://d.hatena.ne.jp/atsukanrock/Enterprise Application Architectになりたい DDD Lover
  3. 3. What customersneed is... 顧客が求めるもの
  4. 4. Win8=業務システム http://wp.techtarget.itmedia.co.jp/contents/?cid=12250
  5. 5. すなわち
  6. 6. Enterprise App
  7. 7. Why App Arch?
  8. 8. Team Development
  9. 9. みんなの力を ひとつに
  10. 10. はいはいワロスワロスなるわけないw
  11. 11. はい、そうですね
  12. 12. メンバーが思い思いに開発すると
  13. 13. スパゲッティ
  14. 14. デスマ
  15. 15. 防ぐためにあるのが
  16. 16. 用語定義 ※オレオレ定義
  17. 17. 「コードをどういう風に組むか」が ※オレオレ定義
  18. 18. 狭義のApp Arch ※オレオレ定義
  19. 19. 「どんなテクノロジーを使うか」も含むのが ※オレオレ定義
  20. 20. 広義のApp Arch ※オレオレ定義
  21. 21. Domain-DrivenDesign
  22. 22. Enterprise Appの設計手法
  23. 23. 狭義のApp Archも 提案
  24. 24. OriginallyProposed by...
  25. 25. The essencewas...
  26. 26. Customerと 一緒に
  27. 27. Domain Model を考える
  28. 28. はいはいワロスワロスお客さんコードとか分からんしw
  29. 29. はい、そうですね
  30. 30. でもDDDは
  31. 31. App Archだけでも高評価
  32. 32. だからパクろう!!
  33. 33. 前提
  34. 34. アプリケーション の性質
  35. 35. 中~大規模
  36. 36. Win8以外にもアプリケーション
  37. 37. むしろメインは
  38. 38. デスクトップもしくはWeb
  39. 39. 開発要件
  40. 40. 柔軟性・変更容易性
  41. 41. Ease ofMaintenance 保守性
  42. 42. どうやって実現したら・・・
  43. 43. DDD本の副題 Tackling Complexity in the Heart of software ソフトウェアの本質である複雑さに立ち向かう
  44. 44. DDD brings us ... DDDがもたらすもの
  45. 45. Design Principles
  46. 46. オブジェクト指向設計の 5大原則
  47. 47. S ingle Responsibility PrincipleO pen Close PrincipleL iskov Substitution PrincipleI interface Segregation PrincipleD ependency Inversion Principle
  48. 48. HighlyCohesive 高凝集
  49. 49. Don’t Repeat Yourself 同じコードを2度書くな
  50. 50. Keepthe cross-cutting codeabstracted 横断的なコードは抽象化
  51. 51. 御託はいいやれ
  52. 52. 全体像
  53. 53. ざっくり http://microsoftnlayerapp.codeplex.com/
  54. 54. 詳しく http://microsoftnlayerapp.codeplex.com/
  55. 55. この辺とhttp://microsoftnlayerapp.codeplex.com/
  56. 56. この辺とhttp://microsoftnlayerapp.codeplex.com/
  57. 57. この辺の話をします http://microsoftnlayerapp.codeplex.com/
  58. 58. ちょっとその前に
  59. 59. Object Types オブジェクトの種類
  60. 60. Entity
  61. 61. http://microsoftnlayerapp.codeplex.com/
  62. 62. ≒DBレコード
  63. 63. でも単なるデータの 容れ物じゃない
  64. 64. 例えばBankAccountクラスMicrosoft.Samples.NLayerApp.Domain.MainBoundedContext.BankingModule.Aggregates.BankAccountAgg名前空間 http://microsoftnlayerapp.codeplex.com/
  65. 65. Deposit/Withdraw メソッド
  66. 66. Deposit/Withdrawの履歴を記録
  67. 67. Balanceプロパティ が常に正しい 状態を保つ
  68. 68. 不正な呼び出しに対しては例外
  69. 69. Value Object
  70. 70. ないけどhttp://microsoftnlayerapp.codeplex.com/
  71. 71. プリミティブ じゃないけどEntityでもない
  72. 72. Stringクラスみたいな感じ
  73. 73. ハッシュコンテナのキーとして使える
  74. 74. 基本immutable
  75. 75. だからスレッドセーフ
  76. 76. 例えば BankAccountNumber クラスMicrosoft.Samples.NLayerApp.Domain.MainBoundedContext.BankingModule.Aggregates.BankAccountAgg名前空間 http://microsoftnlayerapp.codeplex.com/
  77. 77. Domain Service
  78. 78. http://microsoftnlayerapp.codeplex.com/
  79. 79. 例えばBankTransferService クラス Microsoft.Samples.NLayerApp.Domain.MainBoundedContext.BankingModule.Services名前空間 http://microsoftnlayerapp.codeplex.com/
  80. 80. PerformTransfer メソッド
  81. 81. 2つのBankAccount間でお金を移す
  82. 82. SRP原則のため、 BankAccountには置くべきでないロジック
  83. 83. GoFのデザインパターンなどをよく使うのはここ
  84. 84. Template Methodとか Strategy/Stateとか よく使う
  85. 85. 他にも
  86. 86. Repository
  87. 87. http://microsoftnlayerapp.codeplex.com/
  88. 88. …2箇所? http://microsoftnlayerapp.codeplex.com/
  89. 89. Application Service
  90. 90. http://microsoftnlayerapp.codeplex.com/
  91. 91. Domain Serviceと違う…? http://microsoftnlayerapp.codeplex.com/
  92. 92. Specification
  93. 93. http://microsoftnlayerapp.codeplex.com/
  94. 94. Factory
  95. 95. ないけどhttp://microsoftnlayerapp.codeplex.com/
  96. 96. こんな感じでクラスを小さくして
  97. 97. スパゲッティ化を防いでいく
  98. 98. スパゲッティ化を防いでいく
  99. 99. あと
  100. 100. Aggregate 集合
  101. 101. Highly Cohesive (※)にするための考え方 ※高凝集
  102. 102. “Entities” 名前空間に 全部入ってるとか
  103. 103. ダメ、絶対
  104. 104. さて
  105. 105. DistributedInterfaceLayer
  106. 106. この辺の話 http://microsoftnlayerapp.codeplex.com/
  107. 107. 基本的にDBに 繋げない
  108. 108. ざわ‥基本的にDBに 繋げない
  109. 109. ざわ‥基本的にDBに 繋げない ざわ‥
  110. 110. 解決策
  111. 111. はい、そうですね
  112. 112. Webサービス
  113. 113. 問題はどのテクノロジを 使うか
  114. 114. 1. ASP.NET Web API (REST)
  115. 115. 2. WCF (SOAP)
  116. 116. 今時RESTっしょ
  117. 117. たしかにそう
  118. 118. 流行りは REST http://www.infoq.com/jp/news/2011/06/Is-REST-Successful
  119. 119. たいてい RESTでOKhttp://www.codeproject.com/Articles/341414/WCF-or-ASP-NET-Web-APIs-My-two-cents-on-the-subjec
  120. 120. WCFもなかなか イケてる
  121. 121. クライアント自動生成できるから
  122. 122. 開発効率 いいし
  123. 123. 最近では
  124. 124. async/awaitにも対応
  125. 125. async/awaitにも対応 ※自動生成クライアントのこと
  126. 126. Behaviorで AOPしたりhttp://pablocastilla.wordpress.com/2010/11/09/aop-and-ioc-in-wcf-4-0-with-enterprise-library-5-and-appfabric-part-1/
  127. 127. Unity (DIの方) と組み合わせたり http://unitywcf.codeplex.com/
  128. 128. いろいろできる
  129. 129. それゆえに
  130. 130. JavaScriptから 呼んだり
  131. 131. 他システムから 呼ばれたり
  132. 132. 開かれたサービスには
  133. 133. 単にWinRT用なら
  134. 134. 悪くない
  135. 135. 死んでない
  136. 136. めちゃくちゃ難しいけど (・ω<)
  137. 137. Configuration爆発するけど (・ω<)
  138. 138. 補足: WinRTから使えるのは WCFのサブセット http://msdn.microsoft.com/library/hh556233.aspx
  139. 139. PresentationLayer
  140. 140. この辺の話 http://microsoftnlayerapp.codeplex.com/
  141. 141. Win Store App特有なのは Presentation Layerだけ
  142. 142. http://microsoftnlayerapp.codeplex.com/
  143. 143. フツーMVVMでしょ http://microsoftnlayerapp.codeplex.com/
  144. 144. はい、そうですね
  145. 145. PresentationLayerは もしくはMVPVMでMVVMで!
  146. 146. V: View = XAML
  147. 147. VM: View Model = 今まで通り 作るだけ
  148. 148. Framework使う?
  149. 149. MVVM Light Toolkit? http://mvvmlight.codeplex.com/
  150. 150. Prism 改め Kona? http://konaguidance.codeplex.com/
  151. 151. Caliburn.Micro? http://caliburnmicro.codeplex.com/
  152. 152. 発展途上なので何とも言えないが
  153. 153. ひとつ言えるとしたら
  154. 154. いま使ったらきっと
  155. 155. 途中でアップグレードしたくなるから
  156. 156. その辺を計画しておくべき
  157. 157. その辺 (※) を計画しておくべき ※アップグレードプランとか
  158. 158. さてM: Model
  159. 159. http://microsoftnlayerapp.codeplex.com/
  160. 160. 全部M http://microsoftnlayerapp.codeplex.com/
  161. 161. DDD App Archは
  162. 162. MVVMから 見たら
  163. 163. Mばっかり
  164. 164. MにはDomain Logicが 詰まってる
  165. 165. まるで宝石箱
  166. 166. まるで宝石箱 http://www.officiallyjd.com/archives/14054/201104024_othello_02/
  167. 167. Presentation Layer でも使いたい
  168. 168. わざわざWebサービス呼びたくない
  169. 169. クライアントのメモリ上で ロジックを動かしたい
  170. 170. Presentation Layerにコピペすれば?
  171. 171. http://www.flickr.com/photos/andrew_freese/2200774154
  172. 172. 実現する方法が
  173. 173. あるんだよ!!
  174. 174. あるんだよ!!なっ、なんだってェー!!
  175. 175. 1. PCL (Portable Class Library)
  176. 176. 2. コード共有
  177. 177. 2. コード共有プロジェクト間でショートカット張るやつ
  178. 178. 以上
  179. 179. ( ´゚д゚`)エー
  180. 180. そうなんです
  181. 181. Windowsランタイムコンポーネントとか
  182. 182. Windowsストアクラスライブラリは
  183. 183. だめ
  184. 184. ここ http://microsoftnlayerapp.codeplex.com/
  185. 185. .NETで組むから
  186. 186. WinRT専用のは 使えない
  187. 187. でも
  188. 188. おさらい http://microsoftnlayerapp.codeplex.com/
  189. 189. http://microsoftnlayerapp.codeplex.com/
  190. 190. 矢印が出てない http://microsoftnlayerapp.codeplex.com/
  191. 191. どういうことか
  192. 192. どこにも依存してない ということ
  193. 193. アセンブリを分けておけば
  194. 194. 他Layerの アセンブリを参照しないので
  195. 195. Domain Layerは
  196. 196. Presentation Layerからも使えそう!!
  197. 197. ここでひとつ残念なお知らせ
  198. 198. 実は・・・ http://microsoftnlayerapp.codeplex.com/
  199. 199. ここ! http://microsoftnlayerapp.codeplex.com/
  200. 200. たいてい依存する
  201. 201. 例えばValidation
  202. 202. 属性付ける = 依存
  203. 203. 依存しちゃ…ダメ?
  204. 204. いいんです
  205. 205. Cross-Cutting ... には 依存して当然
  206. 206. というわけで
  207. 207. Cross-CuttingInfrastructureLayers
  208. 208. Cross-CuttingInfrastructureLayers 長すぎ
  209. 209. ロギング
  210. 210. 例外処理
  211. 211. そういうやつのこと
  212. 212. はい、そうですね
  213. 213. Enterprise Library http://entlib.codeplex.com/
  214. 214. Microsoft謹製 Cross-cuttingフレームワーク
  215. 215. ちょっと敷居高いけど
  216. 216. 使えるやつなんです
  217. 217. というわけで
  218. 218. 試してみた
  219. 219. PCLから VAB: ValidationApplication Block を使う
  220. 220. 結果から言うと
  221. 221. 無理でしたorz
  222. 222. 今のところPCL版はない
  223. 223. 次バージョンでWinRT対応するかも という話はあるが http://entlib.codeplex.com/discussions/401661
  224. 224. PCL対応の噂はない
  225. 225. 待ってられない
  226. 226. 俺がポートしてやる!!
  227. 227. ( ー`дー´)
  228. 228. 30分後…
  229. 229. (:.;゚;Д;゚;.:)無理
  230. 230. ビルドエラーの嵐
  231. 231. 理由
  232. 232. EntLibの精神
  233. 233. Configuration overConvention 規約より設定 (造語)
  234. 234. Win Store Appには標準のConfigurationの仕組みがない
  235. 235. 相容れない
  236. 236. Silverlightでも状況は同じだが
  237. 237. Silverlight版の EntLibでは
  238. 238. XAMLファイルに Configurationを保存する仕組みを用意
  239. 239. PCL対応するならそうなるだろうけど
  240. 240. .NETから使う時に不便になってしまう
  241. 241. Configuration以外の部分のみをPCL化すると
  242. 242. 近いクラスなのに別アセンブリに 入れることに
  243. 243. EntLibのPCL対応への道は険しい
  244. 244. 同様の理由で
  245. 245. Domain LayerをPCLで作るのは
  246. 246. やめたほうが 良さ気
  247. 247. PCLで作るとしたら
  248. 248. プロジェクト用のCross-cuttingライブラリ ぐらいかと
  249. 249. したがって
  250. 250. Presentation Layerで Mを使うには
  251. 251. コード共有 を推奨
  252. 252. そしたら#ifが使えるし
  253. 253. まとめ
  254. 254. 大事なこと
  255. 255. 3つ言いました
  256. 256. WCF is NOTdead!!WCFは死んでねぇ!!
  257. 257. 依存関係を慎重に排除して
  258. 258. Keep Domain LogicSimple and Clean!! ドメインロジックは簡潔に!!
  259. 259. すると
  260. 260. Presentation Layer でも使える
  261. 261. EntLib is sleeping... EntLibはお休み中です…
  262. 262. We want EntLib6!! EntLib6に期待!!
  263. 263. そして最後に
  264. 264. ありがとうござ いました!!!
  265. 265. Any question? 質疑応答
  • AtsuoAoki

    Mar. 19, 2017
  • nagasama

    Jul. 26, 2014
  • watarun1

    May. 27, 2013

Views

Total views

3,336

On Slideshare

0

From embeds

0

Number of embeds

1,491

Actions

Downloads

10

Shares

0

Comments

0

Likes

3

×