あなたがしていることは、基本的にActive Recordパターンの実装です。多くの人が使用しており、完全に有効なアプローチです。ただし、アプリケーションが非常に複雑な場合、または懸念事項の分離にこだわりがある場合は、次の情報が役立つことがあります。
DDD (ドメイン駆動設計) アプローチをお勧めします。DDD は、いわゆるリポジトリ パターンを使用します。DDD は、アプリケーションとその関連事項を「モデル/ドメイン」、「インフラストラクチャ」、「サービス」という異なるレイヤーに分離します。
リポジトリは、インフラストラクチャ レイヤー内に属するパターンです。Customer
またはEmployer
(またはMonster
および)のようなビジネス オブジェクトWeapon
はモデル レイヤー内にあり、(モデル化しようとしている) 「ドメイン」のコアを表し、ビジネス ロジックも担当します。サービス レイヤーを使用して、複数のモデルにまたがるアクティビティを簡素化し、調整することができます。
各ドメイン モデル (たとえば、クラス Foo と Bar) には、データベース アクセスを処理するリポジトリがあります。これにより、データベース呼び出しとモデルが分離されます。
public interface IFooRepository
{
Foo Get(Guid guid);
}
public class FooRepository : IFooRepository
{
public Foo Get(Guid guid)
{
//... DB voodoo magic happening
return foo;
}
}
IRepository<T>
リポジトリのボイラーコードを常に書くのにうんざりしている場合は、ジェネリックを作成することもできます。
このアプローチは非常にうまく機能するため、依存性注入/制御の反転も検討する必要があります。
このアプローチの利点は、IFooRepository から派生した新しいクラスを簡単に実装できることです。これにより、データベース インフラストラクチャの変更にすばやく適応できます。たとえば、XML ファイルからデータを読み取る FooRepository や、NHibernate を使用して Postgres db から読み取る FooRepository を作成できます。
DDD に関するthis、this、およびthis の記事も読むことができます。