【发布时间】:2019-06-22 10:16:33
【问题描述】:
我正在做一个小型练习项目,以便在一般情况下进行更多的编程练习。
该项目是一个程序,它获取 CSV 文件的内容并将其放入某个数据库中。
我从创建一个数据库访问接口IDatabaseClient开始,这让我想到了一些事情:
- 我的
Connect(...)方法应该是什么样子?各种数据库可能有一组不同的连接所需的凭据,即一个可能需要一个连接字符串,另一个可能需要:URL、用户名、密码等。解决这个问题的一种方法可能是使用Connect这样的方法:
任务连接(IConnectionCredentials 凭据);
IConnectionCredentials 接口将为空,每个数据库都有自己的实现,例如:
public class DatabaseNo1Credentials : IConnectionCredentials
{
public Uri Uri { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
我不喜欢这种解决方案的一点是IDatabaseClient 实现的用户没有任何信息应该使用哪个凭证类。如果提供了错误的凭证类,代码将抛出异常。有没有更好的解决方案?
- 我的 CSV 文件可能包含不同数据库表的数据。一个 CSV 可能包含 Cars 数据,另一个可能包含 People 数据等。如何使我的
IDatabaseClient可用于许多数据子集?
我可以这样做:
public interface IDatabaseClient
{
Task Connect(IConnectionCredentials credentials);
Task WriteCars(string model, int productionYear);
Task WritePeople(string firstName, string lastName, int age);
}
但是,如果有一天我想将数据写入 Phones 表或任何其他表怎么办?
【问题讨论】:
-
一次只能问一个问题吗?
-
@Sweeper 我的问题通常是关于设计好的界面。我举了两个例子来说明为什么我认为我的界面并不完美。无需将其拆分为 2 个问题。