Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当某些功能共享时,设计数据层、多个接口或单个接口的更好方法是什么?_C#_.net_Architecture - Fatal编程技术网

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

C# 当某些功能共享时,设计数据层、多个接口或单个接口的更好方法是什么?,c#,.net,architecture,C#,.net,Architecture,我正在设计的解决方案中的数据存储是数据库、队列和Csv文件 其中一些功能在两者中都很常见,例如Csv文件和DBs都有GetNames()方法-名称信息位于Csv和DB中,其中一些方法仅对DB有效,而对Csv无效,例如。 GetAddressOfPerson(Person-Person)是一种适用于DB的方法,因为DB包含地址信息,但不适用于CSV文件,因为它们没有地址信息 另一个例子是属性。有些属性是通用的,例如bool IsTestMode对于两个DAO都是通用的,但有些属性不是通用的,例如P

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

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

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

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

相关实现IPersonCsvDao和IPersonDBDao以及IPersonQueueDao实现了所有的方法和属性,但是,如果方法不属于DAO,它们在实现中抛出“未实现异常” 例如 CsvDao:

列出GetPersonalAddress(个人)
{
抛出新的NotImplementedException();
}
DBDao:

List<Address> GetPersonAddress(Person person)
{
//connect to db table
//return list<address>
}
列出GetPersonalAddress(个人)
{
//连接到数据库表
//返回列表
}
排队道:

List<Address> GetPersonAddress(Person person)
{
throw new NotImplementedException();
}
列出GetPersonalAddress(个人)
{
抛出新的NotImplementedException();
}

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

如果您遵循,我认为您应该这样做。这还可以通过执行
is
检查或
as
强制转换来“检测”哪些方法受支持,哪些不受支持。

如果您遵循,我认为您应该这样做。这还可以通过执行
is
检查或
as
强制转换来“检测”哪些方法受支持,哪些不受支持。

据我所知,您将实现树状结构,其中存在的类具有公共
属性
(在主流基础
类中编写它们
/
接口
),但在某种派生级别上,类变得更加延迟(有些类仍然共享相同的
函数
/
属性
,有些类共享其他属性),从那时起,您将为您拥有的每一组类实现一个新的基类


希望我的意思很清楚。

据我所知,您将实现树状结构,其中存在的类有一个公共的
属性
(在主流基类
/
接口
),但在某种派生级别上,类变得更加延迟(其中一些仍然共享相同的
函数
/
属性
,一些共享其他属性),从那时起,您将为您拥有的每一组类实现一个新的基类

希望你能明白我的意思

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