少し前に、大きなプロジェクト (.NET クラス ライブラリ) を複数の .NET DLL に分割する方がよいかどうか迷ったときに、ここで質問しました。アドバイスは、1 つの大きな DLL を持つことでした。
この DLL は現在、別のプロジェクトで使用されています。他のプロジェクトは少数のクラスしか使用しないため、プロジェクトには未使用のクラスが多数あります。
1 つの DLL を持つというアーキテクチャの観点から見たこの悪い習慣ですか、それとも私がこれを考えすぎているのでしょうか?
少し前に、大きなプロジェクト (.NET クラス ライブラリ) を複数の .NET DLL に分割する方がよいかどうか迷ったときに、ここで質問しました。アドバイスは、1 つの大きな DLL を持つことでした。
この DLL は現在、別のプロジェクトで使用されています。他のプロジェクトは少数のクラスしか使用しないため、プロジェクトには未使用のクラスが多数あります。
1 つの DLL を持つというアーキテクチャの観点から見たこの悪い習慣ですか、それとも私がこれを考えすぎているのでしょうか?
小さなプロジェクトであっても、レイヤーをいくつかのプロジェクト/DLL に分割する傾向があります。たとえば、ビジネス層がデータベースと対話する方法がなく、リポジトリ プロジェクトとしか対話できない場合、適切なパスをたどることが保証されます。 .
同じ概念を使用して、基になるクラスを公開せずに、レイヤーからレイヤーへのインターフェイスを公開できます。これは、ある層が別の層のクラスと直接対話することはできず、Ninject などの IoC ライブラリを介して接続されているインターフェイスを使用する必要があるため、コントラクトによってコーディングするのに役立ちます。
プロジェクトが成長するにつれて、複数の開発者がプロジェクトに取り組んでいる場合は、それらを分けておくとよいでしょう。フロントエンド開発者、サービス開発者、データベース開発者などは、まったく異なるプロジェクトに取り組んでいるため、互いに競合することはありません。
編集
コメントについて:
1) DI を使用して、レイヤー内で引き続きインターフェイスを使用できます。簡単な例は次のとおりです。
public interface IUserManager{}
internal class UserManager : IUserManager{}
public interface ICustomerManager{}
internal class CustomerManager : ICustomerManager {
private readonly IUserManager _userManager;
public CustomerManager(IUserManager userManager) {
// DI library automatically populates this object
_userManager = userManager;
}
void SomeMethod() {
var user = _userManager.GetUser(42);
}
}
2) インターフェイスの操作に苦労する場合は、常にインターフェイスを使用し、使用しないという選択肢を自分に与えないでください。例えば:
// Repository project
public interface IUserRepository{}
internal class UserRepository : IRepository{}
IUserRepository
ビジネス プロジェクトは、 ではなくについてのみ知っているUserRepository
ため、直接参照を取得する方法はありません。もう 1 つの方法は、インターフェイスと実装を 2 つの別々のプロジェクトに保持することです。呼び出し元はインターフェイス プロジェクトへの直接参照のみを持ちます。
それはあなたを正直に保ちます。
しかし、インターフェイスを使用する理由がまったくない場合、たとえば、データベースをモックアウトしたり、同じインターフェイスを実装する別のレイヤーに切り替えたりするつもりがない場合は、それらを完全に除外することをお勧めします。なんらかの潜在的なメリットがある場合にのみ、インターフェースを使用してコードを作成してください。そうでない場合は、理由もなく複雑さを増すだけです。
難しく考えすぎだよ。DLL に含まれるすべてがロジックである場合、今日の標準では非常に小さなファイルになり、使用されていないクラスはメモリ スペースをまったく占有しません。
また、展開して追跡するファイルが少ない場合は、物事をより整頓できます。