SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Small-­‐Object	
  Programming	
  
  とコードの自動生成	
 オブジェクトが小さくなったら、コード
   が自動生成できちゃった!?	
  
     2012/10/26	
  豆ナイト	


            (c)2012	
  	
  Starlight&Storm	
     1	
  
発表者:長谷川 裕一	
  
•  合同会社Starlight&Storm	
  代表社員	
  
   –  1986年、イリノイ州警察指紋システムのアセンブリ言語プ
      ログラマからスタートして、PL,PMと経験し、アーキテクト、
      コンサルタントへ	
  
   –  現在はオブジェクト指向を中心に、コンサルティング(IT戦
      略、技術、プロセス、マネージメント...etc)や教育で活動	
  
•  書籍	
  
   –  プログラムの育てかた(ソフトバンク)、Spring入門(技術評
      論社)、Spring2.0入門(技術評論社)、間違いだらけのソフ
      トウェア・アーキテクチャ(技術評論社)	
  
•  その他	
  
   –  日本Springユーザ会会長、SQuBOK開発領域策定メンバ、
      株式会社フルネス取締役	
  
                                           2
お話の前提              こんな仕事があった…	
•  課題が色々あった	
  
  –  どうすれば、コードの重複をなくせるか	
  
  –  どうすれば、属性の仕様をまとめることができるか	
  
  –  どうすれば、コードの自動生成ができるか	
  
  –  どうすれば、DDDと自動生成の両方を活かせるか	
  
  –  どうすれば、ユーザが積極的に自動生成に関われるか	
  
  –  どうすれば、自動生成後のコードメンテナンスを簡単にで
     きるようになるか	
  
•  解決策として	
  
  –  S-­‐OP(Small-­‐Object	
  Programming)なら課題の解決が可能
     ということに行き着いた	
  


                     (c)2012	
  	
  Starlight&Storm	
     3	
  
お断り	
•  ThoughtWorksアンソロジーのオブジェクト指向エク
   ササイズのような、如何に正しいオブジェクト「思考」
   でコーディングするかという話ではありません	
  
 –  もちろん、それは大事です。それは承知の上で…	
  
•  目指したのは、正しいオブジェクト「思考」でコーディ
   ングできない人達が多い中でも、システムを簡単に
   安く、かつ平均以上の品質で、開発し、メンテナンス
   し続けることです	
  
 –  もちろん、そうは言っても、全員がオブジェクト「思考はダ
    メ」では話にならないのですし、ThoughtWorksアンソロ
    ジーのオブジェクト指向エクササイズも意識してますが…	


             (c)2012	
  	
  Starlight&Storm	
     4	
  
フィールドをクラスにする	


       (c)2012	
  	
  Starlight&Storm	
     5	
  
普通のEmployeeクラス	




          (c)2012	
  	
  Starlight&Storm	
     6
普通の(散らばる検証)処理	




        (c)2012	
  	
  Starlight&Storm	
     7	
  
処理をどこに置くか?	
•  メソッドを、ドメインクラスに置いても処理の重
   複は排除できない	
  
 –  フィールドクラスの採用	
  
                                             例えば、nameやcodeは、
                                              単独でも検証される	




              (c)2012	
  	
  Starlight&Storm	
                 8
フィールドをクラスにする	
•  フィールド(nameとcode)をクラスにする	
  
•  フィールドの処理は、フィールドでおこなう	
  
•  フィールドクラスは単体でも利用可能	
  




               (c)2012	
  	
  Starlight&Storm	
     9	
  
Employeeと周辺クラス	
•  NameやCodeの処理が変更になった場合も、
   利用側のコードには影響がない	




          (c)2012	
  	
  Starlight&Storm	
     10
