当某些功能共享时,应该如何更好地设计数据层、多接口还是单接口?
本文关键字:接口 数据 单接口 更好 共享 功能 何更好 | 更新日期: 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
,其中一些共享其他),从那时起,你将为你拥有的每组类实现一个新的基类。
希望你明白我的意思。