Tôi có phương thức này trong C# và tôi muốn cấu trúc lại nó. Chỉ có quá nhiều bool và dòng. Điều gì sẽ là tái cấu trúc tốt nhất. Làm cho một lớp học mới có vẻ hơi quá mức, và việc cắt đơn giản chỉ có vẻ khó khăn. Bất kỳ thông tin chi tiết hoặc con trỏ sẽ được đánh giá cao.Tái cấu trúc phương pháp có quá nhiều bool trong đó
phương pháp để cấu trúc lại
private DialogResult CheckForSireRestrictionInSubGroup(bool deletingGroup,string currentId)
{
DialogResult result = DialogResult.No;
if (!searchAllSireList)
{
DataAccessDialog dlg = BeginWaitMessage();
bool isClose = false;
try
{
ArrayList deletedSire = new ArrayList();
ISireGroupBE sireGroupBE = sireController.FindSireGroupSearch();
if (sireGroupBE != null)
{
//if the current group is in fact the seach group before saving
bool currentGroupIsSeachGroup = sireGroupBE.TheSireGroup.id == currentId;
//if we have setting this group as search group
bool selectedAsSearchGroup = this.chkBoxSelectedSireGroup.Checked;
//if the group we currently are in is not longer the seach group(chk box was unchecked)
bool wasSearchGroup = currentGroupIsSeachGroup && !selectedAsSearchGroup;
//if the group is becoming the search group
bool becomesSearchGroup = !currentGroupIsSeachGroup && selectedAsSearchGroup;
//if the group being deleted is in fact the search group
bool deletingSearchGroup = deletingGroup && currentGroupIsSeachGroup;
//if the user checked the checkbox but he's deleting it, not a so common case, but
//we shouldn't even consider to delete sire in this case
bool deletingTemporarySearchGroup = deletingGroup && !currentGroupIsSeachGroup;
//if we are not deleting a temporary search group and it's either
//becoming one (without deleting it) or we already are the search group
bool canDeleteSires = !deletingTemporarySearchGroup &&
(becomesSearchGroup || currentGroupIsSeachGroup);
//we only delete sires if we are in search group
if (canDeleteSires)
{
if (deletingSearchGroup || wasSearchGroup)
{
// If we deleted all sires
deletedSire = new ArrayList();
deletedSire.AddRange(sireGroupBE.SireList);
}
else
{
//if we delete a few sire from the change of search group
deletedSire = GetDeleteSire(sireGroupBE.SireList);
}
}
EndWaitMessage(dlg);
isClose = true;
result = ShowSubGroupAffected(deletedSire);
}
}
finally
{
if (!isClose)
{
EndWaitMessage(dlg);
}
}
}
return result;
}
này trông giống như một cách rõ ràng nhất để thể hiện logic - nó rất dễ dàng để đọc, và cũng được bình luận. Tôi sẽ không chạm vào nó chút nào. – dasblinkenlight
Đồng ý .... có thể dài nhưng có thể đọc được. –
Tôi có ý kiến rằng mã hiện tại có thể đọc được, nhưng làm giảm mục tiêu của phương thức, để xóa các mục nhập. Logic boolean có thể vẫn như cũ và di chuyển sang một phương thức khác sao cho phương thức chính có thể cắt giảm mã "hỗ trợ" không giải quyết vấn đề chính của việc xóa các công cụ. –