c# - 实现不必要的接口(interface)成员或创建新接口(interface)?

标签 c# interface

我一直在思考的通用架构问题

如果我有一个接口(interface)和 5 个实现该接口(interface)的类,但一个类不需要实现其中一个接口(interface)成员,我应该:

  1. 为该类创建一个单独的接口(interface)
  2. 实现 原始界面,但将方法留空
  3. 实现原来的接口(interface),对不需要的方法做一些标记 (例如过时的属性)

一个例子是,如果我有一个接口(interface) IRepository 和 5 个实体的 5 个独立存储库,但对于一个实体我不希望能够更新记录。

我目前支持选项 3,但过时的描述似乎不正确。

有什么想法吗?

顺便说一句,我知道这是相当广泛和客观的,但我想听听一些关于最佳方法的意见。

最佳答案

您可以创建另一个接口(interface)并继承您实际使用的接口(interface)

public interface IReadOnlyRepository
{
    void Read();
}

public interface IRepository : IReadOnlyRepository
{
    void Write();
}

然后您可以为您不希望完整实现的类使用“基础”接口(interface)IReadOnlyRepository

或者,当用户试图从未实现 C 的类中调用 C 时,使用编号 3。抛出 NotImplementedException/InvalidOperationException 或其他相关异常。

希望对您有所帮助。

关于c# - 实现不必要的接口(interface)成员或创建新接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18762268/

相关文章:

c# - ASP.NET 模型绑定(bind)器无法绑定(bind)包含集合的复杂对象的集合

c# - 将 C# 命令行应用程序转换为 Windows 服务

c# - 我怎样才能避免双重类型转换?

java - 接口(interface)扩展等同于继承吗? ( java )

c# - 如何在异常处理中使用接口(interface)

c# - 具有多个系列的 MS 图表上的工具提示标签错误

c# - 在 Amazon S3 放置请求 (request.AddHeader) 上设置过期 header 时 AppHarbor 生成错误

c# - 如何避免特定字符串模式被 Regex.replace () 替换

java - 泛型和接口(interface)//我必须一起使用它们吗?

linux - 子接口(interface)的 puppet 网络模块