これは、より設計上の問題です。
私はアプリを構築しており、次のようにリポジトリパターン構造を作成しました:
私のコア名前空間は、DAL/Repository/BusinessLogic レイヤー アセンブリです。
ところで、私はデータ接続として Dapper.NET マイクロ ORM を使用しています。そのため、私の SqlConnection オブジェクトに拡張機能が表示されます。
データ アクセスのために、ベース リポジトリ クラスを作成しました。
namespace Core
{
public class BaseRepository<T>: IDisposable where T : BaseEntity
{
protected SqlConnection conn = null;
#region Constructors
public BaseRepository() : this("LOCAL")
{
}
public BaseRepository(string configurationKey = "LOCAL")
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings[configurationKey].ConnectionString);
}
#endregion
#region IDisposable
public void Dispose()
{
conn.Dispose();
}
#endregion
/// <summary>
/// returns a list of entities
/// </summary>
/// <typeparam name="T">BaseEntity type</typeparam>
/// <param name="sproc">optional parameters, stored procedure name.</param>
/// <returns>BaseEntity</returns>
protected virtual IEnumerable<T> GetListEntity(string sproc = null)
{
string storedProcName = string.Empty;
if (sproc == null)
{
storedProcName = "[dbo].sp_GetList_" + typeof(T).ToString().Replace("Core.",string.Empty);
}
else
{
storedProcName = sproc;
}
IEnumerable<T> items = new List<T>();
try
{
conn.Open();
items = conn.Query<T>(storedProcName,
commandType: CommandType.StoredProcedure);
conn.Close();
}
finally
{
conn.Close();
}
return items;
}
}
}
そして、私が持っているエンティティごとに、ExtendedUser、Messages と言って、次のような Interface-Class ペアを作成しています。
namespace Core
{
public class ExtendedUserRepository : BaseRepository<UsersExtended>,IExtendedUserRepository
{
public ExtendedUserRepository() : this("PROD")
{
}
public ExtendedUserRepository(string configurationKey) : base(configurationKey)
{
}
public UsersExtended GetExtendedUser(string username)
{
var list = GetListEntity().SingleOrDefault(u => u.Username == username);
return list;
}
public UsersExtended GetExtendedUser(Guid userid)
{
throw new NotImplementedException();
}
public List<UsersExtended> GetListExtendedUser()
{
throw new NotImplementedException();
}
}
}
等
上記のコードは、エンティティ :ExtendedUser の 1 つにすぎません。
問題は、私が持っているエンティティごとに Interface-ClassThatImplementetsInterface ペアを作成する必要があるかどうかです。それとも、すべてのエンティティからのすべてのメソッドに対して、1 つの RepositoryClass と 1 つの IRepository インターフェイスのみを使用する必要がありますか?