我必须创建一个将业务数据上传到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在哪里。在服务层或业务层?请解释为什么会这样?
我希望能详细解释。
答案 0 :(得分:3)
看起来它更像是一个façade(learn more here)。这是业务层。
毕竟, UploadFilesViaFTP 应该可以在服务操作或单层应用程序中使用(生活在业务层中的良好指示)。
答案 1 :(得分:0)
这取决于您在应用程序范围内定义“业务逻辑”的方式。 根据我的阅读,我看到您的应用程序的“业务”是转换和上传数据,而不是以任何其他方式操作它。所以我想说UploadFileViaFTP类包含你的应用程序的基本业务逻辑,应该在业务层。