gpt4 book ai didi

c# - 是否可以在一个地方概括此代码?

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:17 24 4
gpt4 key购买 nike

我有以下模型:

public class Customer
{
public int Id {get; set;}
public int GroupId {get; set;}
public int Number {get; set;}
public string Name {get; set;}
}

我所有的域模型都包含 GroupId 属性。用户被分配了一个 GroupId,当他创建一个实体时,他的 GroupId 与该实体一起保存。用户只能对那些拥有他的 GroupId 的实体执行 CRUD 操作。

所以目前,在我的服务层,基于 PredicateBuilder 扩展,我有一个在加载实体时添加 GroupId 的方法:

public Customer Get(Expression<Func<Customer, bool>> where)
{
var addGroup = groupRepository.Get(EntityType.Customer).AddGroup;
if (addGroup)
where = where.And(x => x.GroupId == user.GroupId);

return customerRepository.Get(where);
}

每个 Get 方法都执行上述操作。

有没有办法将上述代码集中在一个地方,而不必在我拥有的所有服务的每个 Get 方法中重复代码?

最佳答案

All my domain models include the GroupId property

那么您所有的领域模型都应该实现一个接口(interface)(我们称它为 IHasGroup),该接口(interface)定义了 GroupId 属性。

然后,分解出您的代码应该很容易:

public Customer Get(Expression<Func<Customer, bool>> where)
{
return GetHelper(EntityType.Customer, where, customerRepository.Get);
}

public static T GetHelper<T>(EntityType type, Expression<Func<T, bool>> where,
Func<Expression<Func<T, bool>>, T> repositoryAccessor)
where T : IHasGroup
{
var addGroup = groupRepository.Get(type).AddGroup;
if (addGroup)
where = where.And(x => x.GroupId == user.GroupId);

return repositoryAccessor(where);
}

关于c# - 是否可以在一个地方概括此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29554939/

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