【问题标题】:What should be the better way to design data layer, multiple interfaces or single interface when some functions are shared?当某些功能共享时,设计数据层、多接口或单接口的更好方法应该是什么?
【发布时间】:2011-08-25 17:45:53
【问题描述】:

我正在构建的解决方案中的数据存储是数据库、队列和 Csv 文件。

其中一些功能在它们中是通用的,例如CSV 文件和 DB 都具有 GetNames() 方法 - 名称信息位于 CSV 和 DB 中,其中某些方法仅对 DB 有效,对 CSV 无效,例如 GetAddressOfPerson(Person person) 是一种适用于 DB 的方法,因为 DB 包含地址信息,但不适用于 CSV 文件,因为它们没有地址信息。

另一个例子是属性。一些属性是常见的,例如bool IsTestMode 对于两个 DAO 都很常见,但有些不是,例如PersonsFilePath

在进行架构设计时,我创建了一个接口:IPersonDao,它包含了任何类实现的所有方法和属性。

具体实现 IPersonCsvDao 和 IPersonDBDao 和 IPersonQueueDao 实现了所有的方法和属性,但是,如果方法不属于 DAO,它们会在其实现中抛出“未实现异常” 例如 CSVDao:

List<Address> GetPersonAddress(Person person)
{
throw new NotImplementedException();
}

DBDao:

List<Address> GetPersonAddress(Person person)
{
//connect to db table
//return list<address>
}

队列道:

List<Address> GetPersonAddress(Person person)
{
throw new NotImplementedException();
}

我不确定这是否正确,因为有很多方法没有实现异常。我不确定为此解决方案创建数据层的最佳方法是什么?

【问题讨论】:

    标签: c# .net architecture


    【解决方案1】:

    如果你关注SOLID principles,我认为你应该split that into multiple interfaces。这也可以通过is 检查或as 强制转换来“检测”哪些方法受支持,哪些不支持。

    【讨论】:

      【解决方案2】:

      据我了解,您将实现树状结构,其中存在的类有一个共同的properties(将它们写在主流基础class/interface),但在某种程度的派生上,类变得更加延迟(其中一些仍然共享相同的functions/properties,其中一些共享其他),从那时起,您将为您拥有的每组类实现一个新的基类。

      希望我的意思很清楚。

      【讨论】:

        猜你喜欢
        • 2011-08-04
        • 2014-05-16
        • 1970-01-01
        • 2015-06-20
        • 2017-09-13
        • 2014-10-03
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        相关资源
        最近更新 更多