用于验证的if-else语句太多

本文关键字:语句 太多 if-else 验证 用于 | 更新日期: 2023-09-27 18:29:25

来自《专业企业网》一书,该书在亚马逊上的评分为五星,我在通读后对此表示怀疑。这是一个借款人类(这不是侵犯版权,完整代码也可以从Wrox网站上获得):

using System;
using System.Collections.Generic;
using ProEnt.LoanPrequalification.Model.LoanApplications;
namespace ProEnt.LoanPrequalification.Model.Borrowers
{
    public class Borrower
    {
        private Guid _id;
        private int _age;
        private string _firstName;
        private string _lastName;
        private IAddress _contactAddress;
        private IBankAccount _bankAccount;
        private CreditScore _creditScore;
        private Employer _employer;
        private LoanApplication _loanApplication;
        public Guid Id
        {
            get { return _id; }
            set { _id = value; }
        }
        public LoanApplication LoanApplication
        {
            get { return _loanApplication; }
            set { _loanApplication = value; }
        }
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
        public string FirstName
        {
            get { return _firstName; }
            set { _firstName = value; }
        }
        public string LastName
        {
            get { return _lastName; }
            set { _lastName = value; }
        }
        public IAddress ContactAddress
        {
            get { return _contactAddress; }
            set { _contactAddress = value; }
        }
        public Employer Employer
        {
            get { return _employer; }
            set { _employer = value; }
        }
        public IBankAccount BankAccount
        {
            get { return _bankAccount; }
            set { _bankAccount = value; }
        }
        public CreditScore CreditScore
        {
            get { return _creditScore; }
            set { _creditScore = value; }
        }
        public List<BrokenBusinessRule> GetBrokenRules()
        {
            List<BrokenBusinessRule> brokenRules = new List<BrokenBusinessRule>();
            if (Age < 18)
                brokenRules.Add(new BrokenBusinessRule("Age", "A borrower must be over 18 years of age"));
            if (String.IsNullOrEmpty(FirstName))
                brokenRules.Add(new BrokenBusinessRule("FirstName", "A borrower must have a first name"));
            if (String.IsNullOrEmpty(LastName))
                brokenRules.Add(new BrokenBusinessRule("LastName", "A borrower must have a last name"));
            if (CreditScore == null)
                brokenRules.Add(new BrokenBusinessRule("CreditScore", "A borrower must have a credit score"));
            else if (CreditScore.GetBrokenRules().Count > 0)
            {
                AddToBrokenRulesList(brokenRules, CreditScore.GetBrokenRules());
            }
            if (BankAccount == null)
                brokenRules.Add(new BrokenBusinessRule("BankAccount", "A borrower must have a bank account defined"));
            else if (BankAccount.GetBrokenRules().Count > 0)
            {
                AddToBrokenRulesList(brokenRules, BankAccount.GetBrokenRules());
            }
            if (Employer == null)
                brokenRules.Add(new BrokenBusinessRule("Employer", "A borrower must have an employer"));
            else if (Employer.GetBrokenRules().Count > 0)
            {
                AddToBrokenRulesList(brokenRules, Employer.GetBrokenRules());
            }
            if (ContactAddress == null)
                brokenRules.Add(new BrokenBusinessRule("ContactAddress", "A borrower must have a bank account defined"));
            else if (ContactAddress.GetBrokenRules().Count > 0)
            {
                AddToBrokenRulesList(brokenRules, ContactAddress.GetBrokenRules());
            }
            return brokenRules;
        }
        private void AddToBrokenRulesList(List<BrokenBusinessRule> currentBrokenRules, List<BrokenBusinessRule> brokenRulesToAdd)
        {
            foreach (BrokenBusinessRule brokenRule in brokenRulesToAdd)
            {
                currentBrokenRules.Add(brokenRule);
            }
        }
    }
}

这个类是作者构建的Mortgage应用程序的一部分。

让我困惑的是,这本书应该是关于专业企业设计的。

我不是专家,但我对感到不舒服

1-if else语句太多。(为什么不切换?)

2-类都充当一个实体,AND具有验证功能。这不是一个有臭味的设计吗?(这种书中违反单一责任原则?)

也许我错了,但我不想从一本本应该教授企业设计的书中找出不良做法。这本书充满了类似的代码片段,现在真的很困扰我。如果这是一个糟糕的设计,人们怎么能绕过太多的If-else语句呢?

很明显,我不希望你重写这门课,只是对应该如何做有一个大致的想法。

谢谢。

用于验证的if-else语句太多

if else语句太多

如果需要,那么没有什么问题。与其捕获异常,不如进行检查

类既是一个实体,又具有验证

若要将某些内容加载到实体上,则需要进行验证。

我快速地看了一下这个类,它看起来不错。

没有,没有什么问题。虽然我可以看到其他编写方法,但代码第一眼就不那么清晰。