gpt4 book ai didi

c# - 我担心我添加了太多接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 04:37:46 26 4
gpt4 key购买 nike

我正在构建我的领域模型并继续重构它。正如我所做的那样,我发现我喜欢接口(interface),因为它允许我基于它们的接口(interface)为具体类型创建可重用的方法/ Controller / View 。但是,我发现每次向我的域实体之一添加新属性时,我都会创建一个接口(interface)。

例如,我有一个 MemberStatus 对象,它继承自抽象的 Entity 对象,后者又实现了 IIdentifiableEntity 接口(interface),这意味着它具有一个 Id 属性。 MemberStatus 还实现了 INamedEntity 接口(interface),意味着它具有 Name 属性,IOrderedEntity 接口(interface)意味着它具有 DisplayOrder 属性,IHasMembers 接口(interface)意味着它有一个集合成员对象。这是代码:

public class MemberStatus : Entity, INamedEntity, IOrderedEntity, IHasMembers
{
public string Name { get; set; }
public float DisplayOrder { get; set; }
public ICollection<Member> Members { get; set; }
}

public abstract class Entity : IIdentifiableEntity
{
public int Id { get; set; }
}

public interface IIdentifiableEntity
{
int Id { get; set; }
}

public interface INamedEntity
{
string Name { get; set; }
}

public interface IOrderedEntity
{
float DisplayOrder { get; set; }
}

public interface IHasMembers
{
ICollection<Member> Members { get; set; }
}

现在,这似乎工作得很好,因为我有其他类似的对象,例如 MemberPositionMemberTeam,它们都实现了这些相同的接口(interface),我可以使用我的存储库方法和 Controller 操作使用实现这些接口(interface)并具有大量代码重用的泛型。

但是,我担心的是,每次向具体对象添加新属性时,继续添加简单的单一属性接口(interface)是否合适。例如,假设我想添加一个 bool Enabled 属性...我应该继续创建一个 IEnabled 接口(interface)吗?我问的原因是一些使用泛型的 Controller “初始化器”变得很长,如下面的代码行所示。这是正常的最佳做法吗?

public abstract class OrderedCrudController<TEntity> : CrudController<TEntity> where TEntity : Entity, INamedEntity, IOrderedEntity, IHasMembers, new()

最佳答案

您正在使用接口(interface)这一事实是一件好事。但是,您应该问问自己,如果我创建一个 IEnabled 接口(interface),我是否会仅通过该接口(interface)引用我的类?即,在某些情况下,我会完全通过接口(interface)公开的单个属性与我的类进行交互吗?

此外,您能否考虑与此 IEnabled 接口(interface)的多个实现进行交互的上下文?

如果这两个问题的答案都是“否”,那么界面的作用就很小。

话虽如此,请不要太担心这个!它的危害很小。

关于c# - 我担心我添加了太多接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8944229/

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