我必须创建一个将业务数据上传到FTP站点的程序。我正在用C#开发这个程序。业务层业务层的程序逻辑
所以我创建了相关的类对这一计划如下
IData的 - 从数据库
IDataTransform获取数据 - 转换数据从数据库接收到特定的格式按客户要求
IFtpOperation - 上传文件从本地磁盘
ISettings-它拥有所有相关的配置,例如连接字符串,FTP服务器位置,凭证等,
这里是它的代码
public interface IFtpOperation
{
void Upload(string localFilePath);
}
public interface IDataTransform<in T1, out T2>
{
T2 Transform(T1 input);
}
public interface IData<in T1, out T2>
{
T2 GetData(T1 input);
}
public interface ISettings
{
T GetValue<T>(string key);
}
然后,我创建了另一个类来连接这些操作。上述接口作为构造函数参数传递给此类。该类包含一个方法UploadCustomerData,它根据需要调用依赖项中的方法。
下面是代码
public class UploadFileViaFTP
{
private readonly IFtpOperation _ftp;
private readonly IData<int, IList<CustomerData>> _customerData;
private readonly IDataTransform<CustomerData, string> _transformer;
private readonly ISettings _settings;
public UploadFileViaFTP(IFtpOperation ftp, IData<int, IList<CustomerData>> customerData,
IDataTransform<CustomerData, string> transformer, ISettings settings)
{
_ftp = ftp;
_transformer = transformer;
_customerData = customerData;
_settings = settings;
}
public void WriteToDisk(IList<CustomerData> customers, string localFilePath)
{
using (var writer = new StreamWriter(localFilePath))
{
foreach (var customer in customers)
{
writer.WriteLine(_transformer.Transform(customer));
}
}
}
private void UploadCustomerData(int accountId)
{
var customerData = _customerData.GetData(accountId);
if (customerData.Count > 0)
{
var localPath = _settings.GetValue<string>("LocalFilePath");
WriteToDisk(customerData, localPath);
_ftp.Upload(localPath);
}
else
{
_notificationMessage.AppendLine(
string.Format("There could be an error or no data avaiable to upload at {0} for account {1}.", DateTime.Now, accountId));
}
}
}
现在的问题是哪里该类UploadFileViaFTP生活。在服务层还是业务层?请解释这是为什么?
我希望详细解释一下。