如何在MVC应用中删除循环依赖项

时间:2018-12-09 18:46:20

标签: model-view-controller reference circular-dependency 3-tier

我确定这个问题已经以许多不同的方式提出,我只是找不到一个能回答我的特定问题的人。

我将简化为一个数据库表。

因此,在我的MVC应用程序中,我有一个DAL类项目,该项目与包含Customer表的Access数据库进行通信。 我有一个BLL类项目,该项目与DAL交谈并请求客户列表 然后,我有了我的MVC项目,这就是我缺乏MVC知识的地方。我有一个包含Customer类的模型。我在DAL和BLL中都引用了MVC项目,因为他们需要了解prder中的Customer类才能将Customer对象返回给它。但是,我无法在我的MVC项目中引用BLL,因为它会创建循环引用。

以前,我只是将我所有的对象拉到自己的项目中,以便所有三个对象都可以引用它。但是,我对MVC的理解是对象组成了模型。

我可能还没有很好解释,所以这里是一些代码:-

DAL

        public List<Customer> ShowAllCustomers()
    {
        OleDbCommand cmd = new OleDbCommand();
        DataTable customers = new DataTable();

        cmd.CommandText = "SELECT * From Customers";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = _connection;

        customers.Load(cmd.ExecuteReader());
        List<Customer> allCustomers = customers.AsEnumerable().Select(m => new Customer()
        {
            CustomerId = m.Field<int>("Customer"),
            CompanyCustomer = m.Field<bool>("CompanyCustomer"),
            CustomerName = m.Field<string>("MemberName"),
            AddressLine1 = m.Field<string>("AddressLine1"),
            AddressLine2 = m.Field<string>("AddressLine2"),
            Town = m.Field<string>("Town"),
            County = m.Field<string>("County"),
            Postcode = m.Field<string>("Postcode"),
            TelephoneNumber = m.Field<string>("TelephoneNo"),
            MobileNumber = m.Field<string>("MobileNo"),
            EmailAddress = m.Field<string>("EmailAddress"),
            DefaultDiscount = m.Field<int>("DefaultDiscount"),
        }).ToList();
        return allCustomers;
    }

业务逻辑

        public List<Customer> ShowAllCustomers()
    {
        return _dbCRUD.ShowAllCustomers();
    }

MVC>模型

    public class Customer
{
    private int _customerId;
    private bool _companyCustomer;
    private string _customerName;
    private string _addressLine1;
    private string _addressLine2;
    private string _town;
    private string _county;
    private string _postcode;
    private string _telephoneNumber;
    private string _mobileNumber;
    private string _emailAddress;
    private decimal _defaultDiscount;
// Plus a load of sets and Gets

因此DAL和BLL都需要了解客户类,这是我对MVC的理解,但是由于他们都在引用包含模型的MVC项目,因此MVc项目无法引用业务逻辑。

有什么主意我应该如何构建此代码?

0 个答案:

没有答案