在共享某些功能时,设计数据层,多个接口或单个接口的更好方法是什么?

时间:2011-08-25 09:34:51

标签: c# .net architecture

我正在构建的解决方案中的数据存储是数据库,队列和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();
}

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

2 个答案:

答案 0 :(得分:1)

如果您关注SOLID principles,我认为您应该split that into multiple interfaces。通过执行is检查或as演员,这也可以“检测”支持哪些方法,哪些方法不支持。

答案 1 :(得分:0)

正如我所理解的那样,你将实现类似树的结构,其中的类有一个共同的properties(将它们写在主流基础class / interface),但是某种程度的推导,类变得越来越多(其中一些仍然共享相同functions / properties,其中一些共享其他),从那时起你将要实现一个新的基类对于你所拥有的每一组课程。

希望我的意思很清楚。