C# 是否每次都将类的实例作为参数传递或创建新实例?

C# 是否每次都将类的实例作为参数传递或创建新实例?,c#,class,design-patterns,instantiation,multiple-instances,C#,Class,Design Patterns,Instantiation,Multiple Instances,我总是有同样的问题,我不知道什么是最好的。。。 我在一个数据库中有许多表,每个表都有许多类,它们管理着每个表(orm)。我还有一个像“router”这样的基类控制器,它管理所有的表类 所以,我的问题是,什么更好?在表示表的每个类中创建数据库连接的实例,还是在router类中创建实例并传递 选项1:在每个类中创建新实例 public class Table1Controller : Table1Mapp { private Database myDatabaseInstance { get

我总是有同样的问题,我不知道什么是最好的。。。 我在一个数据库中有许多表,每个表都有许多类,它们管理着每个表(orm)。我还有一个像“router”这样的基类控制器,它管理所有的表类

所以,我的问题是,什么更好?在表示表的每个类中创建数据库连接的实例,还是在router类中创建实例并传递

选项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 }; 
    }
}
如有任何进一步建议,将不胜感激。。。
提前谢谢

我要做的是创建一个DAL(数据访问层),该层可以从上述任何控制器访问,并且只需将正在进行的工作包装到数据库层,这样就不必费心传递数据库连接

此外,当您需要访问数据库中的新表或功能时,重构代码可以节省大量时间


我建议你研究一下你应该阅读的模式。它提倡使用选项2,因为它可以使您的各种类能够连接到传入的任何数据库,而不是锁定到特定的数据库。

您是否正在构建自己的ORM?所有这些控制器的用途是什么?不,我已经映射了我的数据库。实际上我用的是PetaPoco。这些控制器是为了提供基于MVC模型的功能。一般来说,每次重用同一个类实例更好,只要这样做不会与类的预期使用方式相矛盾。@JorgeCode我认为存储库和工作单元模式更适合数据访问场景。谢谢我的朋友。似乎存储库模式与我要查找的完全匹配。