2009-09-01から1ヶ月間の記事一覧

Liftを用いたWebアプリケーションの作り方 その2

昨日のblog1.mammb.comに続き、本日は、Lift の公式ページにある Getting Started を参考に・・ プロジェクトの作成 今回作成するプロジェクトはtodo管理アプリケーションとなります。前回と同様に Maven によりプロジェクトを作成します。 mvn archetype:ge…

Liftを用いたWebアプリケーションの作り方 その1

Liftとは Scalaで書かれたWebアプリケーションフレームワークです。現存の Seaside, Rails, Django, TurboGears, Wicket などのいいとこ取りのフレームワークとされています。 ここでは、http://wiki.liftweb.net/index.php/HowTo_start_a_new_liftwebapp に…

Java Bean マッパーライブラリ Dozer

Dozerとは Dozer は Java Bean 間のマッパーライブラリです。あるオブジェクトから他のオブジェクトに、再帰的に値のコピーを行います。Dozer は、単純なプロパティマッピングから、複雑なタイプマッピング、単方向・双方向マッピング、暗黙的・明示的マッピ…

The Common Closure Principle (CCP) 共通閉鎖原則

共通閉鎖原則とは パッケージ内のクラスは、同種の変更理由に対して共に閉じていなければならない。パッケージに影響を及ぼす変更は、パッケージ内の全てのクラスに影響を及ぼすことと同意である。 The classes in a package should be closed together agai…

The Reuse/Release Equivalence Principle (REP) 再利用開放等価原則

再利用開放等価原則とは リリースの単位が再利用の最小単位である。バージョン管理のトラッキングシステムを通してリリースされるコンポーネントだけが効果的に再利用することができる。この最少単位はパッケージである。 The granule of reuse is the granu…

The Interface Segregation Principle (ISP) インターフェース分離原則

インターフェース分離原則とは クライアントは自分が使わないメソッドに依存することを強制されない Clients should not be forced to depend upon interfaces that they do not use. Many client specific interfaces are better than one general purpose …

The Dependency Inversion Principle (DIP) 依存関係逆転原則

依存関係逆転原則とは A.上位モジュールは下位モジュールに依存してはならない。両者は抽象に依存すべきである B.抽象は詳細(抽象の実装クラス)に依存してはならない。詳細は抽象に依存すべきである A. High level modules should not depend upon low lev…

Google発の新言語、Noopとは

etc

Noop とは Google の技術者である Alex氏と Christian氏が中心となり開発されている新しい言語です。プロジェクトは Google code でホストされています。 http://code.google.com/p/noop/開発がアナウンスされた直後にも関わらず結構話題になっているのは、…

The Liskov Substitution Principle (LSP) リスコフの置換原則

リスコフの置換原則とは 基本クラスへのポインタや参照を使用する関数やオブジェクトは、派生クラスの種類や振る舞いが何であろうと、派生クラスについて全く何も知らなくてもそれを使えるようになっていなければならない Functions that use pointers or re…

The Open-Closed Principle (OCP) 開放閉鎖原則

開放閉鎖原則とは ソフトウェアの実体は、拡張に対して開いていなければならず、しかし一方で、変更に対しては閉じていなければならない。 Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modificati…

The Single Responsibility Principle(SRP) 責務単一原則

責務単一原則とは クラスを変更する理由は一つ以上存在してはならない There should never be more than one reason for a class to change. 内容 クラスを変更する理由が二つ以上になるということは、そのクラスが複数の役割(責務)を担っているということ…

オブジェクト指向設計原則(Principles Of Object Oriented Design)

オブジェクト指向設計原則(Principles Of Object Oriented Design)は、Robert Cecil Martin, Bertrand Meyer, Barbara Liskovを含む様々な人達により提唱された内容を Robert Cecil Martin が纏めたもの。オブジェクト指向を用いて設計を行う際に有用となる…

Getting Started with Spring Roo その5

blog1.mammb.comでは、SpringSource Tool SuiteへRooプロジェクトをインポートしました。 今回は、Getting Started with Spring Roo その2 - A Memorandumでエラーが出ていたため、とりあえず削除して対応していた内容を修正してみます。SpringSource Tool S…

Getting Started with Spring Roo その4

