ビジネスロジック（BL）とビジネスオブジェクト（BO）とは


## はじめに

こんにちは！チョンさきです。

この記事は、新卒ITエンジニアとして最初のプロジェクトでつまずいた経験から作成しました。
知らない言葉に対して混乱し、質問もできずに悩んでいたのを覚えています🥲


「BL」や「BO」という言葉に初めて出会い、戸惑っている方の助けになれば嬉しいです！

この記事では、初心者でも理解できるように**BOとBLの概念の違い**と**役割のイメージ**を解説します！

## BO（ビジネスオブジェクト）とは？

ビジネス上の<INS>実体やデータを表現するクラス</INS>です。
つまり、アプリケーションが取り扱うデータの構造やモデルを定義するものです。
<font color="LightGreen">**これは、データ転送オブジェクト（DTO: Data Transfer Object）の概念に近いものと考えられます。**</font>

たとえば「商品」を扱う場合、商品ID・商品名・価格・在庫数などの情報をまとめて保持するクラスがBOになります。

```csharp
public class 商品BO
{
    public string 商品ID { get; set; }
    public string 商品名 { get; set; }
    public decimal 価格 { get; set; }
    public int 在庫数 { get; set; }
}
```

BOは**データそのものに特化しており、処理は持ちません**。あくまで「何を持っているか」を表すだけです。


### BOの利用パターン
BOは単独でデータベースに保存されるわけではなく、多くの場合以下のように利用されます：

```csharp

// C#の場合
var dataList = new List<Dictionary<string, 商品BO>>();
// または
var products = new IEnumerable<商品BO>();

// Javaの場合も同様に
List<ProductBO> products = new ArrayList<>();
```
このように、BOはコレクション（List, Dictionary, IEnumerableなど）に格納して管理されることが一般的です。BOそのものはデータの形を定義するだけで、実際のデータ操作はBL側で行います。

### 注意
:::note warn
なお、「ビジネスオブジェクト」という言葉で検索しても、
SAP社が提供していた「Business Objects」という製品や企業情報ばかりがヒットしてしまいます。
本記事で扱っている内容とは異なる意味ですので、ご注意ください。
:::

⚠️検索結果が少ないことので、「ビジネスオブジェクト」は日本の開発現場ではあまり耳慣れない用語であると推測されますが、
英語圏では“expert one-on-one Visual Basic .NET Business Objects” や “Expert C# Business Objects” といった書籍タイトルにも見られるように、ある程度用いられている概念と思われます。
また、日本語に翻訳された書籍の中でもこの言葉は見かけておりました。
>「RICO MARIANI　これは、3階層システムで使用される<INS>ビジネスオブジェクト</INS>でよく起こります。」
>(Krzysztof Cwalina; Jeremy Barton; Brad Abrams. .NETのクラスライブラリ設計　改訂新版　開発チーム直伝の設計原則、コーディング標準、パターン (p.283). 日経BP. Kindle 版. )
## BL（ビジネスロジック）とは？

ビジネスの<INS>ルールや処理の流れを実装するクラス</INS>です。  
BOで定義されたデータを使って、「どう処理するか」を担当します。

たとえば「この商品は注文できるか？」「購入後に在庫をどう減らすか？」などのロジックはBLで扱います。

```csharp
public class 在庫管理BL
{
    public bool 在庫確認(商品BO 商品, int 注文数)
    {
        return 商品.在庫数 >= 注文数;
    }

    public void 在庫更新(商品BO 商品, int 購入数)
    {
        商品.在庫数 -= 購入数;
        // DBへの保存処理など
    }
}
```

## BOとBLの違い

| 項目 | BO（Business Object） | BL（Business Logic） |
|------|-------------------------|------------------------|
| 役割 | データを表現・保持する | データをどう処理するか定義する |
| 中身 | プロパティ（情報） | メソッド（処理・ルール） |
| 例え | 記録帳やフォームのようなもの | その記録をもとに判断・操作する司令塔 |

![BLBO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3971022/3f3afa9d-9940-43bf-b99d-34d5eb5e21aa.png)

## なぜBOとBLを分けるの？

BOとBLを分けることで、次のようなメリットがあります。

- **責務の分離**：データと処理を別にすることで、コードがスッキリ管理しやすくなる
- **再利用性の向上**：同じBOを別のロジックでも使い回せる
- **保守性の向上**：処理の変更が必要なとき、データ側に影響を与えずに済む


## 言語に依存しない考え方

このBO/BLの設計はC#に限らず、JavaやPython、PHPなどのオブジェクト指向言語全般に共通しています。  
現場や言語が変わっても、**「データを表す層」と「処理を行う層」を分ける設計思想**は同じです。


## まとめ

- **BO（Business Object）**：データを保持するクラス。「何を持っているか (What) 」を表す
- **BL（Business Logic）**：処理やルールを定義するクラス。「どう使うか (How) 」を決める
- BOはデータベースに直接保存されるものではなく、コレクション内で管理されることが多い
- 2つを分けることで、コードがより整理され、変更や再利用に強くなる

---


少しでも「わかったかも！」と思ってもらえたら嬉しいです😊
もっと詳しく知りたい人は、MVCアーキテクチャなどを調べてみてもいいと思います！

## 参考資料

- [「ビジネスロジック」とは何か、どう実装するのか](https://qiita.com/os1ma/items/25725edfe3c2af93d735)
- [ビジネスロジックとは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word13666.html)
- [What are Business Objects and what is Business Logic?](https://stackoverflow.com/questions/3273800/what-are-business-objects-and-what-is-business-logic)
- [Using Business Objects As Models In MVC](https://www.csharp.com/article/using-business-objects-as-models-in-mvc/)
- Krzysztof Cwalina; Jeremy Barton; Brad Abrams. [.NETのクラスライブラリ設計　改訂新版　開発チーム直伝の設計原則、コーディング標準、パターン](https://amzn.asia/d/aQFtstK). 日経BP. Kindle 版.