gpt4 book ai didi

c# - 方法中的类耦合警告

转载 作者:行者123 更新时间:2023-11-30 21:00:28 27 4
gpt4 key购买 nike

我收到以下代码分析警告消息,但我不知道如何解决该问题。请指教。

CA1506 Avoid excessive class coupling
'RetailerController.RetailerFormSummary(string)' is coupled with 33 different types from 13 different namespaces. Rewrite or refactor the method to decrease its class coupling, or consider moving the method to one of the other types it is tightly coupled with. A class coupling above 40 indicates poor maintainability, a class coupling between 40 and 30 indicates moderate maintainability, and a class coupling below 30 indicates good maintainability. OnePlaceWebApp.Web RetailerController.cs 564

RetailerFormSummary(string) 方法如下所示:

 public ViewResult RetailerFormSummary(string retailerId)
{
AlertService alertService = new AlertService();
PageInfo winnersPageInfo = new PageInfo();
RetailerFormModelSummary model = new RetailerFormModelSummary();

winnersPageInfo.ItemsPerPage = _configurationUtility.SummaryWinnersCount;
winnersPageInfo.PageIndex = 0;

model.CurrencyFormat = _configurationUtility.CurrencyFormat;
model.DateFormat = _configurationUtility.DateFormat;
model.DatePickerFormat = _configurationUtility.DatePickerFormat;
model.Reps = _userService.GetReps(_userService.GetCurrentWebAppUserId());
model.UsesDistricts = _configurationService.GetUsesDistricts();
RetailerDto retailer = _retailerService.SelectRetailer(retailerId);

if (retailer != null)
{
RetailerJurisdictionDto retailerJurisdiction = _retailerSummaryService.SelectRetailerJurisdiction(retailer.Id);
JurisdictionDto territory = null;
JurisdictionDto district = null;
JurisdictionDto region = null;
DateTime? lastVisit = _retailerSummaryService.SelectLastVisitUtcDate(retailer.Id);

if (retailerJurisdiction != null)
{
territory = _jurisdictionService.SelectJurisdictionUsingIdAndType(retailerJurisdiction.JurisdictionId, JurisdictionTypes.Territory);
district = _jurisdictionService.SelectJurisdictionUsingIdAndType(retailerJurisdiction.JurisdictionId, JurisdictionTypes.District);
region = _jurisdictionService.SelectJurisdictionUsingIdAndType(retailerJurisdiction.JurisdictionId, JurisdictionTypes.Region);
}
model.Address1 = retailer.Street1;
if (retailer.Street2 != null)
{
model.Address2 = retailer.Street2;
}
if (retailer.CorporateAccount != null)
{
model.CorporateAccount = FormatService.GetTwoPartName(retailer.CorporateAccount.Number, retailer.CorporateAccount.Name, " - ");
}
model.CorporateAccountName = _termsService.SelectSingularTermValue(TermTypes.CorporateAccount);
model.City = retailer.City;
if (district != null)
{
model.District = FormatService.GetTwoPartName(district.Number, district.Name, " - ");
}
if (lastVisit.HasValue)
{
model.LastVisit = lastVisit.Value.DayOfWeek.ToString() + " " + lastVisit.Value.ToLocalTime().ToString(model.DateFormat, CultureInfo.CurrentCulture);
}
model.Note = _retailerSummaryService.SelectRetailerComment(retailer.Id);
model.Phone = FormatService.FormatPhoneNumber(retailer.Phone);
if (region != null)
{
model.Region = FormatService.GetTwoPartName(region.Number, region.Name, " - ");
}
model.RegionTerm = _termsService.SelectSingularTermValue(TermTypes.Region);
model.RetailerId = retailer.Id.ToString(CultureInfo.CurrentCulture);
model.RetailerName = retailer.BusinessName;
ViewBag.Title = retailer.BusinessName;
model.RetailerNumber = retailer.DisplayNumber;
model.RetailerAlerts = alertService.GetRetailerAlertsStringArray(retailer.RetailerAlerts);
model.Route = _routeManagerService.GetRouteStringForRetailer(retailerId);
model.Tasks = _retailerSummaryService.SelectRetailerTasks(retailer.Id);
if (territory != null)
{
model.Territory = FormatService.GetTwoPartName(territory.Number, territory.Name, " - ");
}
model.TerritoryTerm = _termsService.SelectSingularTermValue(TermTypes.Territory);
model.WeeklySales = _retailerSummaryService.SelectWeeklySales(retailerId);
model.Winners = _retailerWinnersService.SelectWinners(retailerId, WinnersSortTypes.Date, winnersPageInfo);
model.ZipCode = retailer.ZipCode;
}

return View("RetailerFormSummary/RetailerFormSummary", model);
}

最佳答案

此警告告诉您,在您的方法中实例化依赖的具体对象可能会导致可维护性问题。

这里有一些例子:

AlertService alertService = new AlertService();
PageInfo winnersPageInfo = new PageInfo();
RetailerFormModelSummary model = new RetailerFormModelSummary();
RetailerJurisdictionDto retailerJurisdiction = _retailerSummaryService.SelectRetailerJurisdiction(retailer.Id);
JurisdictionDto territory = null;
JurisdictionDto district = null;
JurisdictionDto region = null;

这个方法有太多的职责并且拥有太多的依赖。您一定要查找 Dependency Inversion Principle也许还有一个 Inversion of Control Framework帮助您进行依赖注入(inject)。这将有助于减少类/方法中的耦合。

口头禅是“依赖于抽象”。

另外,Single Reponsibility Principle在这里也适用。

关于c# - 方法中的类耦合警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866275/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com