Как удалить циклическую зависимость в приложении MVC - PullRequest
0 голосов
/ 09 декабря 2018

Я уверен, что этот вопрос задавался по-разному, я просто не могу найти тот, который отвечает на мой конкретный вопрос.

Я упросту этот вопрос до одной таблицы базы данных.

Итак, в моем приложении MVC у меня есть проект класса DAL, который обращается к базе данных Access, содержащей таблицу Customer.У меня есть проект класса BLL, который общается с DAL и запрашивает список клиентов. Затем у меня есть проект MVC, и именно здесь обнаруживается отсутствие у меня знаний о MVC.У меня есть Модель, содержащая класс Customer.У меня есть ссылки на проект MVC как в DAL, так и в BLL, потому что они должны знать о классе Customer в prder, чтобы вернуть ему объект Customer.Однако я не могу ссылаться на BLL в своем проекте MVC, потому что он создает циклическую ссылку.

Раньше я просто вытащил все свои объекты в свой собственный проект, чтобы все три могли ссылаться на него.Тем не менее, я понимаю, что 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 должны знать о классе клиента, который является моим M MVC, но поскольку они 'оба ссылаются на проект MVC, содержащий модель, проект MVc не может ссылаться на бизнес-логику.

Есть идеи, как я "должен" конструировать этот код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...