タグ

ブックマーク / higayasuo.hatenablog.com (9)

  • いまさらきけない「ドメインモデル」と「トランザクションスクリプト」 - ひがやすを技術ブログ

    このネタは、私自身も何度も書いてきたけど、結局意味のある結論になったためしがありませんが、再度考え直してみたいと思います。 「ドメインモデル」と「トランザクションスクリプト」をすごく簡単に説明すると、トランザクションスクリプトとは「アクションより起動される一連の手続き」、ドメインモデルとは「ドメイン内の名詞によって体系化されたモデル」です。 トランザクションスクリプト派は、「トランザクションスクリプトの方が書くのが簡単だし、業務アプリケーションにオブジェクト指向は、ほとんど必要ない」といいます。 それに対し、ドメインモデル派は、「ドメインモデルはオブジェクト指向を生かすことができるのでメンテナンス性が良い」と主張します。 ずっと平行線のままですね。 私は一番最初に「ユースケースと一対一にサービスクラスを設け、ビジネスロジックはサービスクラスに記述する」という主張をしてました。 記念すべき(

    いまさらきけない「ドメインモデル」と「トランザクションスクリプト」 - ひがやすを技術ブログ
  • AppEngine/Jのspin-upを劇的に改善する方法 - ひがやすを技術ブログ

    AppEngineは、アクセスがあったときにアプリケーションを起動し、しばらくアクセスが無ければアプリケーションを終了させ、また次のリクエストで再起動するという仕組みを導入しています。 そのため、アプリケーションを起動(spin-up)する時間がとても重要になってきます。このspin-upの時間はpython(webapp)で60cpu_ms以下。(cpu_msはcpuが使う仮想的な時間ですがmsと同じ感じで捉えてもらってもとりあえずは大丈夫です)JavaのServletだと600cpu_msくらいです。PythonでもDjangoような大きなフレームワークだと1000cpu_msくらい(アプリによる)かかりますが、許容範囲内。JavaだとSlim3で1300cpu_ms、Springだと早くて7000cpu_msという感じで、Slim3がギリギリ許容範囲内でしょうか。ほんとうは、1000

    AppEngine/Jのspin-upを劇的に改善する方法 - ひがやすを技術ブログ
  • App Engineではどの言語を使えばいいのか - ひがやすを技術ブログ

    App Engineで使える言語は基的にはPythonJavaです。それでは、どちらを選ぶのが良いのでしょうか。 それ以外の言語の人向けの話は後から出てくるのでしばらくこのままお読みください。 趣味ならば単に好きなものを選ぶだけでいいのですが、仕事で使うためには、長所と短所をきちんと把握した上で選ぶ必要があります。また、ここでの話は言語としての一般的な話ではなくApp Engineで使うとき限定の話としてお読みください。 まず安定度ですが、インフラ部分の安定度は、どちらも基的に同じです。もしかすると、まったく同じものを使っているのかもしれません。 その上で動くAPIの部分は、インフラと直接結びついている低レベルな部分と低レベルなAPIの上に構築された高レベルな部分とに分けて考える必要があります。 低レベルなAPIはLLAPIと呼ばれたりしますが、安定度は、PythonJavaも同じ

    App Engineではどの言語を使えばいいのか - ひがやすを技術ブログ
  • JDOのモデルの状態を理解しよう - ひがやすを技術ブログ

    GAEのJDOのモデルは、ざっくりいうと4種類の状態があります(当はもっといっぱいあるけど、4つをおさえておけば普通はOK)。 transient persistent detached hollow モデルをnewして、PersistenceManager#makePersistent()を呼ぶまでは、transientです。 PersistenceManager#makePersistent()がよばれるとpersistentな状態です。persistentなモデルの状態は、PersistenceManagerをcloseするかTransactionをcommitしたときに、データストアに反映されます。 PersistenceManagerをcloseしたときからが、運命の分かれ目。何の設定もしないとhollowになり、lazy loadingされているオブジェクトに触ろうとするとエ

    JDOのモデルの状態を理解しよう - ひがやすを技術ブログ
  • 「Seasarの問題点など」にそろそろ一言いっておくか - ひがやすを技術ブログ

    2009-01-29 最初に言っておくと、結構いい指摘だと思います。せっかくなので、私のほうでも答えましょう。 だから、メンテナンスの不安の問題は、メンテナンスが行われてないということではなくて、メンテナンスが行われているのにメッセージとして発信されていないということだと思う。 ひがさんは上にあげた以外にもちょこちょことSeasar2のメンテナンスは続けられるということをブログに書いているのだけど、やはりブログという刹那的な形態ではなく、公式サイトに常設されたメッセージとしてメンテナンスをやっていくよということを書いていないといけないと思う。 これは、おっしゃるとおり。ただ、こういう政治的なメッセージは、理事会のほうから出したほうがいいと思います。そういう流れで、打ち合わせも進んでいたはず。 私は、プロダクトを作ることに専念するために、理事を辞めたので、プロダクトを作ることに専念したい。そ

    「Seasarの問題点など」にそろそろ一言いっておくか - ひがやすを技術ブログ
  • JSPからアクションのViewHelperメソッドを呼び出す - ひがやすを技術ブログ

    JSP2.1からは、Unified ELが搭載され、そのELResolverをいじることでいろいろ面白いことができます。 Slim3 Strutsでは、独自のELResolverを追加して、JSPからアクションのメソッドを呼び出せるようにします。使い方はこんな感じ。最初はアクション。convertというメソッドを定義します。 public class HogeAction { ... public String convert(boolean xxxFlag) { return xxxFlag ? "まる" : "ばつ"; } } JSPからは、${メソッド名[引数1][引数2][...]}で呼び出せるので、次のような感じになります。 ${convert[xxxFlag]} これまでは、表示用のロジックは、タグかファンクションに書いていました。正直めんどくさい。アクションのメソッドで表示用

    JSPからアクションのViewHelperメソッドを呼び出す - ひがやすを技術ブログ
  • オンデマンドデプロイのすすめ - ひがやすを blog

    JavaでAnnotationがついたクラスがあったら、それに対して処理したい場合は、Seasar2のコンポーネント自動登録で使っているように、ファイルシステムまたは Jar ファイルを全走査してクラスロードする方法もあります。 ファイルシステムまたは Jar ファイルを全走査してクラスロードしてください。が結論です。 Seasar だったら、 org.seasar.framework.util.ClassTraversal を読むべし。 でも、これは、Seasar2.3時代(3年前)の話で、技術としてはちょっと古い。 HOT deployなどと組み合わせると、リクエストのたびに全コンポーネントをデプロイする必要があるので、コンポーネントの数が増えると実用的には使えないのです。 そこで、考え出したのが、Seasar2のONDEMAND deploy。コンポーネントの定義を見に行って、あれば

    オンデマンドデプロイのすすめ - ひがやすを blog
  • Javaのコネクションプーリングの仕組み - ひがやすを技術ブログ

    Javaのコネクションプーリングがどのような仕組みになっているのか、知らない人は結構多いんじゃないかと思います。 Slim3のコネクションプーリングの実装を見ると、この辺が理解できるようになります。トランザクションとコネクションプーリングがどのように連携しているかを把握することは重要です。 http://svn.slim3.org/browse/trunk/slim3/slim3-datasource/src/main/java/org/slim3/datasource/ 登場人物は、4人しかいないから簡単ですね。 最初に見て欲しいのは、ConnectionWrapper。DataSource.getConnection()したときに戻されるコネクションの実態です。このコネクションを論理的なコネクションと呼ぶようにします。 主な役割は、コネクションがクローズされたときに、コネクションをプー

    Javaのコネクションプーリングの仕組み - ひがやすを技術ブログ
  • 任意の入力項目の繰り返し - ひがやすを技術ブログ

    DataGridやListのCellに複数の入力系コンポーネントを貼り付けたくなることがあるでしょう。しかし、これは、うまくいきません。List系コンポーネントは、CellRendererでタブを扱えないからです。 Macromediaに聞いたら仕様だそうです。まぁ、そういってくると思ってました。Flashもそうですから。 Repeaterを使うと、きちんとタブの制御も出来るのですが、コンポーネントの数が増えると遅くなります。環境にもよりますが、20件を越えるとちょっと耐えられなくなってきます。 Flexで親のコンポーネントに子供のコンポーネントを追加するには、createClassObject()を使います。createClassObject()は内部でattachMovie()を呼んでます。 このメソッドを使ってシンプルなRepeaterを自分で作ってみました。すると、繰り返す部分は確

    任意の入力項目の繰り返し - ひがやすを技術ブログ
  • 1