フィールドをクラスにしないデメリット	
•  通常Stringやリテラルの属性として記述される商品
   コードetcがどのように利用されているか、どのような
   仕様かは、コードから読取ることは(なかなか)でき
   ない	
  
 –  例:以下はシステムに散らばった商品コードの例。これで
    は検索もできない	
  
    •  String	
  shohinCode	
  
    •  String	
  sc	
  
    •  String	
  shohinCd	
  
 –  例:ValidaYon(ex:	
  if(sc.equals("")){...})が様々なクラスに
    分散(修正が複数カ所に及ぶ)	
  
 –  例:仕様書がないと、商品コードの仕様がわからない	
  
    •  検証処理は分散しているし、商品コードの変数名は不統一	
  

                                  (c)2012	
  	
  Starlight&Storm	
     11
フィールドをクラスにするメリット	
•  利用方法と仕様がひとめで分かる	
  
   –  商品コードクラスが、利用方法と仕様を表している	
  
•  検索が楽	
  
   –  商品コードは常に商品コードの型	
  
   –  例:ShohinCode	
  sc;	
  
•  修正は常に1カ所	
  
   –  商品コードの検証処理は商品コードがもつので、処理が分散しない	
  
•  仕様書は不要(もしくは後述する自動生成用のExcelが仕様
   書)	
  
   –  商品コードの仕様は、商品コードクラスがもっている	
  
•  システムを再構築する場合も、フィールドクラスは再利用可
   能(なものが多い)	


                      (c)2012	
  	
  Starlight&Storm	
     12
Javaの冗長性を排除	


        (c)2012	
  	
  Starlight&Storm	
     13	
  
普通の(冗長な)Employeeクラス	




         (c)2012	
  	
  Starlight&Storm	
     14
Employeeの冗長性排除	
•  Java	
  言語の欠点は構文の冗長性	
  
  –  Seder-­‐Geder	
                                   ほぼ、Seder-­‐Geder
                                                       だけなのに、やけ
  –  toString()	
                                       に長いEmployee	

  –  equals()	
  
  –  ローカル変数の宣言	
  
  –  コンストラクタ	
  
  –  close()	
  
  –  try-­‐catch	
  
  –  Log	
   Spring等のフレームワーク
  –  ・・・	
   でカバーする範囲	

                  (c)2012	
  	
  Starlight&Storm	
                    15
広 告	


•  COMMING	
  SOON!	




                  (c)2012	
  	
  Starlight&Storm	
     16	
  
Lombokの利用法	
•  @Dataアノテーション	
  
  –  Geder-­‐Sederが不要	
  
  –  toString()が不要	
  
  –  equals()が不要	




                     (c)2012	
  	
  Starlight&Storm	
     17
Employeeと周辺クラス(Lombok適用)	




          (c)2012	
  	
  Starlight&Storm	
     18
自動生成を考える	


       (c)2012	
  	
  Starlight&Storm	
     19	
  
DDDのパターンを利用する	
•  FactoriesやRepositoriesパターンを利用して、
   フィールド・クラスをもった、ドメイン・クラスを
   作成する	




 Factory	
                                         Repository	




              (c)2012	
  	
  Starlight&Storm	
                    20	
  
自動生成への道	
•  DDDの実施後、ユーザがクラスの設計をおこ
   ない、設計からクラスを自動生成する	
  
•  フィールドクラスやLombokを利用すれば、
   コード生成はより簡単に可能	
  



        変
        換	




              (c)2012	
  	
  Starlight&Storm	
     21
自動生成と開発(例)	

         入力	
               自動生成	

ユーザ	
                                                                                 ・補完
                                                 Test	
               Java	
     ・テスト
                                                 Code	
               Doc	
      ・アーカイブ化
                                                                                 ・提供...etc	

        開発	
                              jarとして提供	
                            ×	
                                                                     ソースコードは直接
                                                                     修正できない	
                Eclipse	




                               (c)2012	
  	
  Starlight&Storm	
                           22
広 告	
•  Java	
  Small-­‐Object	
  Programming	
  
  – 研修	
  
  – システムへの導入	
  
  – 自動生成ツールの作成	



              info@starlight-storm.com	


                   (c)2012	
  	
  Starlight&Storm	
     23	
  
http://www.starlight-storm.com/	
    info@starlight-storm.com	




         (c)2012	
  	
  Starlight&Storm	
     24	
  
