2009-09-01から1ヶ月間の記事一覧
昨日のblog1.mammb.comに続き、本日は、Lift の公式ページにある Getting Started を参考に・・ プロジェクトの作成 今回作成するプロジェクトはtodo管理アプリケーションとなります。前回と同様に Maven によりプロジェクトを作成します。 mvn archetype:ge…
Liftとは Scalaで書かれたWebアプリケーションフレームワークです。現存の Seaside, Rails, Django, TurboGears, Wicket などのいいとこ取りのフレームワークとされています。 ここでは、http://wiki.liftweb.net/index.php/HowTo_start_a_new_liftwebapp に…
Dozerとは Dozer は Java Bean 間のマッパーライブラリです。あるオブジェクトから他のオブジェクトに、再帰的に値のコピーを行います。Dozer は、単純なプロパティマッピングから、複雑なタイプマッピング、単方向・双方向マッピング、暗黙的・明示的マッピ…
共通閉鎖原則とは パッケージ内のクラスは、同種の変更理由に対して共に閉じていなければならない。パッケージに影響を及ぼす変更は、パッケージ内の全てのクラスに影響を及ぼすことと同意である。 The classes in a package should be closed together agai…
再利用開放等価原則とは リリースの単位が再利用の最小単位である。バージョン管理のトラッキングシステムを通してリリースされるコンポーネントだけが効果的に再利用することができる。この最少単位はパッケージである。 The granule of reuse is the granu…
インターフェース分離原則とは クライアントは自分が使わないメソッドに依存することを強制されない Clients should not be forced to depend upon interfaces that they do not use. Many client specific interfaces are better than one general purpose …
依存関係逆転原則とは A.上位モジュールは下位モジュールに依存してはならない。両者は抽象に依存すべきである B.抽象は詳細(抽象の実装クラス)に依存してはならない。詳細は抽象に依存すべきである A. High level modules should not depend upon low lev…
Noop とは Google の技術者である Alex氏と Christian氏が中心となり開発されている新しい言語です。プロジェクトは Google code でホストされています。 http://code.google.com/p/noop/開発がアナウンスされた直後にも関わらず結構話題になっているのは、…
リスコフの置換原則とは 基本クラスへのポインタや参照を使用する関数やオブジェクトは、派生クラスの種類や振る舞いが何であろうと、派生クラスについて全く何も知らなくてもそれを使えるようになっていなければならない Functions that use pointers or re…
開放閉鎖原則とは ソフトウェアの実体は、拡張に対して開いていなければならず、しかし一方で、変更に対しては閉じていなければならない。 Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modificati…
責務単一原則とは クラスを変更する理由は一つ以上存在してはならない There should never be more than one reason for a class to change. 内容 クラスを変更する理由が二つ以上になるということは、そのクラスが複数の役割(責務)を担っているということ…
オブジェクト指向設計原則(Principles Of Object Oriented Design)は、Robert Cecil Martin, Bertrand Meyer, Barbara Liskovを含む様々な人達により提唱された内容を Robert Cecil Martin が纏めたもの。オブジェクト指向を用いて設計を行う際に有用となる…
blog1.mammb.comでは、SpringSource Tool SuiteへRooプロジェクトをインポートしました。 今回は、Getting Started with Spring Roo その2 - A Memorandumでエラーが出ていたため、とりあえず削除して対応していた内容を修正してみます。SpringSource Tool S…
blog1.mammb.comまでは、コンソールベースでRooを操作していましたが、IDEからも扱えます。今回は、無償になったSpringSource Tool Suiteを導入します。 SpringSource Tool Suite のインストール Eclipseベースのアプリケーション開発環境で以下からダウンロ…
blog1.mammb.comでは Spring Roo を使って単純なアプリケーションを作成しました。ここでは Spring Roo による Selenium テストについて見ていきます。前回の状態より、以下のコマンドで RsvpController の Seleniumテストを作成します。 roo> new selenium …
先日は、Spring Rooで作成したプロジェクトのテストまでを実行してみましたblog1.mammb.comこれだけでは何が行われているのかわからないので詳細を見ていきましょう。 tomcatで確認 Mavenからtomcatを起動して動作確認してみます。 $ mvn tomcat:run ブラウ…
Spring Rooとは Spring Roo は、Javaによる Springアプリケーション開発を効率化するコード生成ツールです。現在のバージョンは1.0.0.RC1となっています。まぁ、Java版のRailsみたいな感じですが、ラウンドトリップが行えます。簡単なコマンドでMavenのpom.x…
blog1.mammb.comの続きの小ネタです Simple Factory パターンとは Abstract Factory の簡易版で、状況によってクラスを切り替えたい場合に利用する。よくAbstract Factoryと勘違いして使用されていることがある。 Clientコード executeでファクトリから何が…
winstone とは 軽量サーブレットコンテナで、jarファイルのサイズ自体も非常に小さいです。開発時のJettyの代替として利用できるかと思います。Tiny Java Web Server なども候補に挙がりましたが、ちょっと使いまわしにくいところがあり、今回はwinstoneを紹…
以下のようなnullを返却するメソッドは使用するべきではない private final List<Cheese> cheesesInStock = ・・・; public Cheese[] getCheese() { if (cheesesInSock.size == 0) return null; ・・・ } 上記は、呼び出し側でのnullチェックが必要になり、パフォー</cheese>…
概念モデルとは 問題領域の概念の集合 静的な構造図で表される 概念モデルは、「概念」「概念間の関連」「概念の属性」を表現する 概念とは、「物」「考え」「対象」である ソフトウェア設計のモデルではない 概念の抽出方法 ユースケース等から名詞や名詞句…
Scalaのオブジェクトとクラスではapplyという名前のメソッドは、メソッド名なしで呼び出される特殊なメソッドであ〜る。 package ApplyDemo object Foo { def apply(n:Int) = printf("FooObject({0})\n", n) } class Foo { def apply(n:Int) = printf("FooCl…
遅延評価 必要になったときに評価 値の代入などに使用 相互参照で解決できないときも使用 例 okButtonが使用されるまでインスタンス化されない lazy val okButton = new JButton("Ok")
以下の表記にてミューテータが定義できる。 def _=() 実装例 package AbsoluteNumberDemo class AbsoluteNumber(num:Int) { private var _value = Math.abs(num) def value = _value // "getter" method def value_=(num:Int) = _value = Math.abs(num) // "…
blog1.mammb.com に引き続き、EbeanでManyToOneのリレーションを定義してみます。といってもただのJPAですが・ Customerに、Address を属性として持たせ、ManyToOneでアノテート import javax.persistence.CascadeType; import javax.persistence.Entity; im…
Scalaではオブジェクトのコンストラクタをクラス定義自身として記述できる class ImmutableFoo(val value:Int) class MutableFoo(var value:Int) object Main extends Application { val immutable = new ImmutableFoo(54) val mutable = new MutableFoo(32)…
Java 1.5 から導入されたenumにより安全なSingletonが作成可能。元ネタはEffective Javaだっけか? 実装はこんな感じ。 import java.util.concurrent.atomic.AtomicLong; public enum Singleton { INSTANCE; private AtomicLong counter = new AtomicLong();…
Ebeanとは Ebean はシンプルなORMフレームワークです。マッピングにはJPAアノテーションが使えます。本家は以下 http://www.avaje.org/ 簡単なサンプル クラスパスに以下のライブラリを追加 ebean-2.0.2.jar javax.persistence.jar h2.jar 設定ファイル Ebea…
Scalaでは型にエイリアスを使用して扱うことができます。 package TypeAliasDemo object Main extends Application { type ArrayOfIntArrays = Array[Array[Int]] var arrs : ArrayOfIntArrays = Array(Array(1,2,3), Array(4,5,6), Array(7,8,9)) printf("a…
GRASPパターン(General Responsibility Assignment Software Patterns)は、オブジェクトへの責務割り当てに関する基本原則をパターンの形式で記述したもの パターン 説明 Expertパターン 必要な情報を保持しているクラスに責務を割り当てる Creatorパターン …