【发布时间】:2022-01-20 18:22:39
【问题描述】:
我们是一个小型开发团队。 我们使用 ASP.NET 进行开发,并且开始使用通用控制器和服务。
我们的目标是为重复的事情找到可靠的方法。
我们问自己的是,在数据模型中进行一些转换以允许我们重用我们知道正在工作的函数是否是个好主意?
示例:我们有一个组合框,我们想要管理显示和搜索。它总是相同的和多余的。
这是我的课
[Table("stage.Test")]
public partial class Test : IBaseEntity, ICombobox
{
public virtual Product Product { get; set; }
public string nom { get; set; }
public string prenom { get; set; }
public string title { get; set; }
[NotMapped]
public virtual string AffichageCombobox => nom + prenom;
[NotMapped]
public virtual string TexteRecherche => Product.Gabarit.Description;
}
如您所见,我有两列带有 [NotMapped] 标签。这些是界面 ICombobox
中的列 public interface ICombobox
{
string AffichageCombobox { get;}
string TexteRecherche { get; }
}
这是我使用重定向到其他列的两列之一的第一个服务。 [我们使用模型中的“AffichageCombobox”列]
public List<ComboboxViewModel> GetComboboxViewModel(int? id, bool actifseulement, string text)
{
var query = _requestDatabaseService.GetComboboxQuery<T>(id, actifseulement, text);
var list = query.Select(table => new ComboboxViewModel
{
Id = table.Id,
AffichageCombobox = table.DateHFin == null ? table.AffichageCombobox : table.AffichageCombobox + " (inactif)"
}).ToList();
return list;
}
这是 RequestDatabaseService [我们使用模型中的“TexteRecherche”列]
public List<T> GetComboboxQuery<T>(int? id, bool actifseulement, string text) where T : class, IBaseEntity, ICombobox
{
text = text.ToLower();
var list = _dbContext.Set<T>()
.If(id.HasValue,
q => q.Where(x => x.Id == id))
.If(actifseulement,
q => q.Where(x => x.DateHFin == null))
.If(text != "",
q => q.Where(x => x.TexteRecherche.ToLower() == text))
.ToList();
return list;
}
如您所见,我正在使用一个接口来添加列以将正确的列重定向到我的数据模型,以避免覆盖我的两列方法。
这是一个好主意,一个好习惯吗?
如果我们想做泛型函数,但列的调用方式不同,您认为最佳做法是什么?
谢谢!
【问题讨论】:
-
一切都很糟糕。 1) 为模型添加了 UI 元素。 2)
TexteRecherche不可转换为 SQL,过滤器将失败。 3) 函数返回完整实体列表,但您只需要数据库中的两个字段。
标签: asp.net linq generics web optimization