c# - 我可以创建一个通用接口(interface)吗

标签 c#

我有以下称为 IAccountService 的接口(interface)。我也有完全相同的 Product 和 Package 等接口(interface)。

public interface IAccountService
    {
        void AddOrUpdate(Account account);
        void Delete(Account account);
        bool DoesTableExist();
        Account Get(Account account);
        Account Get(string pk, string rk);
        IEnumerable<Account> Get();
        IEnumerable<Account> Get(string pk);
        string GetOptions(string pk, string rk);
        IEnumerable<AccountDetail> ShowDetails(ref string runTime);
        IEnumerable<AccountSummary> ShowSummary(ref string runTime);
        void ValidateNoDuplicate(Account account);
        void ValidateNoProducts(Account account);
    }

我创建了一些通用方法,但我想知道我是否也可以创建一个通用接口(interface)。如果是这样,那么我将如何调用它以及如何更改上述内容以使其通用。目前我使用这个接口(interface)如下:

public class AccountService : BaseService, IAccountService

更新 1

感谢所有建议。我仍然有问题的一件事是 AccountDetail 和 AccountSummary 类。我在想也许这些应该是子类。但是我该如何处理这些命名呢?我将不得不采用类名,附加详细信息,然后在界面中使用它。这可能吗?

更新 2

下面是详细类和摘要类的示例:

public class AccountDetail
{
    public string Title { get; set; }
    public string Product { get; set; }
}
public class AccountSummary
{
    public string Title { get; set; }
    public Int32? ProductCount { get; set; }
    public string PartitionKey{ get; set; }
    public string RowKey { get; set; }
    public DateTime? Modified { get; set; }
    public string ModifiedBy { get; set; }
}

以上类用于报告。我认为它们可能不应该是模型存储库的一部分。也许他们应该在另一个地方。

关于裁判评论。 ref 在那里是因为在我的 Controller 中我调用了以下方法:

_account.ShowDetails(ref runTime);

ShowDetails 的输出是一个详细信息列表,runTime 引用随运行报告所需的时间更新。

最佳答案

你总是可以这样做:

public interface IService<T>
{
    bool TableExists { get };

    void AddOrUpdate(T item);
    void Delete(T item);
    T Get(T item);
    T Get(string pk, string rk);
    // etc
}

public class AccountService : BaseService, IService<Account>

对于 Detail/Summary 方法,我会将它们分解到一个单独的位置(可能是某种映射器类)。

关于c# - 我可以创建一个通用接口(interface)吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8576816/

相关文章:

c# - 从图像生成视频并添加音频时,视频无法播放

c# - 如何将公共(public)属性添加到要在 web.config 中配置的自定义 SqlMembership Provider

c# - Windows 手机 REST API

c# - 如何在 SQL Server 数据库中保存文本和图像的组合

c# - 使用父级从组件 Blazor 调用方法

c# - Unity 2D 本地面不平坦时,为什么我的角色不会跳跃?

c# - 如何在 WCF soap 响应中实现安全 token ?

c# - 公开 MVVM 中内置的用户控件的属性

c# - EF4 Code First 数据库生成

c# - 实时数据库不接受十进制值