问题描述
问题
我有一个要填充的员工模型。为此,它涉及在满足某些条件的情况下跨多个客户端调用多个端点。我正在寻找一种应用模式,它将多个 if 语句整理成更简洁和可扩展的东西。我已经使用策略和工厂模式的混合来接近它。
-
将如此多的依赖项 DI 到工厂是否会使其成为一种反模式?
-
如果策略本身被直接导入工厂,那么在创建后将数据传递给它们是否打破了策略模式?在这种情况下员工,employeeModel
原始代码
var employee = await employeeClient.GetEmployeeAsync(id);
var employeeModel = mapper.Map<EmployeeModel>(employee);
if(employee.CertificationIds.Count() > 0)
{
var certifications = await employeeClient.GetCertificationsAsync(employee.CertificationIds);
certifications.ForEach(c => employeeModel.Certifications.Add(mapper.Map<CertificationModel>(c)));
}
if(employee.ImageId ! = null)
{
var empImage = await employeeMediaClient.GetEmployeeImageAsync(employee.ImageId);
employeeModel.Image = mapper.Map<ImageModel>(empImage);
}
if(employee.EmploymentActive)
{
var latestSalarySlip = await companyFinancialClient.GetLatestEmployeeSalarySlipAsync(employee.Id);
employeeModel.LatestSalarySlip = mapper.Map<ImageModel>(latestSalarySlip);
}
if(employee.SchemeId != null)
{
var schemeDetails = await schemeClient.GetSchemeAsync(employee.SchemeId);
if(schemeDetails.CompanyFinancing)
{
var schemeFinancialDetails = await companySchemesClient.GetFinancialDetails(schemeDetails.Id)
}
if(schemeDetails.StateFinancing)
{
var schemeFinancialDetails = await stateSchemesClient.GetFinancialDetails(schemeDetails.Id)
}
employeeModel.Scheme = mapper.Map<SchemeModel>(schemeDetails);
employeeModel.Scheme.FinancialDetails = mapper.Map<SchemeFinancialDetails>(schemeFinancialDetails);
}
return employeeModel
转换后的代码
var employee = await employeeClient.GetEmployeeAsync(id);
var employeeModel = mapper.Map<EmployeeModel>(employee);
var strategies = employeeStrategyFactory.Create(employeeModel,employee);
strategyExecutor.Execute(strategies);
EmployeeStrategyFactory
public EmployeeStrategyFactory(IMapper mapper,EmployeeClient employeeClient,EmployeeMediaClient employeeMediaClient,CompanyFinancialClient companyFinancialClient,SchemeClient schemeClient,CompanySchemesClient companySchemesClient,StateSchemesClient stateSchemesClient,IGetEmployeeCertsStrategy getEmployeeCertsStrategy,IGetEmployeeMediaStrategy getEmployeeMediaStrategy,IGetEmployeeSalaryStrategy getEmployeeSalaryStrategy,IGetEmployeeSchemeDetails getEmployeeSchemeDetails)
{
...
}
public List<IPopulateEmployeeStrategy> GetStrategies(EmployeeModel empModel,Employee emp)
{
if(emp.CertificationIds.Count() > 0)
{
employeeMediaClient.Employee = emp;
employeeMediaClient.EmployeeModel = empModel;
strategies.Add(employeeMediaClient)
}
....
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)