ハツカネズミの恋

Lisp のもろもろ,おぼえがき

ビジネスロジックってなんやねんという話

tl; dr

ドメインロジック(domain logic) と言ってくれ.

ビジネスロジック

Rails について調べていると目にする機会の多いビジネスロジックという単語. めちゃくちゃ雰囲気はあるけど,雰囲気がありすぎて意味が掴めない語の筆頭.

e.g.

”Model にはビジネスロジックを記述し……”

ビジネスロジックをコントローラーに書いてしまうと……”

Wikipedia(jp) によれば:

ビジネスロジック(英: business logic)は、データベース上のデータに対する処理手順といったようなものを指す、ソフトウェア工学的な用語である。「アルゴリズム」という語が説明に使われていることがあるが、アルゴリズムは数学的・論理的に明確な概念であり間違った説明の仕方である。どんなプログラミング言語の仕様を見ても、APIを見てもビジネスロジックという用語は出てこないし、学術論文にも現われない。基本的には、エンタープライズ系(業務支援系)ソフトウェアを開発する企業が内部的に、もしくは顧客への販売促進のために用いる用語である。

お前は何を言っているんだ.

調べた結果余計に混乱するという悲しい結末.これはもう,この言葉が使われる文脈からお気持ちをお察しするしかない.

文脈とキーワード

ビジネスロジックという語が登場する場面では,それに付随する特有の文脈と共起表現がある.特に目立つものとして,例えば:

  • MVC
  • Model
  • Database

などがある.

それぞれ Wikipedia(en) で定義を確認すると:

MVC:

Model–View–Controller (usually known as MVC) is an architectural pattern commonly used for developing user interfaces that divides an application into three interconnected parts. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.

Model:

The central component of the pattern. It is the application's dynamic data structure, independent of the user interface. It directly manages the data, logic and rules of the application.

Database:

A database is an organized collection of data, generally stored and accessed electronically from a computer system. Where databases are more complex they are often developed using formal design and modeling techniques.

やはり特にビジネスロジック(or buisiness logic) という語は登場しない(Model の説明に "logic" は出てくる).

要するに:

  • MVCデザインパターンの一種である.
  • MVC というデザインパターンのキモとなる Model は,アプリケーションのデータやロジック,ルールを取り扱う部分である.
  • データベースとは電子的に管理されたデータの集合である.

ということらしい.

まあ,なんとなく知ってた.知ってたけど,結局ビジネスロジックってなんなんだ.

と思っていたら,Wikipedia(en) にまんま Business logic - Wikipedia という記事を発見:

In computer software, business logic or domain logic is the part of the program that encodes the real-world business rules that determine how data can be created, stored, and changed.

なるほど.

ビジネスロジックとは,"the real-world business rules" がどんな風にデータを加工するか (how data can be created, stored, and changed) をソフトウェア的に規定したものである,と.これはほぼ上記 Model の定義と一致する.

ビジネスロジックという語の解釈

この辺を踏まえてざっくりと読み換えると,ビジネスロジックというのは:

ソフトウェアに落とし込まれた(実際の)ビジネスのルールが,どんな風にデータを加工するかを規定したもの.MVC デザインパターンでは主に Model に記述される.

ものと解釈できそう.

ところで,”ソフトウェア的にどんな風にデータを加工するかを規定したもの”って,それはいわゆる”メソッド”なのでは. Rails を例に考えると,/app/models/ 配下に記述された DB データの加工メソッドたちは,それぞれがビジネスロジックと言えるのではなかろうか.

ビジネス?

え,それ,別にビジネス関係なくない

ビジネスではない "the real-world matters" を MVC に乗せてソフトウェア的に構成したい時にも,Model にDBデータの加工メソッドが書かれる,という指針は変わらないはずだ.英語的に business を "the things to deal with" みたいに解釈したとしても,"business logic" という表現には違和感がすごい.

とにかくこうやって,ドメインとケースの抽象度が逆転したような名前を付けるのは,脳内の包含関係がややこしくなってめちゃくちゃ混乱する.やめてほしい.

そこで,もう一度 Wikipedia(en) の Business logic の定義に立ち戻りたい.

In computer software, business logic or domain logic is the part of ...

domain logic って表現,めちゃくちゃ気に入りました.こっちの方が,本質を誤解の余地なく適切に表現していると思う.ソフトウェアが "the real-world business rules" になった時は,この domain が business になるだけ.直感的にもこっちの方がずっと自然だと思う.

まとめ

今後ビジネスロジックという単語を見たら,脳内でドメインロジックに変換して読みます.