# 11ex. J2EE Chronicle ________________________________________ ## 1. Architectural Chronology ________________________________________ ※ これらの記事や本は、趣味の範疇に入るので読まなくてもよい。 Applications Programming in Smalltalk-80(TM):How to use Model-View-Controller (MVC) https://web.archive.org/web/20120729161926/http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html A cookbook for using the model-view-controller user interface paradigm in smalltalk-80 https://www.ics.uci.edu/~redmiles/ics227-SQ04/papers/KrasnerPope88.pdf An Introduction to Software Architecture http://www.cs.cmu.edu/afs/cs/project/able/ftp/intro_softarch/intro_softarch.pdf Software Architecture: Perspectives on an Emerging Discipline https://www.amazon.co.jp/Software-Architecture-Perspectives-Emerging-Discipline/dp/0131829572 LAMP History | MARPIS Programming - Software Development Company https://www.marpis.net/lamp-history.php 連載記事 「J2EEの基礎」 https://www.atmarkit.co.jp/fjava/index/index_j2ee.html Core J2Ee Patterns: Best Practices and Design Strategies https://www.amazon.co.jp/Core-J2EE-Patterns-Strategies-Enterprise/dp/0130648841/ 7 Patterns to Refactor Fat ActiveRecord Models - Code Climate https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/ Software Design 2014年4月号 https://gihyo.jp/magazine/SD/archive/2014/201404 Chronology ```text 1972 OOP & factory : - 1979 Smalltalk-80 mvc : Model(logic), view, controller 1983 Crud : - 1986 Design by Contract : - 1988 OOSC : Object-Oriented Software Construction 1990 C++2.0 ARM : - 1991 Visual Basic1.0 : - 1992 Windows3.1 : - 1992 3-tier : Open Environment Corporation 1993 CGI : - 1994 Gof : - 1996 architecture : architectureの体系化の始まり 1996 POSA : Pattern Oriented Software Architecture 1996 Java1.0 : 最低限の標準ライブラリ、アプレット、AWT、JDBC(拡張扱い) 1997 Java1.1 : JavaBeans、Java RMI、Java Servlet&DTD 1998 LAMP : - 1998 Visual Basic6.0 : - 1998 Java1.2/J2EE : Swing、EJB、JSP 0.92(1.0は1999)、JSP Model1 arch. JSP Model2 arch. 2000 php4.0 : - 2000 Struts : - 2001 Core J2EEパターン : - 2002 AAfN : Presentation, business, data 2002 PofEAA : - 2003 Core J2EEパターンv2: - 2003 DDD : Entity & aggregate & value, service, repository, factory. 2004 DI : Dependency injection. Constructor/Setter injection. 2004 Rails : Model(active record), view, controller 2005 Django : Middleware pattern 2005 Rails 1.0 : - 2006 Java5/Java EE : リネーム 2006 CakePHP 1.0 : - 2007 Symfony 1.0 : - 2008 Django 1.0 : - 2008 AAG & 4-layer : 3-layer + service layer. e.g. 2010 Slim 1.0 : - 2011 CakePHP 2.0 : - 2012 Web記事 : 7 Patterns to Refactor Fat ActiveRecord Models 2013 iDDD : - ``` 歴史からわかること ```text ・OOPの常識は、勘違いされ実装された経緯がある(C++ private継承) ・原始PHPスタイルやJSP onlyスタイルは、JSP Model1 arch.と呼ばれる ・DIコンテナの常識は、失敗から整理された(EJB) ・MVCはJSP Model2 arch.以降、勘違いも含めて一般化していった ``` MVCとWeb MVCの要約 ```text ・昨今WebでMVCと言われているもの(Web MVC)は、MVCとは別だ ・Web MVCの考え方自体は優れた分担だ ・DBのDTOをModelだと勘違いする誤解は、Rails以降なくなることはない ``` J2EEの歴史的背景 ```text - J2EEは、CGIより高速な処理を求めた - マルチスレッドプログラムである。Servletインスタンスは常駐し、各リクエストごとに別スレッドとして実行される - Servletのメンバ変数は基本的に使用禁止である - JSPの<%! %>も同様である。これはメンバ変数になる - EJBは、CORBAやRMIの後継として設計されたため、RMI的な機能やサーバ間トランザクション制御の仕様が盛り込まれている - RMIを実装する場合、Remoteインターフェース、Homeインターフェース、EJBクラスをセットで実装する - Entity BeanはRMIや2相コミットを抽象化しつつORM的な要素も混ぜ込んだ巨大仕様になっている - statefull Session Bean。HttpSessionとほぼ同等の機能を提供するがそれではない。同一セッションでインスタンスが残る - stateless Session Bean。純粋なワンタイムインスタンス - bean managed persistence Entity Bean。独自のコードでRDBへ永続化する - container managed persistence Entity Bean。EJBコンテナが自動で永続化する ```