January 29, 2021 @ 銀座Rails #29
January 29, 2021 @ 銀座Rails #29
DBから直接golangのモデルを生成するxoのご紹介¶ Webアプリを開発している時に、DBのモデル定義の方法にはいろいろなやり方があると思います。 xo は、 DBから直接 golangのモデル定義を自動生成するツールです。 PostgreSQL MySQL Oracle Microsoft SQL Server SQLite に対応しており、良く使われるRDBをほぼカバーしていると思います。 インストール¶ goのツールですので、 go get でインストールできます。 $ go get -u golang.org/x/tools/cmd/goimports (依存性のため) $ go get -u github.com/knq/xo
このエントリでは、Yegor Bugayenkoによる記事、ORM Is an Offensive Anti-Patternを紹介する。 (Yegorから和訳と転載の許可は得た。) 以下はその全文の和訳だが、意訳超訳が混じっているので、もとのニュアンスを知りたければ元記事を読んでもいいし、読まなくてもいい。 結論から言えば、ORMはオブジェクト指向プログラミングの原則の全てに違反するひどいアンチパターンだ。オブジェクトをバラバラに引き裂き、もの言わぬ受身なデータ入れに変えてしまう。 小さいWebアプリケーションから、数千のテーブルをCRUD操作するエンタープライズシステムまで、どんなアプリケーションにもORMが存在することはゆるせない。 代わりになるものは? SQLを話すオブジェクトだ。 ORMの仕組み オブジェクト関係マッピング (Object-relatinal mapping、ORM
O/Rマッパーに対してネガティブな意見を見つけた。 O/Rマッパーの話 - 工夫と趣向と分別と。 http://d.akinori.org/?date=20060926#p01 一般に、テーブル設計をクラス設計に擦り寄せれば、リレーションを駆使する必要は減る。この罠にはまると、 オブジェクトクラスにそのまま対応させたテーブルを作ってしまい、コードの見かけはきれいでもデータは ぐだぐだな代物ができがちだ。 オブジェクトグラフの構造をそのままデータ構造にしたらグダグダになりますよ、ということだな。 これ読んで思い出すのが、ちょっと前にJPAの正しい使い方を知ろうと思ってサンプルを漁ってみた時のこと。 実戦で使えるデータ構造を作っているサンプルが無くて、結局JPAてどうやって使えばいいのか分からなかった。 焦点は event の扱いで、サンプルは以下の3パターンに分かれる。 1. そもそも ev
(※前回からの続きです。) CQRSはモデリング上の本質的な課題への対応である CQRS(Command-Query Responsibility Segregation、コマンド・クエリ責務分離)の採用は、現代的なシステムではほぼ全て必然的にそこへ帰結すると考えた方がよいと思います。CQRSという用語は「実践ドメイン駆動設計」を読むまで知りませんでした。というよりも、参照系と更新系を分離して設計しようという話をDDDが言及しているとは知りませんでした。しかし、下記記事で書いたように、要求・要件の分析観点から、参照系業務ロジックと更新系業務ロジックは非対称に構築すべきという点はむしろモデリング上の本質的な課題だとの考えを持っていましたので、CQRSはすんなり理解できました。 ※下記記事を参照してください。 《業務プロセス、業務ロジックの理解と、フロントエンド−バックエンド間I/Fの詳細》
前回の続き。 今回はEcto.Queryableとクエリ合成、Migrationの詳細。 適切な道具があれば、人間の生産性と思考力は大きく飛躍する。Ectoはデータベースを操作することに特化したプログラミング言語のように操作することができる。 他のプログラミング言語では真似できないほどの柔軟性を持ったElixirだからこそできることだ。 データベースを操作するモジュールのEctoでは、データベースを操作するために作られたプログラミング言語のようなエレガントなAPIを通してアプリケーションを構築することができる。 マイグレーション classでもstructでもなく、スキーマ定義はschemaマクロで構築できたように、マイグレーション定義においても、SQLシンタックスのように、createやdropを通して操作できる。 create
Drew Olsonさんの2015年1月23日付のブログ記事Composable Queries with Ectoの翻訳です。 EctoはRuby and RailsだとActive Recordに相当するのでしょうか、データベースの抽象化機構です。 Phoenixにも欠かせない機能なんですがあまり紹介記事がなさそうなので訳してみました。 そういえばectoっていうのは「外の…」という意味の接頭語で(ex-なんかと同じ)~魂?が口から「外に出る」エクトプラズム(ectoplasm)なんてのがありましたね(笑)~データベースに直接タッチせず外から触るからついた名前かもしれません。 (どうでもいい追記) ゴーストバスターズの「作業車」の名前がEcto-1でした。 以前の投稿で(ある種ホンモノの)WebアプリをElixirで作成して1今までに私が習ってきたレッスンのいくつかについて簡潔に述べま
This project is kept for historical purposes, if you’re new here you may want to check out upper.io/db.v2 instead. db.v1 is deprecated and no new features will be added, only security issues will be patched, we recommend you to migrate from db.v1 to db.v2. The upper.io/db.v1 package for Go provides a common interface for interacting with different data sources using adapters that wrap mature datab
Golang ORMs A survey of the current state of Golang ORMs 30 January 2014 Jesse Szwedko Software Engineer, ModCloth Inc. Why ORMs? Database agnostic Eliminate boilerplate required for database persistance Additional hooks into data lifecycle (e.g. validation before persistence) Evaluation metrics CRUD actions (struct/query mapping) Complex query creation SQL Sanitization Relationships Data lifecycl
フルスタックと聞いたからrevel使ってみたのにモデル層のサポートどころかORM(あるいはそれを良い感じに使うレール)もないじゃねえかみたいな感じで仕方なくちょろっと調査した、みたいな所感だけを書いた雑なエントリです。 結論 色々やろうとすると最終的には諦めてdatabase/sqlを使うのが良い。割り切りが大事。 試したライブラリ GORM https://github.com/jinzhu/gorm 多分一番リッチ。 後で書くけど、リレーションを含めたコードファーストなデータストア定義とかをしたいならこれしか選択肢なさそう。 gorp https://github.com/go-gorp/gorp 正確には"ORM-ish library for Go"だけどね genmai https://github.com/naoina/genmai "Simple, better and ea
July 2012 Exploring CQRS and Event Sourcing The project is focused on building highly scalable, highly available and maintainable applications with the Command & Query Responsibility Segregation and the Event Sourcing patterns. The project was positioned as a learning journey. This guidance is designed to help you get started with the CQRS pattern and event sourcing. It is not intended to be the d
Ruby Object Mapper is an open-source persistence and mapping toolkit for Ruby built for speed and simplicity. Learn MoreSupport rom-rb SponsorsWe are looking for sustainable sponsorship. If your company is relying on rom-rb or simply want to see rom-rb evolve faster to meet your requirements, please consider backing the project through our campaign on opencollective.com/rom.
(PgDay2012発表資料) SQLにとって、なぜO/Rマッパーが重要かを説明した資料です。Read less
一般的な業務アプリケーションではデータを永続化するために、RDBMS(関係データベース管理システム)を利用します。RDBMSでは大量のデータを効率的に検索したり、集約してレポートを作ったりすることが得意ですし、一般的に業務システムで求められるトランザクションのACID特性*1を満たすことも容易です。また、適切にテーブル設計の正規化を行うことにより、運用面においてデータの管理コストを下げることもできます。最近ではスケーラビリティの問題などもあり、RDBMS以外のデータベースについても注目されるようになってきていますが、今後も業務アプリケーションの主流としてRDBMSは使われていくだろうと思われます。 従って、Javaなどのオブジェクト指向言語で開発を行い、DDDのようなオブジェクト指向の設計技法を利用する場合に必ず考えなくてはならない問題は、オブジェクト指向と関係モデルとのインピーダンスダン
Hibernate、ActiveObjects、S2Dao、Apache Cayenne、iBATISなどORMフレームワークが群雄割拠状態なJavaですが、使い方を勉強したり設定ファイル書いたりするのが少し面倒かなと思っている人がいるかもしれません。 特にちょっとしたアプリケーションを作るならば、素のJDBCを使うのは嫌だけど、それに近い形で使えるORマッパーが欲しいと思うことがたびたびありました。 ということで以下の条件でJDBCを薄くラッピングしているJavaのライブラリを探して発見したものを紹介します。 レコードをオブジェクトに自動的にマッピングしてくれる できるだけSQLを書く量を減らすことができる いざとなったら生SQLを書くことができる 導入が簡単である 依存ライブラリが少ない 以下に挿入、検索、更新、削除を実行するコードを書いています。 今回はDBがMySQLだったので、M
Making Rails Better – Fixing Architecture Flaws in Active Record ActiveRecord is a funny thing. On the outside it looks great – it neatly maps relational data to Ruby objects and provides an easy to use API via its domain specific language. But on the inside, it contains two suprising architecture flaws that make it difficult to extend and negatively impact performance. The Vietnam of Computer Sci
More than 5,000 companies count on our digital courses and more to guide their teams through the tools and technologies that drive business outcomes. We can help yours too. New AI policy for O’Reilly authors and talent O’Reilly president Laura Baldwin shares the company’s ethical approach to leveraging GenAI tools and ensuring O’Reilly experts are compensated for their work. See it now It’s time t
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く