在ASP.NET MVC 5和EF 6.2中,最佳架构模式是使用分层架构模式,将应用程序分为多个层级,每个层级负责不同的功能。
以下是一个包含代码示例的解决方案,展示了如何使用分层架构模式来组织ASP.NET MVC 5和EF 6.2应用程序。
在数据访问层中,我们使用EF 6.2来定义实体类和数据库上下文,并实现与数据库的交互。
public class ApplicationDbContext : DbContext
{
public DbSet Products { get; set; }
// 其他实体类的DbSet
// 数据库连接字符串的配置
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("your_connection_string");
}
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
// 其他属性
}
public interface IProductRepository
{
IEnumerable GetAllProducts();
Product GetProductById(int id);
void AddProduct(Product product);
void UpdateProduct(Product product);
void DeleteProduct(int id);
}
public class ProductRepository : IProductRepository
{
private readonly ApplicationDbContext _context;
public ProductRepository(ApplicationDbContext context)
{
_context = context;
}
public IEnumerable GetAllProducts()
{
return _context.Products.ToList();
}
public Product GetProductById(int id)
{
return _context.Products.Find(id);
}
public void AddProduct(Product product)
{
_context.Products.Add(product);
_context.SaveChanges();
}
public void UpdateProduct(Product product)
{
_context.Entry(product).State = EntityState.Modified;
_context.SaveChanges();
}
public void DeleteProduct(int id)
{
var product = _context.Products.Find(id);
_context.Products.Remove(product);
_context.SaveChanges();
}
}
在业务逻辑层中,我们定义了服务类来协调数据访问层和表示层之间的交互。
public interface IProductService
{
IEnumerable GetAllProducts();
Product GetProductById(int id);
void AddProduct(Product product);
void UpdateProduct(Product product);
void DeleteProduct(int id);
}
public class ProductService : IProductService
{
private readonly IProductRepository _repository;
public ProductService(IProductRepository repository)
{
_repository = repository;
}
public IEnumerable GetAllProducts()
{
return _repository.GetAllProducts();
}
public Product GetProductById(int id)
{
return _repository.GetProductById(id);
}
public void AddProduct(Product product)
{
_repository.AddProduct(product);
}
public void UpdateProduct(Product product)
{
_repository.UpdateProduct(product);
}
public void DeleteProduct(int id)
{
_repository.DeleteProduct(id);
}
}
在表示层中,我们使用ASP.NET MVC 5来构建用户界面,并调用业务逻辑层的服务类来处理用户请求。
public class ProductController : Controller
{
private readonly IProductService _service;
public ProductController(IProductService service)
{
_service = service;
}
public ActionResult Index()
{
var products = _service.GetAllProducts();
return View(products);
}
public ActionResult Details(int id)
{
var product = _service.GetProductById(id);
return View(product);
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
_service.AddProduct(product);
return RedirectToAction("Index");
}
return View(product);
}
public ActionResult Edit(int id)
{
var product = _service.GetProductById(id);
return View(product);
}
[HttpPost]
public ActionResult Edit(Product product)
{
if (ModelState.IsValid)
{
_service.UpdateProduct(product);
return RedirectToAction("Index");
}
return View(product);
}
public ActionResult Delete(int id)
{
var product = _service.GetProductById(id