概要
プロジェクト管理で触れたように、プログラムや、プログラムを作るための部品は「プロジェクト」という単位で管理します。
- 依存関係を考える最小単位がプロジェクト
- .NETの場合、プロジェクトの成果物は「アセンブリ」(dllもしくはexe)
- いろんなプログラム、いろんな環境で使える部分を別プロジェクトに切り出して使う
依存関係
プログラムをちゃんと部品として分けて作って、その部品をいろんなプログラムから再利用するためには、依存関係の整理が必要です。
依存関係(dependecy)について説明するために、まずはクラスの依存について考えてみます。例えば、以下の図のようなコードを見てください。
図中の矢印が「依存」です。あるクラスが別のクラスから使われているという状態。
この例は、ゲームでよくありそうなデータ構造です。
- 各ユーザー(
User
)が、ユニット(Unit
)を複数持っていて、1つの同盟(Alliance
)に入っている。 - 各同盟には複数のユーザー(
User
)がメンバーとして含まれている。 - 各ユニットは装備品(
Equipment
)を複数装備している。
今回の場合、1クラス1ファイルで分けているので、ソースコード ファイル的にも以下のような依存関係があります。
この関係からは、以下のようなことが言えます。
Equipment.cs
は単体で切り出せる。Unit.cs
を使うにはEquipment.cs
もセットで必要。User.cs
を使おうとすると、芋づる式にAlliance.cs
、Unit.cs
、Equipment.cs
すべてが必要。User.cs
とAlliance.cs
は相互依存していて、絶対に切り離せない。
このように、依存関係を整理することによって、「何かを抜き出して使うには別の何かが必要になる」というような状況が見えてきます。
補足: .NETのソースコード ファイル配置
(C#を含め).NETでは、.cs
ファイルなどのソースコードと、クラス、メソッドなどのC#文法構成要素との間に何の制約もありません。A.cs
というファイルにB
というクラスがあっても構いません。「クラスの分割定義」ができるので、複数のファイルにわたって1つのクラスを書くこともできます。
(他の言語だと、ファイル名を使って参照解決したり、ファイル名とクラス名が同じでないといけないという制約があったりするものもあります。)
ただ、一般的に推奨される方針としては、名前空間と同じフォルダー階層の下に、クラス名と同じ名前の.cs
ファイルを作る方がよいとされています。