我正在构建的解决方案中的数据存储是数据库,队列和Csv文件。
其中一些功能在两者中都很常见。 Csv文件和DB都有GetNames()方法 - 名称信息驻留在CSV和DB中,其中某些方法仅对DB有效,而不是CSV,例如 GetAddressOfPerson(Person person)是一种适用于DB的方法,因为DB包含地址信息,但不包含CSV文件,因为它们没有地址信息。
另一个例子是属性。一些属性是常见的,例bool IsTestMode对于两个DAO都是常见的,但有些不是例如PersonsFilePath
在构建时,我创建了一个接口:IPersonDao,它包含了所有类的实现所有方法和属性。
概念实现IPersonCsvDao和IPersonDBDao以及IPersonQueueDao实现了所有方法和属性,但是,如果该方法不属于DAO,它们会在其实现中抛出“Not Implemented Exception” 例如 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();
}
我不确定这是否正确,因为有很多方法都没有实现异常。我不确定为此解决方案创建数据层的最佳方法是什么?
答案 0 :(得分:1)
如果您关注SOLID principles,我认为您应该split that into multiple interfaces。通过执行is
检查或as
演员,这也可以“检测”支持哪些方法,哪些方法不支持。
答案 1 :(得分:0)
正如我所理解的那样,你将实现类似树的结构,其中的类有一个共同的properties
(将它们写在主流基础class
/ interface
),但是某种程度的推导,类变得越来越多(其中一些仍然共享相同functions
/ properties
,其中一些共享其他),从那时起你将要实现一个新的基类对于你所拥有的每一组课程。
希望我的意思很清楚。