Я уверен, что этот вопрос задавался по-разному, я просто не могу найти тот, который отвечает на мой конкретный вопрос.
Я упросту этот вопрос до одной таблицы базы данных.
Итак, в моем приложении 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 не может ссылаться на бизнес-логику.
Есть идеи, как я "должен" конструировать этот код?