タグ

ブックマーク / smkw.hatenablog.com (6)

  • Railsのモデルの更新系メソッドをどう書くか - tsimoのメモ

    Railsでアプリを作っていて、モデルの更新系メソッドをどう定義するのが良いのだろうかと試行錯誤していたのだが、もうこれでいいんじゃないかな、というパターンが固まってきたのでメモっておく。 処理とエラーチェックの分離 メソッド定義内ではエラーチェックをせず、すべてがうまくいっているかのようなコードを書く。 状態を変更して保存し、自分自身を返す、というのがパターン。 エラーチェックはもっぱらバリデーションでおこなう。 定義したメソッドの実行時に必要なチェックが全て実行されるようにバリデーションを定義する。 # メインの処理 def do_something self.status = 'new_status' save self end # do_something実行時に実行されるようバリデーションの条件を指定する validate :can_be_new_status, if: 'sta

    Railsのモデルの更新系メソッドをどう書くか - tsimoのメモ
  • Rubyのコードを書く際のルール - tsimoのメモ

    引き続きコード改善系の記事 http://robots.thoughtbot.com/post/50655960596/sandi-metz-rules-for-developers クラスは100行まで メソッドの中身は5行以内 メソッドのパラメータは4つまで コントローラがインスタンス化するオブジェクトは1つだけ 4つ目のルールは、ウェブのダッシュボードページのようにいろんな要素が組み合わさる画面を出力する場合に従いづらいが、そういうときはファサードとなるクラスを間に入れて、その中で必要なオブジェクトを作ったりしてるらしい。 1つ前の記事におけるビューオブジェクトとかになるんですかね。 要するに、クラスは小さく、メソッドも小さく、個々のクラス、メソッドの役割を明確にってことですかね。 それはそれで「クラスの数多すぎ問題」とか言い出す人が出てきそうな気もするけど。

    Rubyのコードを書く際のルール - tsimoのメモ
  • 膨れ上がったモデルから機能を分離する切り口 - tsimoのメモ

    Railsのモデルにちょびちょびと処理を追加していると、いつの間にかサイズが膨れ上がってしまっていたりする。 Railsでロジックを書く場所として与えられている場所はコントローラかモデルなので、「コントローラは単純にしなさい」という教えに従うと、必然的に多くの処理はモデルに書くことになってしまい、モデルが膨れ上がる結果に陥りやすい。 それを解消するために、モデルから切り出せるものは切り出しましょう、ということで、下記の記事に、膨れ上がったモデルから機能を別の独立したクラスに切り出すための7つの切り口が提示されていた。 http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ 以下はそのメモ。 バリューオブジェクト 上の記事では例として、costという数値フィールドをRat

    膨れ上がったモデルから機能を分離する切り口 - tsimoのメモ
  • Applicative Programming - tsimoのメモ

    Functional JavaScriptというを読んでると、Applicative Programmingという言葉が出てきた。 定義の文章を読んでも何を指している言葉なのかよくわからなかったが、 _.map _.reduce _.filter などのunderscore.jsの関数ように、引数に関数を与え、内部でその関数を利用するという関数の組み合わせ方で処理を構築する方法を指すようだ。 オブジェクト指向な視点で言えばストラテジーパターンに相当するんですかね。 わざわざ名前をつけるほどのことなのかとも思ったが、C/C++ぐらいしかしらない状態で、RubyだかLispだかOCamlあたりではじめてmap関数的なものを知ったときには便利だと思った記憶がある。 Functional Javascript: Introducing Functional Programming With Un

    Applicative Programming - tsimoのメモ
  • BOSE QuietComfort20i をいまさらながら購入した - tsimoのメモ

    ヨドバシをぶらついていてたまたま手にとって試したこれのノイズキャンセリングの効果がなかなかインパクトがあったので、頻度が増えた電車利用時間を有効活用するのに役立ちそうだと思い、購入した。 【国内正規流通品】BOSE QuietComfort20i ノイズキャンセリング・ヘッドホン(インイヤータイプ) 出版社/メーカー: BOSEメディア: エレクトロニクスこの商品を含むブログ (10件) を見る 先月にノイズキャンセリング機能付きヘッドホンの最新型が出てたみたいで、それにも惹かれたが、電車でヘッドホンをするのも気恥ずかしいし、夏場は暑いだろうし、ということでこちらにした。 雑に扱ってると、ケーブルの端末側あたりがすぐにだめになりそうな気がしてちょっと不安ではある。

    BOSE QuietComfort20i をいまさらながら購入した - tsimoのメモ
    suginoy
    suginoy 2015/09/09
  • Railsでモデルデータのクラスをサブクラスに変更する - tsimoのメモ

    Single Table Inheritanceで親子関係にある二つのクラスHoge, Fugaがあるとする。 class Hoge < ActiveRecord::Base end class Fuga < Hoge end このときHogeクラスのオブジェクトaがあったとしてそれをFugaクラスに変換したいとする。 そもそもそういう状況がオブジェクト指向的にどうなのかというのは置いておく。 このとき、 a = Hoge.find(1) b = a.becomes(Fuga) b.save! とすればいいのかと思って試してみるも、ロードしなおしたオブジェクトはHogeクラスのままだった。 オブジェクトを保存するときのクエリーを見ると次のようになっていた。 UPDATE `hoges` SET `type` = 'Fuga', `updated_at` = '2013-04-08 14:0

    Railsでモデルデータのクラスをサブクラスに変更する - tsimoのメモ
    suginoy
    suginoy 2014/01/28
    “becomesというメソッドの存在を知って、これを使えばクラスの変換もナチュラルな感じに書けるのかと期待したけど、結局typeカラムを修正するという、STIの実装に依存した書き方になった。 ”
  • 1