2011-11-11 14 views
1

インターフェイスを使用する場合は、各オブジェクトのハード実装を正確に取得する必要があります。これは、各タイプのファクトリオブジェクトを作成することによって行われますか?インターフェイスを使用する場合、具体的なオブジェクトは常にファクトリメソッドによって返されますか?

IRepository<User> userRepository = new UserRepository(connection); // Needs a dbconnection 
userRepository.Create(user); 

//Is this the best way? 
IRepository<User> userRepository = RepositoryFactory.GetUserRepository(connection); 

public static class RepositoryFactory 
{ 
    public static IRepository<User> GetUserRepository(DbConnection connection) 
    { 
     return new UserRepository(connection); 
    } 
} 

UserRepositoryオブジェクトを使用する最も理想的な方法は何ですか? UserRepositoryにファクトリオブジェクトを使用した場合、接続オブジェクトを渡すのか、そのプロセスは何ですか?

答えて

1

私は間違ってあなたの質問を読んでいますが、コントロールと依存性の注入

反転を見て、それらはあなたがしようとしている何のための最高に合うかを確認したい場合があります場合はごめんなさい行う。

のIoC:http://visualstudiomagazine.com/articles/2010/08/01/inversion-of-control-patterns-for-the-microsoft-net-framework.aspx/http://joelabrahamsson.com/entry/inversion-of-control-introduction-with-examples-in-dotnet

依存性注入:http://www.blackwasp.co.uk/DependencyInjection.aspx

1

ジョンはあなたがIOCを使用することができます言ったように。しかし、それはあなたのアプリケーションでデカップリングの余分な層を望むと思う場合にのみ有効です。また、IoCを使用している場合は、スタブを外したり、もっと邪魔になることもあります。しかし、あなたのプロジェクトに新しいムービングピースを導入することが時々苦痛になることがあることを私は知っています。

工場は確かに行く方法でしょう。私は高レベルの抽象化を工場に渡します。 "FromADatabase"または "FromANetwork"のような文字列または列挙型です。それは、あなたが望むもの(例えば設定ファイルなど)の適切な構造の詳細を調べ、必要な具体的なオブジェクトを構築して戻すための工場まであります。

消費者が関心を持つ限り、彼らは工場に行ってそこから何かが必要なような非常に高いレベルを言います。その工場まで、何が頼まれているのかを具体的にどのように作成してそれを発信者に渡すかを理解する。

関連する問題