付録:インスタンス生成時間の検証	
•  S-­‐OP	
  vs	
  OP	
  :	
  MyBaYs2,	
  HSQLDB	
  MEMORY	
  




                        クラスのプロパティ数*クラスのインスタンス数

Weitere ähnliche Inhalte

Andere mochten auch

[Jjug]java small object programming
[Jjug]java small object programming[Jjug]java small object programming
[Jjug]java small object programmingYuichi Hasegawa
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる増田 亨
 
Bluemixでdev opsして分かったpaasの良いとこ悪いとこ
Bluemixでdev opsして分かったpaasの良いとこ悪いとこ Bluemixでdev opsして分かったpaasの良いとこ悪いとこ
Bluemixでdev opsして分かったpaasの良いとこ悪いとこ Harada Kazuki
 
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive SystemTypesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive SystemTIS Inc.
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Yuichi Hasegawa
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Takuma Watabiki
 
Retail Mobile App
Retail Mobile App Retail Mobile App
Retail Mobile App techugo
 
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Yuichi Hasegawa
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計増田 亨
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?増田 亨
 
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」Yoshimura Soichiro
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 

Andere mochten auch (14)

[Jjug]java small object programming
[Jjug]java small object programming[Jjug]java small object programming
[Jjug]java small object programming
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
Bluemixでdev opsして分かったpaasの良いとこ悪いとこ
Bluemixでdev opsして分かったpaasの良いとこ悪いとこ Bluemixでdev opsして分かったpaasの良いとこ悪いとこ
Bluemixでdev opsして分かったpaasの良いとこ悪いとこ
 
Typesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive SystemTypesafe Reactive Platformで作るReactive System
Typesafe Reactive Platformで作るReactive System
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
 
Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所Grailsでドメイン駆動設計を実践する時の勘所
Grailsでドメイン駆動設計を実践する時の勘所
 
Retail Mobile App
Retail Mobile App Retail Mobile App
Retail Mobile App
 
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Ähnlich wie [豆ナイト]Java small object programming

2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門Daiyu Hatakeyama
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化Yukei Wachi
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~じゅん なかざ
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】Tomoharu ASAMI
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupRecruit Technologies
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackkimukou_26 Kimukou
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2lyrical_logical
 
Struggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupStruggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupDataWorks Summit/Hadoop Summit
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in DartGoro Fuji
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413Funato Takashi
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 

Ähnlich wie [豆ナイト]Java small object programming (20)

つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化
 
MongoDB2.2の新機能
MongoDB2.2の新機能MongoDB2.2の新機能
MongoDB2.2の新機能
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
Struggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit group
 
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hackTry_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2第一回社内 Scala 勉強会(一部抜粋)その 2
第一回社内 Scala 勉強会(一部抜粋)その 2
 
Struggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupStruggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit Group
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in Dart
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Springでdao 20070413
Springでdao 20070413Springでdao 20070413
Springでdao 20070413
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
JAWS DAYS 2022
JAWS DAYS 2022JAWS DAYS 2022
JAWS DAYS 2022
 
Gradle handson
Gradle handsonGradle handson
Gradle handson
 

Mehr von Yuichi Hasegawa

Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版Yuichi Hasegawa
 
thymeleafさいしょの一歩
thymeleafさいしょの一歩thymeleafさいしょの一歩
thymeleafさいしょの一歩Yuichi Hasegawa
 
マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)Yuichi Hasegawa
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つYuichi Hasegawa
 
こどもの絵本 ヒトラーとナチ
 こどもの絵本 ヒトラーとナチ こどもの絵本 ヒトラーとナチ
こどもの絵本 ヒトラーとナチYuichi Hasegawa
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたいYuichi Hasegawa
 
Spring4-DevLove発表資料
Spring4-DevLove発表資料Spring4-DevLove発表資料
Spring4-DevLove発表資料Yuichi Hasegawa
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCYuichi Hasegawa
 

Mehr von Yuichi Hasegawa (13)

Spring 18年の歴史
Spring 18年の歴史Spring 18年の歴史
Spring 18年の歴史
 
Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版Spring 5でSpring Testのここが変わる_公開版
Spring 5でSpring Testのここが変わる_公開版
 
