c# – 存储库模式和本地化查找表

c# – 存储库模式和本地化查找表,第1张

概述我试图抓住模式存储库的想法,并尝试在我已经设置的数据库结构中实现它.我现在正在努力获得使用查找表的最佳实践.我已经创建了一个测试项目,这是我的数据库模型: 您可以看到我有三个查找表:Lookup,Language和LookupLanguage.语言表只包含语言. 查找表包含整个模型中使用的不同类型. LookupLanguage将两个表链接在一起: 我已经创建了一个新项目,所有模型都是1到1的数据 我试图抓住模式存储库的想法,并尝试在我已经设置的数据库结构中实现它.我现在正在努力获得使用查找表的最佳实践.我已经创建了一个测试项目,这是我的数据库模型:

您可以看到我有三个查找表:Lookup,Language和LookupLanguage.语言表只包含语言.

查找表包含整个模型中使用的不同类型.

LookupLanguage将两个表链接在一起:

我已经创建了一个新项目,所有模型都是1到1的数据库表:

我还创建了一个通用存储库和一个通用的CrudService接口:

public interface ICrudService<T> where T : IsActiveEntity,new(){    int Create(T item);    voID Save();    voID Delete(int ID);    T Get(int ID);    IEnumerable<T> GetAll();    IEnumerable<T> Where(Expression<Func<T,bool>> func,bool showDeleted = false);    voID Restore(int ID);}

现在,根据以下帖子:When implementing the repository pattern should lookup value / tables get their own Repository?,存储库应该隐藏底层数据库层.所以我认为我需要一个服务和/或存储库的新实现来获取查找,但是,我在哪里必须告诉我需要哪种语言进行查找?

让我们从公司的状态(新的,接受的,拒绝的)作为例子.

公司模式如下:

public partial class Company : IsActiveEntity{    [required]    [MaxLength(50)]    public string Companyname { get; set; }    public System.GuID StatusGuID { get; set; }    [ForeignKey("StatusGuID")]    public virtual Lookup Status { get; set; }}

我想我不需要单独实现存储库?
但我需要一个单独的实现CompanyService.

interface ICompanyService : ICrudService<Company>{    Iqueryable<LookupLanguage> GetStatuses(GuID languageguID);    LookupLanguage GetStatus(GuID statusguID,GuID languageguID);}

这是正确的方法,还是我错过了什么?

解决方法 由于您的表架构和维护角度,在您的案例中创建一个更好的选项中的Generic LookupRepository.

由于名称ICompanyService,我不确定您是使用Service Locator和Repository模式还是仅使用Repository.但无论如何,我同意存储库不应该总是代表表1-1,但他们大多数时间都这样做.

您提供的SO链接具有与您的不同的表结构.您有一个通用的查找表,而链接每个查找都有一个单独的表.如果您有单独的表,那么将查找存储库方法与实体存储库一起使用是有意义的,因为您将有一个单独的代码来获取每个查找的数据(因为它们具有不同模式的单独表).

但在您的情况下,您有一个表存储每种语言的所有查找类型,并且有一个LookupRepository可以返回基于Language和LookupType的所有各种类型的查找.如果在单独的实体存储库中创建每个查找方法(如CompanyRepository中的GetStatuses和ContactRepository中的GetStatuses),则必须为每个存储库重复方法中的逻辑.

想想你是否改变了查找表的模式(比如添加一个列)并且你想要测试所有使用查找的地方,如果你在整个地方都有查找方法,那将是一场噩梦,如果你在LookupRepository中有一个方法就很容易.

interface ILookupService : ICrudService<Lookup>{    Iqueryable<Lookup> GetStatuses(GuID languageguID,LookupType lookupType);    Lookup GetStatus(GuID statusguID,GuID languageguID,LookupType lookupType);}
总结

以上是内存溢出为你收集整理的c# – 存储库模式和本地化查找表全部内容,希望文章能够帮你解决c# – 存储库模式和本地化查找表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1251768.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存