如何重构重复IDbConnection.open \ close?

时间:2017-02-18 16:00:57

标签: refactoring dapper dbconnection

也许是它的愚蠢问题,但我迷惑了自己。 我使用Dapper和Autofac(DI),在我的业务层,我总是使用以下结构:

db.Open(); //db is IDbConnection instance
db.InsertOrDeleteOrUpdate(...)
db.Close();

是否通过委托方法隐藏db.Open()和db.Close()的好方法?例如:

dbHelper.do(db => db.InsertOrDeleteOrUpdate(...));

在这种情况下你做了什么?

1 个答案:

答案 0 :(得分:0)

冗余代码不是此代码中的唯一问题。您的代码正在针对每个操作访问数据库。如果您的DBServer部署在远程计算机上,这将达到性能。请参阅this answer。

您是否遇到过UnitOfWork模式?这是处理更高级别连接的非常好的解决方案。

Connection Factory是另一个很好的选择,它可以与UnitOfWork一起使用。但我个人更喜欢UnitOfWork。

请参阅this答案,了解UnitOfWork的示例代码。

从上面选择后,通过每个请求使用"连接可以轻松减少冗余。图案。您需要在代码中识别集中位置以创建DalSession以及在何处处置它。