タグ

設計に関するkimutanskのブックマーク (37)

  • ドメイン駆動設計基礎講座〜戦略編〜

    ChatWork社内勉強会で発表した際の資料

    ドメイン駆動設計基礎講座〜戦略編〜
    kimutansk
    kimutansk 2017/03/18
    多数他部署にドメインExが散在、自部署専用のユビキタス言語も必要で整備中という状況ですが、一端かみ砕いておかないとずれすぎるのでまた困る。このあたりチームで共有しますかね。
  • サービスクラスについては僕も悪かったと思っているけど、それでもCQSは実現したいんだ - Qiita

    このエントリは Ruby on Rails Advent Calendar 15 日目です。(遅くなってすいません) 同時に 14 日目のじょーかーさんのエントリへのアンサーエントリでもあります。 (まあ、じょーかーさんがこの Advent Calendar に登録したときに、タイトルから内容を推察してこれを書くことを決めましたが、実際のところ、あまりアンサーにもカウンターにもなってないし、全然関係ない内容と言えないこともないので、まあサービスクラスについては僕も推奨したことがあるし、僕も反省してるんですよ程度に読んでもらえると幸いです。) まずはじめにごめんなさい 3 年くらい前に僕は Rails にサービスクラスというものを導入するといいことがあるよと書いたのだけど、それからいくつもの Rails アプリケーションを見たり、実際に自分で開発したりして、うーんって思うことも増えてきたので

    サービスクラスについては僕も悪かったと思っているけど、それでもCQSは実現したいんだ - Qiita
    kimutansk
    kimutansk 2016/12/18
    このやってしまったの、似た構成で見覚えが・・・欲しいのはServiceクラスではなく、コマンドだったというのは思い返すとわかります。
  • 俺が悪かった。素直に間違いを認めるから、もうサービスクラスとか作るのは止めてくれ - Qiita

    ちなみに、最初に結論だけ言っておくと、まずSandi Metzの「オブジェクト指向設計実践ガイド」を読め、という話です それだけで終わってしまいたい気持ちはあるが、不親切過ぎるしもうちょっとRails向けの話を書こうと思う。 ただ言いたいことは、よく分かってないのに使うのは止めろということ。 自分もで書いたりした手前、それが参考にされた結果なのかもしれないが、世の中には当に酷いクラスが存在するもので、雑にサンプルで書くと以下の様な感じのコードが存在したりする。 class HogehogeService # Hogehogeはモデル名まんま def process(hogehoge, option_a: nil, option_b: nil, option_c: false) history = hogehoge.histories.last unless hogehoge.activ

    俺が悪かった。素直に間違いを認めるから、もうサービスクラスとか作るのは止めてくれ - Qiita
    kimutansk
    kimutansk 2016/12/17
    Javaだろうがこういうのの悪循環にはまり始めると死にますね・・・ ただ、こういうのに本当に必要なのはとある業務システム(大き目)の理想的な実装結果なのでしょうか。
  • テストなんか書かなくて良い 僕の考えるサービス開発の肝 - mosa_siru’s blog

    世の中は一周まわってエンジニアリングの手法に溢れている。 テストを書け、ドキュメントを書いて冗長化しろ、コミットはわかりやすく、コーディング規約が、安定性が─── でも、それって質なんだろうか? 新規サービスを作る際に肝だと思っていることをまとめてみた。 おことわり 以下は少人数で"普通"のアプリやWebサービスを自社で新規開発するときのことを想定しています。大人数で重厚なソシャゲを作るとか、ガチガチの金融系サービスを作るとか、コンシューマーゲーム開発とか、個人で好きなものを作るとか、受託とかは全く想定していません。 基的に一通り現場をこなした中級以上のエンジニア向けに書いています。 アンチテーゼとして、ややキツめに断定する箇所が多いです、こういう意見もあるんだな程度に受け止めてください。 所属する団体の意見とかは一切関係ありません。 目次 おことわり 目次 ユーザーのことだけ考える

    テストなんか書かなくて良い 僕の考えるサービス開発の肝 - mosa_siru’s blog
    kimutansk
    kimutansk 2016/03/07
    題名と中身がずれているような・・・中身は現実的な内容なのですが。ただ、意図的にどこまで崩して問題ないかはエンジニアの技量に依存するので、これはこれで難しい。
  • 続・Web系の自分が想像と障害で学んだバッチ処理・設計の基本 - コンポツさん

    バッチ処理というのがそれ単体で勉強するのが難しく勉強しようとすると何に手を付けるべきかさっぱりわからないということは、先日のブログで述べたとおり。 自分が経験の中で得てきた知見は正しいのかどうか、世間の人に見てもらいたかったというのが書いた動機。 そして、新たな視点や指摘をゲットしてより不測の事態を考慮できている最高なバッチを作りたいという目的があったわけだ。 で、いろいろな意見をもらったのだけどその中で特に辛いと感じたのはこれ。 基幹システムにおけるバッチ処理みたいなものに関する知見については、カジュアルに学ぶ方法はありません。それを体系化した知識として整理した上で、実装できる組織があるんなら、それでメシがえるんじゃないですかね。— 太一 (@ryushi) 2016, 2月 18 読んでいると 「俺達は障害でつらい思いをしてるし当然先人達も障害でつらい思いをしているはずだ。 なのに、

    続・Web系の自分が想像と障害で学んだバッチ処理・設計の基本 - コンポツさん
    kimutansk
    kimutansk 2016/02/20
    実行状況確認手段用意、異常時アラート、DryRun、復旧手順/冪等性確保、環境差分考慮、一時ディレクトリの扱い、リソース管理と依存制御、どれも重要ですね。
  • これって、ドメイン駆動設計?

    エリックのDDDを読んで30分で挫折した僕が考える、こーゆーことをやるのがドメイン駆動設計なるものなんじゃないの、という資料です。Read less

    これって、ドメイン駆動設計?
    kimutansk
    kimutansk 2015/06/12
    徐々に業務からモデルを追加していくとこうなると。現実の内容とマッピングされるのでわかりやすいですね。
  • Scala界隈でDDDが大いに盛り上がったのでログをまとめましたよ-その2 - Kuchitama Tech Note

    昨日に引き続き、ScalaJpのgitter.imで上がったDDDの話題の続きです。 scalajp/public - Gitter なんか、昨日の記事がはてブホットエントリしたみたいで、恐縮してます。 昨日あげた2/23の話題ででDDDに関する盛り上がりは収まったかにみえたのですが、翌日、導師かとじゅんさん(@j5ik2o)がみんなの疑問に一つ一つ応えて、我々を更にDDDの世界に導いてくださいました。 実践ドメイン駆動設計 (Object Oriented Selection) 作者: ヴァーン・ヴァーノン,高木正弘出版社/メーカー: 翔泳社発売日: 2015/03/17メディア: 大型この商品を含むブログ (1件) を見る 2月24日 j5ik2o 2015年2月24日 エヴァンスのDDDだと具体的なrepositoryの置き場所に言及されてないように見える ドメインモデルのライフ

    Scala界隈でDDDが大いに盛り上がったのでログをまとめましたよ-その2 - Kuchitama Tech Note
    kimutansk
    kimutansk 2015/03/13
    Daoはテーブルに対応、Repositoryはドメインモデルに対応し、JDBCやトランザクションに依存せず、モデルのコレクションのように見える、と。あとはRepoはドメイン層配置と。
  • Scala界隈でDDDが大いに盛り上がったのでログをまとめましたよ-その1 - Kuchitama Tech Note

    以前、ScalaJpのgitter.imでDDDについて議論が盛んに行われてたけど、いずれログが消えちゃうのがもったいなくて、ここに内容を貼付けます。 scalajp/public - Gitter 要約すると実践DDD出たらみんなで読もうぜ。ってことで。 実践ドメイン駆動設計 (Object Oriented Selection) 作者: ヴァーン・ヴァーノン,高木正弘出版社/メーカー: 翔泳社発売日: 2015/03/17メディア: 大型この商品を含むブログ (1件) を見る ホントは、自分のブログとかじゃなくてGistとかがいいんだろうけど、見た目を整えるのが一番楽なので、ここに掲載しておきます。 一応、最初にまとめるにいたった経緯↓ xuwei-k 2015年2月24日 gitter、無料だとログの保存期間2週間って話だったけど、実は現状全部残ってる https://gitte

    Scala界隈でDDDが大いに盛り上がったのでログをまとめましたよ-その1 - Kuchitama Tech Note
    kimutansk
    kimutansk 2015/03/06
    リポジトリがデータの出し入れ抽象化、インフラ層がドメインに依存しない手段としては個人的にはjdbctemplateっぽい形が秀逸だとは思いますが、その認識はあってるんですかねぇ・・
  • 集約、エンティティ、バリューオブジェクト

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    集約、エンティティ、バリューオブジェクト
    kimutansk
    kimutansk 2015/02/23
    Entity=識別子を持った識別のためのもの、VO=イミュータブルでスレッドセーフな値保持クラス、DTO=データ転送のために使うデータの器、といった感じでしょうか。
  • Web API: The Good Partsを読んだ - AnyType

    Web API: The Good Parts 作者: 水野貴明出版社/メーカー: オライリージャパン発売日: 2014/11/21メディア: 大型この商品を含むブログ (1件) を見る 業務ではiOSアプリとバックエンドの開発を両方担当しているので、APIの設計を何回かやってきた。しかし、自分なりのやり方でやってきた部分が多かったので、最近発売されたWeb API: The Good Partsを読んでちゃんとした設計について学ぶことにした。 得られた学びをメモとして残す。 HATEOAS HATEOAS(Hypermedia As The Engine Of Application State)という設計方法を初めて知った。HATEOASではまず、サーバー側はレスポンスに関連するエンドポイントを含め次にアクセスするAPIを簡単に辿れるようにする。クライアント側は最初のエンドポイント以

    Web API: The Good Partsを読んだ - AnyType
    kimutansk
    kimutansk 2014/11/28
    HATEOASという方式はなるほど。こういうレスポンスパターンは見たことがありましたが、きちんと名前があるのは知りませんでした
  • Martin Fowler氏の語る“犠牲的アーキテクチャ"

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    Martin Fowler氏の語る“犠牲的アーキテクチャ"
    kimutansk
    kimutansk 2014/11/17
    現在開発しているものが将来的に破棄することを見越してリプレースを容易にする設計方針で開発すると。これ聞くとNetfilxのSideCarやEurekaを思い浮かべますが・・・
  • イミュータブルデータモデル(入門編)

    6. Step1 エンティティの抽出 発送担当者が受注リストをもとに、商品の在庫を確認し、在庫が あれば商品を発送する。 ① 要求仕様の「動詞」を抜き出しエンティティとする。 ② ①に関わる「名詞」を抜き出しエンティティとする。 ③ エンティティ間の関連に線を引く ④ 属性や候補キーも分かる範囲で書いておきます。 間違い! この段階で実装をプロパティファイルにするとか、Enum にするとか決め打ちでエンティティとして表さないのはや めましょう。 まず、はじめにエンティティを抽出します。

    イミュータブルデータモデル(入門編)
    kimutansk
    kimutansk 2014/10/21
    リソースとイベントを更新日時を持つか否かで分類/イベントは一つの日時属性しかもたない/業務の記録がイベント、と。ただこれは「イミュータブル」と呼称するのは微妙かも
  • オレ流AngularJSを使った設計ポリシー

    Chrome MySQL Adminでは、 AngularJSを使って実装を行っています。Chrome appsでは、 何らかのMVC Frameworkの利用が勧められています。 AngularJSは、Controller、Directive、Template、Serviceなど、いくつかの部品群を組み合わせてアプリケーションを構成することになります。その機能の豊富さ故に、実はちゃんとしたポリシーを決めておかないと、いかようにでも作れてしまうために、かえって複雑さが増してしまうという危険性も出てきます。もちろんアプリケーションの作り始めは試行錯誤の連続なのですが、徐々に自分なりのポリシーみたいなものが確立されてくるはずです。 エントリでは、Chrome MySQL Adminでの設計/実装ポリシーを簡単に紹介してみたいと思います。ちなみに、全てのソースコードは、以下にあります。 htt

    オレ流AngularJSを使った設計ポリシー
    kimutansk
    kimutansk 2014/10/13
    Angular使うことで継承を回避できるというのは確かに。とりあえずこのあたりの情報は色々確認しておく必要がありそうです。
  • コマンドラインツールについて語るときに僕の語ること #yapcasia

    http://yapcasia.org/2014/talk/show/b49cc53a-027b-11e4-9357-07b16aeab6a4

    コマンドラインツールについて語るときに僕の語ること #yapcasia
    kimutansk
    kimutansk 2014/08/30
    CLIだけでなくAPIとかでも使えそうな考えですね。個々は当たり前の内容ですが、非常に大切。
  • マイクロサービス(microservices)とは何か – recompile.net

    マイクロサービス(microservices)という言葉をご存知でしょうか? 今、エンタープライズ界隈のソフトウェアエンジニアの間でマイクロサービスという言葉がにわかに盛り上がりつつあります。 マイクロサービスはJames Lewis氏によって提案された言葉です。詳細については、彼がMartin Fowler氏と共著で書いた「Microservices」という記事を参照してほしいのですが、ようするにひとつのアプリケーションを、Railsのような一枚岩のアーキテクチャではなく、複数の軽量なサービスを連携させたアーキテクチャでつくろうというアプローチです。 上述の記事 では、マイクロサービスの特徴が九つほど上げられています。 サービスによるコンポーネント化:ライブラリではなく別プロセスで動作するサービスによってアプリケーションのコンポーネント化を実現している。 ビジネスケイパビリティに基づく組

    マイクロサービス(microservices)とは何か – recompile.net
    kimutansk
    kimutansk 2014/08/15
    コンポーネント化/組織化/プロジェクトでなくプロダクト/スマートエンドポイント&ダムパイプ/分散ガバナンス/分散データ管理/インフラ自動化/耐障害/進化的設計と。
  • LinuxCon JapanにLinus氏登場、Linuxカーネルの最新動向に関する解説も

    kimutansk
    kimutansk 2014/05/24
    「自分の考えたモデルより実世界は複雑であることを認識していることが必要」と。これは特に大事ですね・・それがわかっていないと局地戦が頻発してエンジニアが幸せになれない
  • APIのバージョニングは限局分岐でやるのが良い - Hidden in Plain Sight

    ちょっと前にTwitterAPIのバージョニングをどうやるかみたいな話をしていたのですが、そのへんもやもやしているので少し整理しておきたいなと。 APIのURLを/api/v1/*とかってやるの、やめたほうがいいとおもうんだけどなぁ。いざv2を作るとなったときに、大量のコピペが発生して後悔するよ、って伝えたい。— Kenn Ejima (@kenn) February 28, 2014 さて、これについて色々と異論・反論も含めた意見が出たのですが、まずは、大昔にURL方式(=コントローラ分割)でやってきて後悔したぼくが、(5年ぐらい前から)現在はどうやってAPIのバージョンを管理しているか?について紹介します。 基原理としては、コピペが多発する根っこで分岐(=コントローラ分割)じゃなくて、必要最小限のところで限局的に分岐するのがいい、という考え方に基づきます。 一言でいうと、「パラメー

    APIのバージョニングは限局分岐でやるのが良い - Hidden in Plain Sight
    kimutansk
    kimutansk 2014/03/06
    セッションにバージョンを書くという方式ではないものの、方式的には以前作ったものは限局分岐でやっていましたね。そしてRebuild33を聞いてなかったので聞きますか
  • IDの設計についてのさらに突っ込んだ議論

    今日も前回に引き続きデータベース設計の話をする。今回の話で一旦データベース設計については筆を置くつもり(ブログ書いてないで原稿書けよ>俺)であるが、その前に話をすっきりさせて置きたいと思う。最後を飾るテーマはIDの設計である。 数字しかないのに意味を含んだID前回のエントリを見ていただいた方から、次のような構造を持った学籍番号があるというフィードバックを頂いた。 全部数値で"入学年度下2桁"+"学科コード"+"学科内のあいうえお順の順位" このようなルールで割り当てた学籍番号を、単なる数値として扱うのであれば大きな問題はない。これは数値しか含まれていないので、SQLのデータ型としては単に数値型を使えば良いだろう。だが、学籍番号から入学年度を判断する、あるいは学科を判断するといった用途で使われるのであればやはり適切ではないといえる。リレーショナルモデルの観点だけからではなく、IDとして適切で

    IDの設計についてのさらに突っ込んだ議論
    kimutansk
    kimutansk 2013/12/10
    個人的には「IDがずっと変わらず使い続けることができるか」が一番重要で、それ以外は一段落ちますかね・・・ とはいえ、システム次第ではそれもひっくり返るんでしょうけど
  • リレーショナルモデルのドメイン設計についての議論

    リレーショナルモデルを実践するには、ドメイン(≒データ型)を如何に正しく設計するかということが極めて重要になる。しかしながら、ドメインをどう設計すべきかという議論はあまりされていないように思う。その結果、ドメインについての理解はあまり進まず、データベース設計に失敗しているパターンが多いように思われる。 というわけで今日のテーマはドメインである。 集合を定義するリレーショナルモデルにおけるデータ型とは何か。リレーショナルモデルを実践するにはまずその点から理解する必要がある。 リレーショナルモデルでは、データ型はドメインと呼ばれる。ドメインとは、その属性(≒カラム)に入るべき値はどういったものかを集合として定義したものだ。言い換えると、属性値とはある集合の要素の一つであると言える。従って、ドメインを設計する際には、SQLで言うところのデータ型、つまりINTやCHARといったものだけでなく、その

    リレーショナルモデルのドメイン設計についての議論
    kimutansk
    kimutansk 2013/12/09
    「「キーが変更に弱いからサロゲートキーで何とかしよう」は単にドメインの設計という問題から目を背けているだけに過ぎない」と。適切に設計できれば遭遇しないわけですので、確かに。
  • データベースアプリケーション開発を炎上させる負のスパイラル

    毎度おなじみ、はてブのホットエントリに「SIをダメにする負のスパイラル」というタイトルのまとめが掲載された。きしだ氏とはかなり視点は違うものの、開発現場の問題点については少し思うところがあるので意見を書いてみようと思う。と言っても、以下の話の内容はデータベースアプリケーションに限定した話であり、またSIerだけに限った話ではないのでその点はご容赦頂きたい。もちろんSIer各位の案件はデータベースは必須なので、エントリで触れる問題点には該当するだろう。 Q.なぜ炎上するのか? A.正しいデータベース設計ができていないから結論から言おう。データベースアプリケーションの開発が炎上するのは正しいデータベース設計ができていないからだ。ここでいう「正しい」とは、論理的に証明できる正しさという意味ではない。「来こうするべき」といった意味で捉えて欲しい。 「炎上」というのは、例えばテストが通らない、バ

    データベースアプリケーション開発を炎上させる負のスパイラル
    kimutansk
    kimutansk 2013/11/17
    「データベース設計は、上流工程でもDBAでもなく、本来は開発者がするべき作業」と。設計工程でモデリングできる段階まで行ってから、ということですかね