【发布时间】:2014-05-09 21:30:15
【问题描述】:
我总是遇到同样的问题,但我不知道该怎么做... 我在数据库中有很多表,每个表都有很多类,它们管理着每个表(orm)。我还有一个像“路由器”这样的基类控制器,它管理所有的表类。
所以,我的问题是,什么更好?在每个代表表的类中创建数据库连接的实例,还是在路由器类中创建实例并传递它?
选项 1:在每个类中创建新实例。
public class Table1Controller : Table1Mapp
{
private Database myDatabaseInstance { get; set; }
public Table1Controller()
{
myDatabaseInstance = new Database("Connection String here");
}
...
}
public class Table2Controller : Table2Mapp
{
private Database myDatabaseInstance { get; set; }
public Table2Controller()
{
myDatabaseInstance = new Database("Connection String here");
}
...
}
public class DatabaseRouterController
{
private Table1 _table1;
public Table1 table1
{
get { return this._table1 ?? (this._table1 = new Table1()); }
private set { this._table1 = value };
}
private Table2 _table2;
public Table2 table2
{
get { return this._table2 ?? (this._table2 = new Table2()); }
private set { this._table2 = value };
}
}
选项 2:只创建一次对象并传递它。
public class Table1Controller : Table1Mapp
{
private Database myDatabaseInstance;
public Table1Controller(Database myDatabaseInstance)
{
this.myDatabaseInstance = myDatabaseInstance;
}
...
}
public class Table2Controller : Table2Mapp
{
private Database myDatabaseInstance;
public Table2Controller(Database myDatabaseInstance)
{
this.myDatabaseInstance = myDatabaseInstance;
}
...
}
public class DataBaseInstanceClass
{
protected Database myDatabaseInstance { get; set; }
public DataBaseInstanceClass()
{
myDatabaseInstance = new Database("Connection String here");
}
}
public class DatabaseRouterController : DataBaseInstanceClass
{
private Table1 _table1;
public Table1 table1
{
get { return this._table1 ?? (this._table1 = new Table1(base.myDatabaseInstance)); }
private set { this._table1 = value };
}
private Table2 _table2;
public Table2 table2
{
get { return this._table2 ?? (this._table2 = new Table2(base.myDatabaseInstance)); }
private set { this._table2 = value };
}
}
任何进一步的建议将不胜感激...... 提前致谢!
【问题讨论】:
-
您是否正在构建自己的 ORM?
-
所有这些控制器的目的是什么?
-
不,我已经映射了我的数据库。实际上我正在使用 PetaPoco。这些控制器用于提供基于模型 MVC 的功能。
-
一般来说,最好每次都重用同一个类实例,只要这样做不会与类的预期使用方式相矛盾。
-
@JorgeCode 我认为 Repository 和 Unit Of Work 模式更适合数据访问场景。
标签: c# class design-patterns instantiation multiple-instances