私はasp.net Web API RESTサービスを開発中です。私のデータはMySQLリレーショナルデータベースに保存されています。データアクセス層ではDapperマイクロORMを使用したいので、私は自分のORMラッパーメソッドを作成したいと思います。私が将来他のORMに変更することを決めたら、DALレイヤコード全体を書き直す必要はありません。カスタムC#Dapper ORMラッパー
私のアプローチについてどう思いますか?コードは次のとおりです。
public abstract class BaseORMCommandSettings //SQL command base class
{
public string CommandText { get; private set; }
public object Parameters { get; private set; }
public IDbTransaction Transaction { get; private set; }
public int? CommandTimeout { get; private set; }
public CommandType? CommandType { get; private set; }
public CancellationToken CancellationToken { get; private set; }
public BaseORMCommandSettings(string commandText, object parameters = null, IDbTransaction transaction = null, int? commandTimeout = null,
CommandType? commandType = null, CancellationToken cancellationToken = default(CancellationToken))
{
this.CommandText = commandText;
this.Parameters = parameters;
this.Transaction = transaction;
this.CommandTimeout = commandTimeout;
this.CommandType = commandType;
this.CancellationToken = cancellationToken;
}
}
public class DapperCommandSettings : BaseORMCommandSettings//dapper cmd impl
{
public CommandFlags Flags { get; private set; }
public DapperCommandSettings(string commandText, object parameters = null, IDbTransaction transaction = null, int? commandTimeout = null,
CommandType? commandType = null, CancellationToken cancellationToken = default(CancellationToken), CommandFlags flags = CommandFlags.Buffered)
:base(commandText, parameters, transaction, commandTimeout, commandType, cancellationToken)
{
this.Flags = flags;
}
}
public interface ICustomORM //base interface, for now have only generic Read
list method
{
IEnumerable<T> Read<T>(BaseORMCommandSettings cmd);
}
public class DapperORM : ICustomORM //my own dapper ORM wrapper implentation
{
private readonly IDbConnection con;
public DapperORM(IDbConnection con)
{
this.con = con;
}
public IEnumerable<T> Read<T>(BaseORMCommandSettings cmd)
{
var cmdDapper = cmd as DapperCommandSettings;
var dapperCmd = new CommandDefinition(cmdDapper.CommandText, cmdDapper.Parameters, cmdDapper.Transaction,
cmdDapper.CommandTimeout, cmdDapper.CommandType, cmdDapper.Flags,
cmdDapper.CancellationToken);
return con.Query<T>(dapperCmd);
}
}
ご協力いただきありがとうございます。
[SO]は、コードレビューに関するものではありません、おそらくあなたはhttps://codereview.stackexchange.com/ – Richard
感謝のに尋ねるべきあなたの答えに...。実際には私が使っている技術をかなり簡単に素早く変更できるコードを書くために、自分のコード実装に関する誰かの意見を聞きたいのですが...これはコードレビューではなくデザインに関するものです。 – user2214626