blog1.mammb.comまでは、コンソールベースでRooを操作していましたが、IDEからも扱えます。今回は、無償になったSpringSource Tool Suiteを導入します。 SpringSource Tool Suite のインストール Eclipseベースのアプリケーション開発環境で以下からダウンロ…

Getting Started with Spring Roo その3

blog1.mammb.comでは Spring Roo を使って単純なアプリケーションを作成しました。ここでは Spring Roo による Selenium テストについて見ていきます。前回の状態より、以下のコマンドで RsvpController の Seleniumテストを作成します。 roo> new selenium …

Getting Started with Spring Roo その2

先日は、Spring Rooで作成したプロジェクトのテストまでを実行してみましたblog1.mammb.comこれだけでは何が行われているのかわからないので詳細を見ていきましょう。 tomcatで確認 Mavenからtomcatを起動して動作確認してみます。 $ mvn tomcat:run ブラウ…

Getting Started with Spring Roo その1

Spring Rooとは Spring Roo は、Javaによる Springアプリケーション開発を効率化するコード生成ツールです。現在のバージョンは1.0.0.RC1となっています。まぁ、Java版のRailsみたいな感じですが、ラウンドトリップが行えます。簡単なコマンドでMavenのpom.x…

Simple Factory パターン

blog1.mammb.comの続きの小ネタです Simple Factory パターンとは Abstract Factory の簡易版で、状況によってクラスを切り替えたい場合に利用する。よくAbstract Factoryと勘違いして使用されていることがある。 Clientコード executeでファクトリから何が…

軽量サーブレットコンテナ winstone を開発用にサクッと使う

winstone とは 軽量サーブレットコンテナで、jarファイルのサイズ自体も非常に小さいです。開発時のJettyの代替として利用できるかと思います。Tiny Java Web Server なども候補に挙がりましたが、ちょっと使いまわしにくいところがあり、今回はwinstoneを紹…

配列やコレクションを返すメソッドが、null を返すべき理由はない

以下のようなnullを返却するメソッドは使用するべきではない private final List<Cheese> cheesesInStock = ・・・; public Cheese[] getCheese() { if (cheesesInSock.size == 0) return null; ・・・ } 上記は、呼び出し側でのnullチェックが必要になり、パフォー</cheese>…

概念モデル

概念モデルとは 問題領域の概念の集合 静的な構造図で表される 概念モデルは、「概念」「概念間の関連」「概念の属性」を表現する 概念とは、「物」「考え」「対象」である ソフトウェア設計のモデルではない 概念の抽出方法 ユースケース等から名詞や名詞句…

apply メソッド!

Scalaのオブジェクトとクラスではapplyという名前のメソッドは、メソッド名なしで呼び出される特殊なメソッドであ〜る。 package ApplyDemo object Foo { def apply(n:Int) = printf("FooObject({0})\n", n) } class Foo { def apply(n:Int) = printf("FooCl…

Lazy Evaluation

遅延評価 必要になったときに評価 値の代入などに使用 相互参照で解決できないときも使用 例 okButtonが使用されるまでインスタンス化されない lazy val okButton = new JButton("Ok")

Scalaのアクセッサとミューテータによる仮想publicフィールドの作成

以下の表記にてミューテータが定義できる。 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) // "…

シンプルなORMフレームワーク Ebean ORM Persistence Layer を試す〜その2

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)…

enum によるより良い Singleton

Java 1.5 から導入されたenumにより安全なSingletonが作成可能。元ネタはEffective Javaだっけか? 実装はこんな感じ。 import java.util.concurrent.atomic.AtomicLong; public enum Singleton { INSTANCE; private AtomicLong counter = new AtomicLong();…

シンプルなORMフレームワーク Ebean ORM Persistence Layer を試す

Ebeanとは Ebean はシンプルなORMフレームワークです。マッピングにはJPAアノテーションが使えます。本家は以下 http://www.avaje.org/ 簡単なサンプル クラスパスに以下のライブラリを追加 ebean-2.0.2.jar javax.persistence.jar h2.jar 設定ファイル Ebea…

Scalaでの型エイリアス

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パターン

etc

GRASPパターン(General Responsibility Assignment Software Patterns)は、オブジェクトへの責務割り当てに関する基本原則をパターンの形式で記述したもの パターン 説明 Expertパターン 必要な情報を保持しているクラスに責務を割り当てる Creatorパターン …