当某些功能共享时,应该如何更好地设计数据层、多接口还是单接口?

本文关键字:接口 数据 单接口 更好 共享 功能 何更好 | 更新日期: 2023-09-27 18:06:41

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

一些功能在这两种文件中都是通用的,例如Csv文件和DB都有GetNames()方法-名称信息驻留在Csv和DB中,其中一些方法只对DB有效,而对Csv无效。GetAddressOfPerson(Person Person)是一个用于DB的方法,因为DB包含地址信息,但不用于CSV文件,因为它们没有地址信息。

另一个例子是属性。有些属性是通用的,例如bool isstestmode对两个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>
}

QueueDao:

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

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

当某些功能共享时,应该如何更好地设计数据层、多接口还是单接口?

如果您遵循SOLID原则,我认为您应该将其拆分为多个接口。这也使得通过执行is检查或as强制转换来"检测"支持哪些方法和不支持哪些方法成为可能。

据我所知,你将实现树状结构,其中类有一个共同的properties(在主流基础class/interface中编写它们),但在某种派生级别上,类变得更加复杂(其中一些仍然共享相同的functions/properties,其中一些共享其他),从那时起,你将为你拥有的每组类实现一个新的基类。

希望你明白我的意思。