タグ

設計に関するmoroのブックマーク (22)

  • さよならアーキテクチャ議論|Seiji Takahashi@ベースマキナ

    ポエム。 つまり?予算やチームのリテラシーに合わせて最速で作れて、チーム内で「俺ら高凝集低結合だなー」と思えるなら、アーキテクチャはなんでもいいと思えてきました。 前提・まだ割と収益が安定してないプロジェクトでの話です。お金があるなら好きにやりましょう。Go Bold。 ・DDDやクリーンアーキテクチャがダメとは言ってないです。むしろ自分は直近そこまで厳格ではないクリーンアーキテクチャでAPI書いてます。 ・以前こういうポスト書くくらいにはアーキテクチャのこと試行錯誤してました。 アーキテクチャ導入議論への疲労以前僕は、DDDやクリーンアーキテクチャを導入するという話が出ると積極的に顔を出すようにしていました。でも、最近は「導入しましょう」「既に適用してあるのでキャッチアップしてください」などの議論をするのに少し疲れてしまい、足が重くなったように感じます。もうおじいちゃんなので体力がないん

    さよならアーキテクチャ議論|Seiji Takahashi@ベースマキナ
    moro
    moro 2020/06/29
    筆者の言いたいこととズレてる自覚はありつつわかる。 / DDDを採用してレイヤー分割するのに抵抗ある人 = フラット派「ドメインというまとまりでコードを読む」と見えるのが面白いなと思いました。
  • 外部キー制約は何も考えずに適用するとよくない - かとじゅんの技術日誌

    このブログが話題になってますね。制約を付けること自体はよいことだけど、無目的に適用すると害も生じると思います。 無目的という言い方はおかしいな…。外部キー制約をどのように使えばいいのか、逆にどんなときに使うとまずいのかを考えてみたいと思います。 tech.tabechoku.com 例えば、これ。外部キー制約はできるだけ付けるとか、何も考えずに付けるとよくないと思います。 外部キー制約は、可能な限りつけるようにしています。 DBが別れている場合、外部キーはもちろん貼れないのですが、そうでない場合はとにかく何も考えず貼っています。データベース設計の際に気をつけていること - べチョク開発者ブログ テーブル設計をシミュレーションする いいたいことの結論はこれ。以上終了なのですが、もう少しわかりやすく書いてみよう。 何も考えずに外部キーを貼るのは良くないな。トランザクション境界の外で結果整合性

    外部キー制約は何も考えずに適用するとよくない - かとじゅんの技術日誌
    moro
    moro 2020/06/18
    昨日から何度か読み返してみたけど、やっぱり外部キー制約あったほうがいいじゃんね、という気持ちになる。もとの食べチョクさんの意見に賛成で、現在は迷ったらつけるでいいんじゃないですかね
  • 実況中継シリーズ 「開発現場で役立たせるための設計原則とパターン」 #builderscon 2018 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    先日慶應義塾大学日吉キャンパスで行われた builderscon2018、最高のカンファレンスでしたね。わたしも「開発現場で役立たせるための設計原則とパターン」というタイトルで発表させていただきました。今回は恒例「実況中継シリーズ」として、プレゼンの再現をブログで行いたいと思います。 なお、過去の実況中継シリーズは前職の技術ブログにまとまっていますので、そちらからご覧ください。 それでは編を開始したいと思います。 開発現場で役立たせるための設計原則とパターン アバンパート よろしくお願いします。 まず最初に簡単に自己紹介をさせていただきます。 先月転職をしまして、8/1からClassiという会社で働いています。と息子がおります。Scalaが好きですが、仕事ではRubyメインという感じです。 Web+DB PressやSoftware Designで何度か特集を書かせていただきました。と

    実況中継シリーズ 「開発現場で役立たせるための設計原則とパターン」 #builderscon 2018 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
    moro
    moro 2018/09/11
    良い話だった
  • どこに何を書くのか?

    13. type User struct { Attack int //攻撃力 } func main() { u := User{ Attack: 100, } //攻撃力は int の Attack に乱数を加算したものになる rand.Seed(time.Now().UnixNano()) u.Attack = u.Attack + rand.Intn(10) fmt.Println(u.Attack) } 14. type User struct { Attack int //攻撃力 } func main() { u := User{ Attack: 100, } //攻撃力は int の Attack に乱数を加算したものになる rand.Seed(time.Now().UnixNano()) u.Attack = u.Attack + rand.Intn(10) fmt.Pr

    どこに何を書くのか?
    moro
    moro 2017/07/31
    「そして、この実装を通じて以下であることがわかる」よい
  • スピード感のために品質を落とすということはチームの成長を諦めるということ - ネットの海の片隅で

    サービスを開発していると、スピードが重視される。 そのこと自体にはまったく問題はなくて正当なことだと思っている。 ユーザーに対して一刻も早く価値を届けるためには必要なことだ。 そもそも、自分がいる Web 界隈ではこの点について異論のあるサービス開発者はあまりいないんじゃないかと思っている。 ただ、それを達成するための方法になると途端に意見が分かれはじめて、人によって重視することが全然違ってくる。 ある人は「スピード感が大事」と言い、ある人は「ちゃんと作ったほうがトータルでは速い」と主張する。 しかし、こういうときに意識される品質と速度についてのトレードオフは、実際には完全なトレードオフではないと思っている。 技術力のある人はある程度急いで作ったとしても一定以上の品質のコードを書くし、意図的に品質を落としたとしても速度はあまり上がらない。 逆に、技術力が高くない人が時間をかけて作ったとして

    スピード感のために品質を落とすということはチームの成長を諦めるということ - ネットの海の片隅で
    moro
    moro 2017/06/01
    これもなー。 http://bufferings.hatenablog.com/entry/2017/05/31/232529 とあわせて読みたい感ある。
  • だんだん開発スピードが遅くなっていくのをどうやってとめたら良かったんだろう? - Mitsuyuki.Shiiba

    先日、モブプロをやってきた。その中で、モブプロとは別で、いくつか感じたことがあって、今日はその中のひとつを思い浮かんだままにメモ。 bufferings.hatenablog.com 要件を満たすプロダクトをより早く出す モブプロでTDDしながら、要件を満たすプロダクトをより早く出すことに集中してみた。例えば、第2ラウンドのお題はTDDBCなどでお馴染みの「自販機」。 「100円を入れてボタンを押すとコーラが1買えること」 最初に「100円を入れてボタンを押すとコーラが1買えること」と言われ。 assertThat(get(100), is("コーラ")); みたいなテストを書いて。 String get(int money) { return "コーラ"; } みたいな実装を書いた。爆速! 「200円を入れてボタンを押すとオレンジジュースが1買えること」 次に「200円を入れてボタ

    だんだん開発スピードが遅くなっていくのをどうやってとめたら良かったんだろう? - Mitsuyuki.Shiiba
    moro
    moro 2017/06/01
    わかるわー。そこでリファクタリングするための自動テストであったりするんだけど、まあ難しいですな。僕も「注意深く変化に対応し続ける」音楽性が好きです。
  • JJUG CCC 2017 Springで論理削除フラグをどうにかするための話をしてきました 【FOLIOスポンサー】 - itohiro73’s blog

    JJUG CCC 2017 Springで、「データ履歴管理のためのテンポラルデータモデルとReladomoの紹介」という話をしてきました。 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 from Hiroshi Ito 今回の登壇は、株式会社FOLIOのスポンサーセッションです!FOLIOについてはこちらの入社エントリー記事もご参考ください。Toggetterは下のリンクから。 togetter.com 世の中のみなさんが「論理削除フラグ」を使いたくなるモチベーションとしては、実は「削除」ではなく別のビジネスロジックを実装したいだけであることがほとんどだと思います。 たとえば論理削除フラグという名の死亡フラグ - @ledsun blogというエントリを参考にさせていただくと、下記のような要件の例があります。 ・社員が退職(・転

    JJUG CCC 2017 Springで論理削除フラグをどうにかするための話をしてきました 【FOLIOスポンサー】 - itohiro73’s blog
    moro
    moro 2017/05/22
  • コード内で「現時刻」を気軽に取得してはいけない | Nekoya press

    日付を扱う処理についていろいろまとめたついでに、わりと簡単なことだけど知らないと落とし穴にハマる系のネタを。 日頃いろいろな処理を書いていて、現時刻を扱うこともは少なくないはずです。ですが、これを適当にやっていると困ることが多々あります。 実行中に「現時刻」を元にした処理がい違う 例えばこんなコード。ログ集計とかやってるイメージです。 class Analyzer(object): def analyze(self): logfile = datetime.datetime.now().strftime('my_log_file.%H') self.save(self.analyze_logfile(logfile)) def save(self, result): now = datetime.datetime.now() self.result[now.hour] = result

    moro
    moro 2015/06/23
    若者に見せようとして見つからなかったのでブクマ
  • 破れ紙の片割れのようなMixinができてしまうワケ - @kyanny's blog

    最近「Mixin は避けられれば避けたほうがよいのではないか」と思い始めている。扱いに困るダメ実装の Mixin を簡単に作れすぎてしまうからだ。 Wikipedia の定義によると、 mixin とはオブジェクト指向プログラミング言語において、サブクラスによって継承されることにより機能を提供し、単体で動作することを意図しないクラスである。 とのことなので、そもそも Mixin される側の実装と結びつきが強くなるのは仕方ないのだろう。しかし、まれにだが破れ紙の片割れのような実装を持つ Mixin ができてしまうことがある。 一枚の紙を適当に手で破って二枚にする。断面はギザギザだが、破った二枚の紙の断面はぴったり一致する。もともと繋がっていたものを切り離したのだから当然だ。だが破れ紙の断面にぴったり合うような別の紙を用意するのは簡単ではない。別の紙を合わせる必要があるのならば、紙を破るときに

    破れ紙の片割れのようなMixinができてしまうワケ - @kyanny's blog
    moro
    moro 2015/05/26
    継承よりも委譲がいいじょー。|| コピペは辛いと思います。完全コピペならまだいいんですが、コピペの上ちょっとだけ()変えた、みたいなのはほんとつらい。
  • 論理削除が云々について - mike-neckのブログ

    今日朝イチで見たエントリーがこれでした。 qiita.com 論理削除の弊害は色々なところで言われているけど、僕の足りない頭で理解している所によると、二つの値しか持たない削除フラグ的なものはカーディナリティが云々で検索条件につけても性能上的にもよくないし、意味がないということです。 論理削除を完全に悪だとは言いませんが、論理削除を極力排したい人たちは、基的にデータそのものを削除する、もしくは論理削除というのはまだ要件的に未確定な要素が隠されていることを示すフラグであると考えているようです。 僕がITの業界でキャリアをスタートしてから2年目くらいに配置されたプロジェクトではT字型ER手法というのをベースにしたテーブル設計をしていて、そこでかなり鍛えられたわけですが、その時にはだいたいこのような原則を叩きこまれました。 テーブルに状態を持たせない 究極には機械が認識するキーと、人間にとって意

    論理削除が云々について - mike-neckのブログ
    moro
    moro 2015/03/25
    状態をテーブルに持ちたくない気分に賛成しつつ、消し込み機能などで「次工程のイベントデータがないこと」を毎度引くのが辛くてstatusカラムをつけてしまう。なので状態はキャッシュ/物理設計として妥協します
  • Rundeck - cronから移行しやすいジョブスケジューラを使ってみよう

    こんにちは。斎藤です。 最近、Dockerなどのコンテナ型仮想化技術、Chef, Ansible, Itamae などによるITインフラ構築・運用自動化技術の利用が進んでいます。一方で、何年も動いて「歴史」を積み重ねているシステムも数多くあります。そして、私を含めてそれらの運用に関わる事もあるでしょう。そんな「歴史」のあるシステムも、何とか運用を効率化したいと思う事があるかもしれません。 今日は、バッチジョブや複数サーバに対する運用を効率化するRundeckを取り上げます。「何ができるの?」「はじめかた」そして「利用時の留意点」の3点についてお話しします。 ※OSはCentOS 6系、Rundeck はバージョン 2.4.0、Java VM は Oracle JDK 1.7.0_72 を利用しています。 cronLinux系OSに標準搭載されているジョブスケジューラです。標準で使えるため

    Rundeck - cronから移行しやすいジョブスケジューラを使ってみよう
    moro
    moro 2015/01/19
    ジョブネット案件だ
  • イミュータブルデータモデル(入門編)

    This document summarizes a microservices meetup hosted by @mosa_siru. Key points include: 1. @mosa_siru is an engineer at DeNA and CTO of Gunosy. 2. The meetup covered Gunosy's architecture with over 45 GitHub repositories, 30 stacks, 10 Go APIs, and 10 Python batch processes using AWS services like Kinesis, Lambda, SQS and API Gateway. 3. Challenges discussed were managing 30 microservices, ensur

    イミュータブルデータモデル(入門編)
    moro
    moro 2014/10/21
    すばらしい。参考資料も読むべし。| といいつつ、更新日を勝手にふるフレームワーク使ってます すみません。。。
  • 沖縄Ruby会議01に行ってきました。発表してきました。 #okrk01 - pixiv inside [archive]

    "古きよき時代から来ました、真面目なSE、真面目にSE" 広告系技術担当 @bash0C7です。最近はpixivの開発マネージャ業も担当しはじめました。 さて、3月1日に沖縄で開催された沖縄Ruby会議01というRubyのカンファレンスに参加と発表を行ってきました。 アドバイザーとして関わった&発表応募して採択されたという事で、会社からの出張というかたちで行ってきました。 沖縄Ruby会議01とは 沖縄Ruby会議01とは、沖縄ではじめての開催となる地域Ruby会議です。 地元沖縄はもとより、日各地からRubyistが集い、発表に耳を傾け、懇親会で盃を傾け、熱い議論と交流を繰り広げました。 http://togetter.com/li/636168 のツイートまとめを読むと雰囲気を感じられると思います。 また、後日「るびま」ことRubyist Magazineにて、レポートが公開される予

    沖縄Ruby会議01に行ってきました。発表してきました。 #okrk01 - pixiv inside [archive]
    moro
    moro 2014/03/20
    たいそう面白かった。「我が社も全面的にfluentdに刷新したくなりました!!」と伝えたら「まずは情報系から導入して、三カ年計画で基幹系をリプレイスしましょう」とか返されておっちゃんバッチリだった
  • L'eclat des jours(2013-10-25)

    _ WebMVCと設計パターン WebMVC(面倒なので以降はただのMVC。J2EEのMVCがSmalltalkのMVCと異なるMVCだということは既に10年以上の歴史があるのだから、今更どうでもよろしい)というのは、Transaction Script PatternとDomain Modelの間にまたがるスペクトラムだ。これがMVCの最大の特徴であり利点なのだが、なぜか、Transaction Script PatternとDomain Modelの両極端の声の大きい人が自分の視点を叫ぶ(実際に前者で声が大きい人はいない。彼らは沈黙のうちにコードを広める)。そこで混乱が生まれ、最悪のTransaction Script Pattern実装(貧血)と最悪のDomain Model実装(血 )が幅をきかせることになる。といっても、最悪のDomain Modelは普通は作れないのでそれほど

    L'eclat des jours(2013-10-25)
    moro
    moro 2013/10/25
    "リーダブルなトランザクションスクリプトパターンのほうが、アンリーダブルなドメインモデルより数1000倍良い。" それはまったくその通り(野生のコードでは、前者になかなか巡り会えないけど)
  • RESTful Web アプリの設計レビューの話

    2017/9/7 db tech showcase Tokyo 2017(JPOUG in 15 minutes)にて発表した内容です。 SQL大量発行に伴う処理遅延は、ミッションクリティカルシステムでありがちな性能問題のひとつです。 SQLをまとめて発行したり、処理の多重度を上げることができれば高速化可能です。ですが・・・ AP設計に起因する性能問題のため、開発工程の終盤においては対処が難しいことが多々あります。 そのような状況において、どのような改善手段があるのか、Oracleを例に解説します。

    RESTful Web アプリの設計レビューの話
  • Rails-resource-routing-design-bootstrap(ja)

    Sendagaya.rb#12での講演資料に口頭のまとめを追記したものです。

    Rails-resource-routing-design-bootstrap(ja)
    moro
    moro 2012/07/24
    ブクマ伸びろ!!
  • MOVEは望まれなかった子 - the sea of fertility

    なにやらMOVEが話題です。 MVC is dead, it’s time to MOVE on. http://cirw.in/blog/time-to-move-on [翻訳]MVCは死んだ。MOVEするときがきた きしだのはてな http://d.hatena.ne.jp/nowokay/20120704 Twitterで「”MOVEは生まれた瞬間死んだ” って記事まだー?」って騒いでたら「お前が書けよ」の流れだったので息抜きに書きます。息抜きなので図が無いのは勘弁してください。 MOVEが生まれていない理由 この文中ではMOVEが生まれた理由はMVCの問題点に関わるとされており、そのMVCの問題点としてされているのは次の2点です。 MVCではControllerが肥大化する MVCは10年古い技術で設計されていて、最新のプログラミングパラダイムに対応していない。 しかしこの理由のう

  • MVCは死んだ。MOVEするときがきた - きしだのHatena

    Conrad Irwinさんの「MVC is dead, it's time to MOVE on.」を訳してみました。 MVC is dead, it's time to MOVE on. この訳文も原文のライセンスを引き継いでCC-BY-3.0ライセンスで利用可能とします。 追記13:58 すでに訳してた方がいました。MVCの時代は終わった。MOVEを使い始めましょう。 - ふじこのプログラミング奮闘記 MVCは死んだ。MOVEするときがきた MVCはすばらしいアイデアだ。モデルを持ち、モデルは内部に少しの状態をもつ。ビューは内部に少しのUIをもつ。そして、コントローラは内部に少しの・・・ 何を持つ? 私は確かにこのことに気づいた最初の人物ではない。しかし示されたようなMVCの問題のために、あなたは最後には過剰なコードをコントローラに詰め込むことになる。なぜなら、他にどこに入れていいか

    MVCは死んだ。MOVEするときがきた - きしだのHatena
  • 例外設計における大罪 - 契約

    PHPカンファレンス2012 & WordCampTokyo2012 LT発表資料です。 タイトルの元ネタ: http://www.amazon.co.jp/dp/4094512624

    例外設計における大罪 - 契約
  • クラウドアーキテクチャパターン(via DoubleCloud.org) - 虎塚

    調べ物をしていて、Cloud Architecture Patternsなるものに辿り着きました。 次の記事が、パターンに関する概要です。 Cloud Architecture Patterns: Overview http://www.doublecloud.org/2010/10/cloud-architecture-patterns-overview/ 別記事で、10個のパターンが解説されています。 ブログ記事ではありますが、アレグザンダーの『パターン・ランゲージ』や、それにインスパイアされて書かれた(いわゆる)パターンの形式が、ほぼ踏襲されています。 Motivation: そのパターンを適用する前提や課題 Solution: Motivationに対する解決策 Applicability: パターンがどのように適用するか Consequence: パターンを活用した結果 Kno

    クラウドアーキテクチャパターン(via DoubleCloud.org) - 虎塚
    moro
    moro 2011/07/25