我确定这个问题已经以许多不同的方式提出,我只是找不到一个能回答我的特定问题的人。
我将简化为一个数据库表。
因此,在我的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项目无法引用业务逻辑。
有什么主意我应该如何构建此代码?