gpt4 book ai didi

c# - 重构时机成熟——.NET 依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 17:17:41 26 4
gpt4 key购买 nike

与大多数人一样,我已经掌握了 Entity Framework 的某些来龙去脉。其中之一就是上下文的生命周期。我正在使用一个存储库,并决定上下文将在请求的长度内存在。因此,无论在何处使用该存储库,都需要从 Web 层注入(inject)上下文。

我已经写了一些我确信可以重构的代码(事实上,绝对可以!)。那么基于上述概念,您将如何优化以下存储库助手?

public class RepositoryHelper
{

public static CountryRepository GetCountryRepository() {
return new CountryRepository(HttpContext.Current.GetObjectContext());
}

public static CurrencyRepository GetCurrencyRepository()
{
return new CurrencyRepository(HttpContext.Current.GetObjectContext());
}

public static SettingRepository GetSettingRepository()
{
return new SettingRepository(HttpContext.Current.GetObjectContext());
}

}

存储库非常简单,看起来像

public class CountryRepository
{

private Context _context = null;
public CountryRepository(Context context)
{
_context = context;
}

public Country GetById(int id)
{
// Would return a country
}

public IEnumerable<Country> All()
{
// Would return a list of countries
}

}

最佳答案

这里的挑战是您构建的不是存储库模式意义上的存储库。存储库模式的一个目标是从问题域中抽象出数据访问层的实现。它是通过一个存储库完成的,该存储库的行为类似于域对象的内存中集合,您可以使用它执行正常的 CRUD 功能,通常还可以执行一些更具体的操作,即 GetByID(id)。

存储库随后对应用程序隐藏了实际的持久层,实际上允许您在不影响应用程序的情况下更改该层,即您可以先将数据存储在平面文件中,然后再转移到 RDBMS。

您通常会创建一个接口(interface)来描述您的存储库需要实现的方法,并使用该接口(interface)作为类型实际传递存储库实例。这是抽象,该接口(interface)在存储库的所有可能具体实现中都是通用的,但您的应用程序(在某种程度上)忽略了实际使用的接口(interface)。

我建议退后一步,再次查看存储库模式,看看您是否需要它。确保您不只是为了它而实现它,并且您没有不必要地增加应用程序的复杂性。一旦您确定了数据访问方法,您就可以了解如何最好地利用您拥有的 EF 上下文。

关于c# - 重构时机成熟——.NET 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6292132/

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