Skip to content

Commit

Permalink
Merge pull request #84 from ray-di/introduction
Browse files Browse the repository at this point in the history
Add more detailed explanation of Ray.Di features in Introduction
  • Loading branch information
koriym authored Nov 6, 2024
2 parents 52b4fb6 + 94256e7 commit f7c3bc8
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 6 deletions.
38 changes: 35 additions & 3 deletions manuals/1.0/en/05.Overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,44 @@ title: Overview
category: Manual
permalink: /manuals/1.0/en/index.html
---

<img src="/images/logo.svg" alt="Ray.Di logo" width="200" height="200">

# Overview

There are many advantages to using dependency injection, but doing so manually often leads to a large amount of boilerplate code to be written. Ray.Di is a framework that makes it possible to write code that uses dependency injection without the hassle of writing much of that boilerplate code,as further detailed in this page on [Motivation](motivation.html).
Ray.Di is a dependency injection (DI) framework for PHP. It automatically resolves object dependencies and enables flexible object graph construction according to the context.

## Core Features

### Dependency Resolution at Compile Time

- Resolves dependencies by describing overall rules rather than individual object assembly (autowiring)
- Detects dependency issues before execution
- Minimizes runtime overhead through code generation

### Flexible Object Graph Construction

- Enables various contexts through the combination of independent modules
- Allows dependency resolution according to the injected object; for example, changing dependencies based on the target method's attributes or the object's state (CDI: Contexts and Dependency Injection)
- Injects different implementations of the same interface using `Qualifier`
- Supports injection of lazily instantiated objects

Put simply, Ray.Di alleviates the need for factories and the use of `new` in your PHP code. You will still need to write factories in some cases, but your code will not depend directly on them. Your code will be easier to change, unit test and reuse in other contexts.
### Explicit Dependency Description

- Describes dependency generation using raw PHP code
- Utilizes attributes for self-documented dependency definitions
- Separates cross-cutting concerns through integration with AOP

## Stability and Reliability

Since the release of version 2.0 in 2015, Ray.Di has expanded its features along with the evolution of PHP while maintaining backward compatibility by following semantic versioning.

## Google Guice and Ray.Di

Ray.Di is a PHP DI framework inspired by [Google Guice](https://github.com/google/guice). Most of the documentation on this site is taken from Google Guice.
Ray.Di is a PHP DI framework inspired by [Google Guice](https://github.com/google/guice). Based on the proven API design of Google Guice, it aims for PHP-like evolution. Most of the documents on this site are also quoted from Google Guice.

---

Using dependency injection offers many benefits, but doing it manually requires writing a lot of boilerplate code. Ray.Di is a framework that allows you to use dependency injection without writing such cumbersome code. For more details, please see the [Motivation](motivation.html) page.

In short, Ray.Di eliminates the need to use factories or `new` in your PHP code. While you may still need to write factories, your code does not directly depend on them. Your code becomes easier to modify, unit test, and reuse in other contexts.
39 changes: 36 additions & 3 deletions manuals/1.0/ja/05.Overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,45 @@ title: Overview
category: Manual
permalink: /manuals/1.0/ja/index.html
---

<img src="/images/logo.svg" alt="Ray.Di logo" width="200" height="200">

# 概要

依存性注入(ディペンデンシーインジェクション)には多くの利点がありますが、手作業でそれを行うと、しばしば大量の定型的なコードを書かなければならなくなります。Ray.Diは、[モチベーション](motivation.html)のページで詳しく説明されているように、面倒な定型文を書かずに依存性注入を使用したコードを書くことを可能にするためのフレームワークです
Ray.DiはPHPのための依存性注入(DI)フレームワークです。オブジェクトの依存関係を自動的に解決し、コンテキストに応じた柔軟なオブジェクトグラフの構築を可能にします

簡単に言うと、Ray.DiはファクトリーやPHPコードでの`new`の使用を不要にするものです。ファクトリーを書く必要がある場合もありますが、コードが直接ファクトリーに依存することはありません。あなたのコードは、変更、ユニットテスト、他の文脈での再利用がより簡単になります。
## 核となる特徴

### コンパイルタイムでの依存解決

- 個別のオブジェクトの組み立て方でなく、全体のルールを記述することで依存性を解決(オートワイアリング)
- 実行前に依存性の問題を検出
- コード生成による実行時の最小のオーバーヘッド

### 柔軟なオブジェクトグラフの構築

- 独立したモジュールの組み合わせによる様々なコンテキストの実現
- 注入対象オブジェクトに応じた依存性解決が可能。たとえば対象のメソッドのアトリビュートやオブジェクトの状態に応じた依存性変更
- 識別子による同一インターフェースの異なる注入
- 遅延生成オブジェクトの注入

### 依存性の明示的な記述

- 生のPHPコードによる依存生成の記述
- アトリビュートを活用した自己文書化された依存定義
- AOPとの統合による横断的関心事の分離

## 安定性と信頼性

Ray.Diは2015年に2.0がリリースされて以来、PHPの進化とともに機能を拡張しながらもセマンティックバージョニングに従い後方互換性を確保しています。

## Google GuiceとRay.Di

Ray.Diは[Google Guice](https://github.com/google/guice)にインスパイアされたPHPのDIフレームワークです。このサイトのほとんどのドキュメントはGoogle Guiceから引用しています。
Ray.Diは[Google Guice](https://github.com/google/guice)にインスパイアされたPHPのDIフレームワークです。Google Guiceの実績あるAPI設計をベースに、PHPらしい進化を目指しています。このサイトのほとんどのドキュメントもGoogle Guiceから引用しています。

---

依存性注入を使用することで多くの利点がありますが、手動で行うと大量のボイラープレートコードを書く必要があります。Ray.Diは、そのような煩雑なコードを書くことなく依存性注入を利用できるフレームワークです。詳細は[モチベーション](motivation.html)のページをご覧ください。

簡単に言うと、Ray.DiはファクトリーやPHPコードでの`new`の使用を不要にするものです。ファクトリーを書く必要がある場合もありますが、コードが直接ファクトリーに依存することはありません。あなたのコードは、変更、ユニットテスト、他の文脈での再利用がより簡単になります。

0 comments on commit f7c3bc8

Please sign in to comment.