C#优化新对象的创建(太多、难看的代码)
我担心这个问题可能很愚蠢/我不知道该怎么问这个问题,但现在我们开始: 我目前正在做一个项目,需要创建很多新对象。 属性由多个ifs设置,代码在我看来非常混乱C#优化新对象的创建(太多、难看的代码),c#,constructor,getter-setter,C#,Constructor,Getter Setter,我担心这个问题可能很愚蠢/我不知道该怎么问这个问题,但现在我们开始: 我目前正在做一个项目,需要创建很多新对象。 属性由多个ifs设置,代码在我看来非常混乱 /// <summary> /// Creates a new <see cref="StockItem"/> based on the <see cref="Article"/> of the given <param name="input"/>. /// </summary>
/// <summary>
/// Creates a new <see cref="StockItem"/> based on the <see cref="Article"/> of the given <param name="input"/>.
/// </summary>
/// <param name="input"></param>
public static StockItem CreateStockItem(InputParameterCreateStockItem input)
{
var returnStockItem = new StockItem();
//If there is an imob item, start from there and update everything
if (input.StockItem != null)
{
returnStockItem = input.StockItem;
}
else
{
//When creating a stock item, the status is ALWAYS 1
returnStockItem.Status = 1;
}
#region Properties
returnStockItem.PartTypeNo = (Int32)input.Article.ArticleNumberPrefix + "-" + input.Article.ArticleNumber.Value.ToString("D8");
returnStockItem.Kardex = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.KardexT) ?? String.Empty;
returnStockItem.WeldNumber = input.WeldNumber;
returnStockItem.ObjectNo = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ObjectNoT) ?? ConvertHelper.GetObjectNo(input.Article);
returnStockItem.Synonymous = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.SynonymousT) ?? String.Empty;
returnStockItem.ExtSerialNo = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ExtSerialNoT) ?? String.Empty;
returnStockItem.ArticleReference = (ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ArticleReferenceT)) ??
ConvertHelper.RemoveColorCodeFromReference(input.Article.Reference, input.ColorList);
returnStockItem.ArticleName = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ArticleNameT) ??
ConvertHelper.GetCorrectTranslation(input.Article.Names, "ENG");
returnStockItem.Length = ConvertHelper.GetMeasurementInMeters(input.Article, ConvertHelper.ImobLengthT, ConvertHelper.ClsLengthT);
returnStockItem.Width = ConvertHelper.GetMeasurementInMeters(input.Article, ConvertHelper.ImobWidthT, ConvertHelper.ClsWidthT);
returnStockItem.Height = ConvertHelper.GetMeasurementInMeters(input.Article, ConvertHelper.ImobHeightT, ConvertHelper.ClsHeightT);
returnStockItem.Weight =
Decimal.Parse(!String.IsNullOrEmpty(ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ImobWeightT))
? ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ImobWeightT)
: ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ClsWeightT) ?? "0");
returnStockItem.DepreciationCode = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.DepreciationCodeT) ??
(input.Article.DepreciationCode != null ? input.Article.DepreciationCode.InsuranceValueCode.ToString() +
input.Article.DepreciationCode.ActualValueCode.ToString() +
input.Article.DepreciationCode.RevaluationCode.ToString() : String.Empty);
returnStockItem.Value = ConvertHelper.GetValue(input.Article);
returnStockItem.ValueDate = ConvertHelper.GetValueDate(input.Article);
returnStockItem.Brand = ConvertHelper.GetBrand(input.Article);
returnStockItem.Remarks = ConvertHelper.GetRemarks(input.Article);
returnStockItem.InsuranceValue = ConvertHelper.GetInsuranceValue(input.Article);
returnStockItem.StockItemGroupID = ConvertHelper.GetStockItemGroupId(input.Article, input.ClsImobArticleGroups, input.StockItemGroups);
returnStockItem.StockAllocations = StockAllocationDAO.GetStockAllocationsForArticleGroupIDs(input.Article, input.ClsAssignedArticleGroups, input.ClsUnAssignedArticleGroups, input.ClsImobArticleGroups, input.StockAllocationsDictionaryByCode, input.StockAllocationsDictionaryByName);
#endregion
//AddMotherStockItemColorCode(input.Article, stockItem);
return returnStockItem;
}
//
///基于给定对象的属性创建新的。
///
///
公共静态StockItem CreateStockItem(InputParameterCreateStockItem输入)
{
var returnStockItem=新StockItem();
//如果有imob项目,从那里开始并更新所有内容
if(input.StockItem!=null)
{
returnStockItem=input.StockItem;
}
其他的
{
//创建库存项目时,状态始终为1
returnStockItem.Status=1;
}
#区域属性
returnStockItem.PartTypeNo=(Int32)input.Article.ArticleNumberRefix+“-”+input.Article.ArticleNumber.Value.ToString(“D8”);
returnStockItem.Kardex=ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.Kardex)??String.Empty;
returnStockItem.WeldNumber=输入.WeldNumber;
returnStockItem.ObjectNo=ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.ObjectNoT)??ConvertHelper.GetObjectNo(input.Article);
returnStockItem.Synonymous=ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.SynonymousT)??String.Empty;
returnStockItem.ExtSerialNo=ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.ExtSerialNoT)?String.Empty;
returnStockItem.ArticleReference=(ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.ArticleReference))??
ConvertHelper.RemoveColorCodeFromReference(input.Article.Reference,input.ColorList);
returnStockItem.ArticleName=ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.ArticleNameT)??
ConvertHelper.GetCorrectTranslation(input.Article.Names,“ENG”);
returnStockItem.Length=ConvertHelper.GetMeasurementInMeters(input.Article、ConvertHelper.ImobLengthT、ConvertHelper.clsLengtt);
returnStockItem.Width=ConvertHelper.GetMeasurementInMeters(input.Article、ConvertHelper.imobWidth、ConvertHelper.ClsWidthT);
returnStockItem.Height=ConvertHelper.GetMeasurementInMeters(input.Article、ConvertHelper.ImobHeightT、ConvertHelper.ClsHeightT);
返回库存物品。重量=
Decimal.Parse(!String.IsNullOrEmpty(ConvertHelper.GetTechSpecValue(input.Article.technicalsspecifications,ConvertHelper.ImobWeightT))
?ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.ImobWeightT)
:ConvertHelper.GetTechSpecValue(input.Article.technicalsspecifications,ConvertHelper.ClsWeightT)??“0”);
returnStockItem.DevalentionCode=ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications,ConvertHelper.DevalentionCodet)??
(input.Article.DistrictionCode!=null?input.Article.DistrictionCode.InsuranceValueCode.ToString()+
input.Article.DevalentionCode.ActualValueCode.ToString()+
input.Article.decivalioncode.rewavaluecode.ToString():String.Empty);
returnStockItem.Value=ConvertHelper.GetValue(input.Article);
returnStockItem.ValueDate=ConvertHelper.GetValueDate(input.Article);
returnStockItem.Brand=ConvertHelper.GetBrand(input.Article);
returnStockItem.Comments=ConvertHelper.getComments(input.Article);
returnStockItem.InsuranceValue=ConvertHelper.GetInsuranceValue(input.Article);
returnStockItem.StockItemGroupID=ConvertHelper.GetStockItemGroupId(input.Article,input.ClsImobArticleGroups,input.StockItemGroups);
returnStockItem.StockAllocations=StockAllocationDAO.GetStockAllocationsforArticleGroupId(input.Article,input.ClsAssignedArticleGroups,input.ClsUnAssignedArticleGroups,input.ClsMobArticleGroups,input.StockAllocationsDictionaryByCode,input.StockAllocationsDictionsDictionaryByName);
#端区
//AddMotherStockItemColorCode(input.Article,stockItem);
退货库存物品;
}
我想知道是否有更好(更具可读性)的方法来做到这一点
我已经做过的事情:
- 将更复杂的代码移动到帮助器类(
)ConvertHelper
- 创建了一个输入参数对象(我需要很多列表来检查某些东西)
- 将整个方法转移到工厂(感觉没有必要?)
/// <summary>
/// Creates a new <see cref="StockItem"/> based on the <see cref="Article"/> of the given <param name="input"/>.
/// </summary>
/// <param name="input"></param>
public static StockItem CreateStockItem(InputParameterCreateStockItem input)
{
var returnStockItem = new StockItem();
//If there is an imob item, start from there and update everything
if (input.StockItem != null)
{
returnStockItem = input.StockItem;
}
else
{
//When creating a stock item, the status is ALWAYS 1
returnStockItem.Status = 1;
}
#region Properties
returnStockItem.PartTypeNo = (Int32)input.Article.ArticleNumberPrefix + "-" + input.Article.ArticleNumber.Value.ToString("D8");
returnStockItem.Kardex = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.KardexT) ?? String.Empty;
returnStockItem.WeldNumber = input.WeldNumber;
returnStockItem.ObjectNo = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ObjectNoT) ?? ConvertHelper.GetObjectNo(input.Article);
returnStockItem.Synonymous = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.SynonymousT) ?? String.Empty;
returnStockItem.ExtSerialNo = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ExtSerialNoT) ?? String.Empty;
returnStockItem.ArticleReference = (ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ArticleReferenceT)) ??
ConvertHelper.RemoveColorCodeFromReference(input.Article.Reference, input.ColorList);
returnStockItem.ArticleName = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ArticleNameT) ??
ConvertHelper.GetCorrectTranslation(input.Article.Names, "ENG");
returnStockItem.Length = ConvertHelper.GetMeasurementInMeters(input.Article, ConvertHelper.ImobLengthT, ConvertHelper.ClsLengthT);
returnStockItem.Width = ConvertHelper.GetMeasurementInMeters(input.Article, ConvertHelper.ImobWidthT, ConvertHelper.ClsWidthT);
returnStockItem.Height = ConvertHelper.GetMeasurementInMeters(input.Article, ConvertHelper.ImobHeightT, ConvertHelper.ClsHeightT);
returnStockItem.Weight =
Decimal.Parse(!String.IsNullOrEmpty(ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ImobWeightT))
? ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ImobWeightT)
: ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.ClsWeightT) ?? "0");
returnStockItem.DepreciationCode = ConvertHelper.GetTechSpecValue(input.Article.TechnicalSpecifications, ConvertHelper.DepreciationCodeT) ??
(input.Article.DepreciationCode != null ? input.Article.DepreciationCode.InsuranceValueCode.ToString() +
input.Article.DepreciationCode.ActualValueCode.ToString() +
input.Article.DepreciationCode.RevaluationCode.ToString() : String.Empty);
returnStockItem.Value = ConvertHelper.GetValue(input.Article);
returnStockItem.ValueDate = ConvertHelper.GetValueDate(input.Article);
returnStockItem.Brand = ConvertHelper.GetBrand(input.Article);
returnStockItem.Remarks = ConvertHelper.GetRemarks(input.Article);
returnStockItem.InsuranceValue = ConvertHelper.GetInsuranceValue(input.Article);
returnStockItem.StockItemGroupID = ConvertHelper.GetStockItemGroupId(input.Article, input.ClsImobArticleGroups, input.StockItemGroups);
returnStockItem.StockAllocations = StockAllocationDAO.GetStockAllocationsForArticleGroupIDs(input.Article, input.ClsAssignedArticleGroups, input.ClsUnAssignedArticleGroups, input.ClsImobArticleGroups, input.StockAllocationsDictionaryByCode, input.StockAllocationsDictionaryByName);
#endregion
//AddMotherStockItemColorCode(input.Article, stockItem);
return returnStockItem;
}
谢谢,,
托马斯你试过AutoMapper吗?
花点时间浏览一下文档,你会发现你会很快恢复时间。你试过AutoMapper吗?
花点时间浏览一下文档,你会发现你很快就能把时间花回来。也许这对CodeReview()更好?你还应该澄清“更好”是什么意思?可读性/性能等。如果“使用”正确,您应该能够从ConvertHelper.GetMeasurementInMeters中删除ConvertHelper。删除所有
ConvertHelper
内容并创建扩展方法。C#不是java。@德拉佩,谢谢,那可能是发布这篇文章的更好地方。@Rawling我应该重命名我的返回值,我更新了代码。谢谢!:)也许这对CodeReview()更好?你还应该澄清“更好”是什么意思?可读性/性能等。如果“使用”正确,您应该能够从ConvertHelper.GetMeasurementInMeters中删除ConvertHelper。删除所有ConvertHelper
内容并创建扩展方法。C#不是java。@德拉佩,谢谢,那可能是发布这篇文章的更好地方。@Rawling我应该重命名我的返回值,我更新了代码。谢谢!:)