Enterprise Microservice
Enterprise MicroserviceEnterprise Microservice
Enterprise Microservice
 
thymeleafさいしょの一歩
thymeleafさいしょの一歩thymeleafさいしょの一歩
thymeleafさいしょの一歩
 
マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)マイクロサービス入門(Spring fest 2017)
マイクロサービス入門(Spring fest 2017)
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ
 
こどもの絵本 ヒトラーとナチ
 こどもの絵本 ヒトラーとナチ こどもの絵本 ヒトラーとナチ
こどもの絵本 ヒトラーとナチ
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
 
Spring4-DevLove発表資料
Spring4-DevLove発表資料Spring4-DevLove発表資料
Spring4-DevLove発表資料
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
Spring3.1 aop-mvc
Spring3.1 aop-mvcSpring3.1 aop-mvc
Spring3.1 aop-mvc
 
Spring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVCSpring3.1概要 AOP & MVC
Spring3.1概要 AOP & MVC
 

Kürzlich hochgeladen

UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 

Kürzlich hochgeladen (7)

UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

[豆ナイト]Java small object programming

  • 1. Small-­‐Object  Programming   とコードの自動生成 オブジェクトが小さくなったら、コード が自動生成できちゃった!?   2012/10/26  豆ナイト (c)2012    Starlight&Storm   1  
  • 2. 発表者:長谷川 裕一   •  合同会社Starlight&Storm  代表社員   –  1986年、イリノイ州警察指紋システムのアセンブリ言語プ ログラマからスタートして、PL,PMと経験し、アーキテクト、 コンサルタントへ   –  現在はオブジェクト指向を中心に、コンサルティング(IT戦 略、技術、プロセス、マネージメント...etc)や教育で活動   •  書籍   –  プログラムの育てかた(ソフトバンク)、Spring入門(技術評 論社)、Spring2.0入門(技術評論社)、間違いだらけのソフ トウェア・アーキテクチャ(技術評論社)   •  その他   –  日本Springユーザ会会長、SQuBOK開発領域策定メンバ、 株式会社フルネス取締役   2
  • 3. お話の前提 こんな仕事があった… •  課題が色々あった   –  どうすれば、コードの重複をなくせるか   –  どうすれば、属性の仕様をまとめることができるか   –  どうすれば、コードの自動生成ができるか   –  どうすれば、DDDと自動生成の両方を活かせるか   –  どうすれば、ユーザが積極的に自動生成に関われるか   –  どうすれば、自動生成後のコードメンテナンスを簡単にで きるようになるか   •  解決策として   –  S-­‐OP(Small-­‐Object  Programming)なら課題の解決が可能 ということに行き着いた   (c)2012    Starlight&Storm   3  
  • 4. お断り •  ThoughtWorksアンソロジーのオブジェクト指向エク ササイズのような、如何に正しいオブジェクト「思考」 でコーディングするかという話ではありません   –  もちろん、それは大事です。それは承知の上で…   •  目指したのは、正しいオブジェクト「思考」でコーディ ングできない人達が多い中でも、システムを簡単に 安く、かつ平均以上の品質で、開発し、メンテナンス し続けることです   –  もちろん、そうは言っても、全員がオブジェクト「思考はダ メ」では話にならないのですし、ThoughtWorksアンソロ ジーのオブジェクト指向エクササイズも意識してますが… (c)2012    Starlight&Storm   4  
  • 5. フィールドをクラスにする (c)2012    Starlight&Storm   5  
  • 6. 普通のEmployeeクラス (c)2012    Starlight&Storm   6
  • 7. 普通の(散らばる検証)処理 (c)2012    Starlight&Storm   7  
  • 8. 処理をどこに置くか? •  メソッドを、ドメインクラスに置いても処理の重 複は排除できない   –  フィールドクラスの採用   例えば、nameやcodeは、 単独でも検証される (c)2012    Starlight&Storm   8
  • 9. フィールドをクラスにする •  フィールド(nameとcode)をクラスにする   •  フィールドの処理は、フィールドでおこなう   •  フィールドクラスは単体でも利用可能   (c)2012    Starlight&Storm   9  
  • 10. Employeeと周辺クラス •  NameやCodeの処理が変更になった場合も、 利用側のコードには影響がない (c)2012    Starlight&Storm   10
  • 11. フィールドをクラスにしないデメリット •  通常Stringやリテラルの属性として記述される商品 コードetcがどのように利用されているか、どのような 仕様かは、コードから読取ることは(なかなか)でき ない   –  例:以下はシステムに散らばった商品コードの例。これで は検索もできない   •  String  shohinCode   •  String  sc   •  String  shohinCd   –  例:ValidaYon(ex:  if(sc.equals("")){...})が様々なクラスに 分散(修正が複数カ所に及ぶ)   –  例:仕様書がないと、商品コードの仕様がわからない   •  検証処理は分散しているし、商品コードの変数名は不統一   (c)2012    Starlight&Storm   11
  • 12. フィールドをクラスにするメリット •  利用方法と仕様がひとめで分かる   –  商品コードクラスが、利用方法と仕様を表している   •  検索が楽   –  商品コードは常に商品コードの型   –  例:ShohinCode  sc;   •  修正は常に1カ所   –  商品コードの検証処理は商品コードがもつので、処理が分散しない   •  仕様書は不要(もしくは後述する自動生成用のExcelが仕様 書)   –  商品コードの仕様は、商品コードクラスがもっている   •  システムを再構築する場合も、フィールドクラスは再利用可 能(なものが多い) (c)2012    Starlight&Storm   12
  • 13. Javaの冗長性を排除 (c)2012    Starlight&Storm   13  
  • 14. 普通の(冗長な)Employeeクラス (c)2012    Starlight&Storm   14
  • 15. Employeeの冗長性排除 •  Java  言語の欠点は構文の冗長性   –  Seder-­‐Geder   ほぼ、Seder-­‐Geder だけなのに、やけ –  toString()   に長いEmployee –  equals()   –  ローカル変数の宣言   –  コンストラクタ   –  close()   –  try-­‐catch   –  Log   Spring等のフレームワーク –  ・・・ でカバーする範囲 (c)2012    Starlight&Storm   15
  • 16. 広 告 •  COMMING  SOON! (c)2012    Starlight&Storm   16  
  • 17. Lombokの利用法 •  @Dataアノテーション   –  Geder-­‐Sederが不要   –  toString()が不要   –  equals()が不要 (c)2012    Starlight&Storm   17
  • 18. Employeeと周辺クラス(Lombok適用) (c)2012    Starlight&Storm   18
  • 19. 自動生成を考える (c)2012    Starlight&Storm   19  
  • 20. DDDのパターンを利用する •  FactoriesやRepositoriesパターンを利用して、 フィールド・クラスをもった、ドメイン・クラスを 作成する Factory Repository (c)2012    Starlight&Storm   20  
  • 21. 自動生成への道 •  DDDの実施後、ユーザがクラスの設計をおこ ない、設計からクラスを自動生成する   •  フィールドクラスやLombokを利用すれば、 コード生成はより簡単に可能   変 換 (c)2012    Starlight&Storm   21
  • 22. 自動生成と開発(例) 入力 自動生成 ユーザ ・補完 Test   Java   ・テスト Code Doc ・アーカイブ化 ・提供...etc 開発 jarとして提供 × ソースコードは直接 修正できない Eclipse (c)2012    Starlight&Storm   22
  • 23. 広 告 •  Java  Small-­‐Object  Programming   – 研修   – システムへの導入   – 自動生成ツールの作成 info@starlight-storm.com (c)2012    Starlight&Storm   23  
  • 24. http://www.starlight-storm.com/ info@starlight-storm.com (c)2012    Starlight&Storm   24  
  • 25. 付録:インスタンス生成時間の検証 •  S-­‐OP  vs  OP  :  MyBaYs2,  HSQLDB  MEMORY   クラスのプロパティ数*クラスのインスタンス数