如何将数据访问层分成更小的类

时间:2017-09-23 22:59:11

标签: c# data-access-layer 3-tier

我有3层应用程序的设计问题。通常我的数据库层只有这样一个类:

public class DA
{
    string _connString = "";

    public DA()
    {
         _connString = ConfigurationManager.ConnectionStrings["MyConnString"].ToString();

    }
    public DA(string connString)
    {
        _connString = connString;
    }

    private SqlConnection GetConnection()
    {
       ...
    }

    public Employee GetEmployee(int idEmployee)
    {
        ...
    }
    public Whatever GetWhatever(int idWhatever)
    {
        ...
    }

    ...

但是现在我有一个非常大的项目,我想将DA类分成更小的类,如DA_Employee,DA_Whatever等。

我想只实例化一次DA并访问其他类:

DA db = new DA(connString);

db.Employee.GetEmployee(12);
db.Whatever.GetWhatever(89);
db.Whatever.UpdateWhatever(89, "newname");

我不希望有这样的事情:

DA db = new DA(connString);
DA_Employee dbEmployee = new DA_Employee(connString);
DA_Whatever dbWhataver = new DA_Whatever(connString);

我想我可以在我的主构造函数中实例化我的所有类,并且有一些属性可以访问它们吗?

如何授予GetConnection()所有类的访问权限?

任何帮助和参考表示赞赏。 谢谢!

1 个答案:

答案 0 :(得分:2)

是的,你使这些类成为DA的属性。

main()

将SqlConnection作为构造函数依赖项传递。

def foo():
    sys.stdout = open('x.out', 'a')
    sys.stderr = open('x.err', 'a')
    try:
        print("this goes to x.out.")
        print("this goes to x.err.", file=sys.stderr)
        raise ValueError('this must go to a.err.')
    except:
        traceback.print_exc() 
        raise # optional

及其用法

public interface IRepository<T>
{
    T GetById(int id);
}

public class EmployeeRepository : IRepository<Employee>
{
    private SqlConnection sqlConn;

    public EmployeeRepository(SqlConnection sqlconn)
    {
        this.sqlConn = sqlConn;
    }

    public Employee GetById(int id)
    {
        return new Employee();
    }
}