gpt4 book ai didi

asp.net-mvc-3 - 如何在 ASP.NET MVC 3 中分离代码(干净的代码分离)?

转载 作者:行者123 更新时间:2023-12-01 01:12:54 24 4
gpt4 key购买 nike

我现在只想知道如何使用 EF 在 MVC3 中以正确的方式分离代码

根据我的项目结构。

演示 -> View 和 Controller

域 --> 模型(业务实体)

数据 --> RepositoryBase、IRepository、ApplicationDbContext

服务 --> 第三方服务(PayPal、SMS)或应用服务

ApplicationDbContext 需要模型作为引用。

public sealed class ApplicationDbContext : DbContext
{

public DbSet<CountryModel> Country { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}

1. 那么将 DbContext 放在 Data 中好吗?还是我必须将其移至 Domain ?

现在在 Controller 中我必须编写代码
using (ApplicationDbContext db = new ApplicationDbContext())
{
var countryRepository = new Repository<Country>(db);

if (ModelState.IsValid)
{
countryRepository.insert(country);
db.SaveChanges();
}
}

有什么方法可以将此代码块分离为任何业务层/服务层?

所以我们只需从 Controller 调用该层并传递特定的业务实体以执行其余操作。

我想做 PL --> BLL --> DLL 方法使用 MVC 3 & EF 吗?

请建议我正确的方法。

最佳答案

So is it good to place DbContext in Data ?



是的,它属于它。

Now in Controller I have to write a code



不,您绝对不应该在 Controller 中编写这样的代码,因为您现在正在使您的 Controller 与您正在使用的特定数据访问技术(在您的情况下为 EF)强耦合。更糟糕的是,您将无法单独对 Controller 进行单元测试。

我建议您对接口(interface)中的实体进行抽象操作(顺便说一句,您已经在问题中提到了它 - IRepository)。现在您的 Controller 可以将存储库作为依赖项:
public class CountriesController: Controller
{
private readonly IRepository repository;
public CountriesController(IRepository repository)
{
this.repository = repository;
}

public ActionResult Index(int id)
{
Country country = this.repository.Get<Country>(id);
return View(country);
}


[HttpPost]
public ActionResult Index(Country country)
{
if (ModelState.IsValid)
{
this.repository.Insert(country);
return RedirectToAction("Success");
}

return View(country);
}
}

现在你所要做的就是配置你最喜欢的依赖注入(inject)框架,将这个 IRepository 的具体实现注入(inject)到 Controller 构造函数中。在您的情况下,此特定实现可能是某个实现 IRepository 接口(interface)并使用 ApplicationDbContext 的类。里面。

这样,您就可以从 Controller 中抽象出数据访问逻辑。

关于asp.net-mvc-3 - 如何在 ASP.NET MVC 3 中分离代码(干净的代码分离)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14209961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com