成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#代碼重構:提升代碼質量的五個技巧

開發 前端
代碼重構是每個開發者都應該掌握的重要技能。通過重構,我們可以在不改變代碼外部行為的前提下,優化代碼結構,提高可讀性和可維護性。本文將介紹5個強大的C#重構技巧,幫助您將代碼提升到一個新的水平。

代碼重構是每個開發者都應該掌握的重要技能。通過重構,我們可以在不改變代碼外部行為的前提下,優化代碼結構,提高可讀性和可維護性。本文將介紹5個強大的C#重構技巧,幫助您將代碼提升到一個新的水平。

1. 提取驗證邏輯

將分散的驗證邏輯提取到單獨的方法中,可以顯著提高代碼的可讀性和可維護性。

重構前:

public void AddCustomer(string firstName, string lastName, string email, DateTime dateOfBirth)
{
    if (string.IsNullOrEmpty(firstName) || string.IsNullOrEmpty(lastName))
    {
        throw new ArgumentException("First name and last name are required.");
    }


    if (!email.Contains('@') && !email.Contains('.'))
    {
        throw new ArgumentException("Invalid email format.");
    }


    if (CalculateAge(dateOfBirth, DateTime.Now) < 21)
    {
        throw new ArgumentException("Customer must be at least 21 years old.");
    }


    // 添加客戶的其他邏輯
}

重構后:

public void AddCustomer(string firstName, string lastName, string email, DateTime dateOfBirth)
{
    if (!IsValid(firstName, lastName, email, dateOfBirth))
    {
        throw new ArgumentException("Invalid customer data.");
    }


    // 添加客戶的其他邏輯
}


private bool IsValid(string firstName, string lastName, string email, DateTime dateOfBirth)
{
    const int minimumAge = 21;
    return !string.IsNullOrEmpty(firstName) &&
           !string.IsNullOrEmpty(lastName) &&
           (email.Contains('@') || email.Contains('.')) &&
           CalculateAge(dateOfBirth, DateTime.Now) >= minimumAge;
}

2. 引入依賴注入

依賴注入(DI)是一種強大的設計模式,可以提高代碼的模塊化、可測試性和可擴展性。

重構前:

public class CustomerService
{
    private CompanyRepository _companyRepository = new CompanyRepository();
    private CustomerRepository _customerRepository = new CustomerRepository();
    private CreditLimitCalculator _creditLimitCalculator = new CreditLimitCalculator();


    // 其他方法
}

重構后:

public class CustomerService
{
    private readonly CompanyRepository _companyRepository;
    private readonly CustomerRepository _customerRepository;
    private readonly CreditLimitCalculator _creditLimitCalculator;


    public CustomerService(CompanyRepository companyRepository, 
                           CustomerRepository customerRepository, 
                           CreditLimitCalculator creditLimitCalculator)
    {
        _companyRepository = companyRepository;
        _customerRepository = customerRepository;
        _creditLimitCalculator = creditLimitCalculator;
    }


    // 其他方法
}

3. 使用switch表達式簡化復雜業務規則

對于復雜的業務規則,使用switch表達式可以使代碼更加簡潔和易讀。

重構前:

public (bool HasCreditLimit, decimal? CreditLimit) CalculateCreditLimit(Customer customer, Company company)
{
    if (company.Type == CompanyType.VeryImportantClient)
    {
        return (false, null);
    }
    else if (company.Type == CompanyType.ImportantClient)
    {
        return (true, GetCreditLimit(customer) * 2);
    }
    else
    {
        return (true, GetCreditLimit(customer));
    }
}

重構后:

public enum CompanyType
{
    VeryImportantClient,
    ImportantClient,
    RegularClient
}


public class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }
    // Other properties
}


public class Company
{
    public string Name { get; set; }
    public CompanyType Type { get; set; }
    // Other properties
}




public class CreditLimitCalculator
{
    public (bool HasCreditLimit, decimal? CreditLimit) CalculateCreditLimit(Customer customer, Company company)
    {
        return company.Type switch
        {
            CompanyType.VeryImportantClient => (false, null),
            CompanyType.ImportantClient => (true, GetCreditLimit(customer) * 2),
            _ => (true, GetCreditLimit(customer))
        };
    }


    private decimal GetCreditLimit(Customer customer)
    {
            return 1000m;
    }
}




static void Main(string[] args)
{
    var customer = new Customer { Name = "John Doe", Age = 30 };
    var company1 = new Company { Name = "Acme Corp", Type = CompanyType.RegularClient };
    var company2 = new Company { Name = "Important Inc", Type = CompanyType.ImportantClient };
    var company3 = new Company { Name = "VIP Ltd", Type = CompanyType.VeryImportantClient };


    var calculator = new CreditLimitCalculator();


    var result1 = calculator.CalculateCreditLimit(customer, company1);
    Console.WriteLine($"Company: {company1.Name}, HasCreditLimit: {result1.HasCreditLimit}, CreditLimit: {result1.CreditLimit}");


    var result2 = calculator.CalculateCreditLimit(customer, company2);
    Console.WriteLine($"Company: {company2.Name}, HasCreditLimit: {result2.HasCreditLimit}, CreditLimit: {result2.CreditLimit}");


    var result3 = calculator.CalculateCreditLimit(customer, company3);
    Console.WriteLine($"Company: {company3.Name}, HasCreditLimit: {result3.HasCreditLimit}, CreditLimit: {result3.CreditLimit}");
}

圖片圖片

4. 將邏輯下推到領域模型

通過將邏輯下推到領域模型,我們可以提高代碼的內聚性和封裝性。

重構前:

public class CustomerService
{
    public Customer CreateCustomer(Company company, string firstName, string lastName, string email, DateTime dateOfBirth)
    {
        // 創建客戶的邏輯
    }


    public bool IsCustomerUnderCreditLimit(Customer customer)
    {
        return customer.HasCreditLimit && customer.CreditLimit < 500;
    }
}

重構后:

public class Customer
{
    public static Customer Create(Company company, string firstName, string lastName, string email, DateTime dateOfBirth, CreditLimitCalculator creditLimitCalculator)
    {
        // 工廠方法實現
    }


    public bool IsUnderCreditLimit()
    {
        return HasCreditLimit && CreditLimit < 500;
    }
}

5. 使用表達式體成員簡化簡單方法

對于簡單的方法,使用表達式體成員可以使代碼更加簡潔。

重構前:

public class Customer
{
    public string FullName
    {
        get
        {
            return $"{FirstName} {LastName}";
        }
    }


    public bool IsAdult()
    {
        return Age >= 18;
    }
}

重構后:

public class Customer
{
    public string FullName => $"{FirstName} {LastName}";


    public bool IsAdult() => Age >= 18;
}

通過應用這些重構技巧,您可以顯著提高C#代碼的質量、可讀性和可維護性。記住,重構是一個持續的過程,隨著您的技能不斷提升,您的代碼質量也會不斷提高。祝您編碼愉快!

責任編輯:武曉燕 來源: 技術老小子
相關推薦

2014-02-04 19:48:07

重構代碼質量

2022-03-25 09:22:42

代碼開發

2020-07-15 14:51:39

代碼C+開發

2025-03-26 00:12:00

C#重構代碼

2021-12-29 11:06:25

Java代碼技巧

2025-04-07 02:22:00

C#性能優化

2017-10-30 15:22:29

代碼可讀性技巧

2024-11-18 19:00:29

2015-08-11 09:39:25

重構提高代碼質量

2025-04-07 08:50:00

C#代碼編程

2024-09-29 10:35:43

2019-11-05 08:34:33

代碼switch開發

2023-02-06 12:00:00

重構PythonPythonic

2023-09-26 12:04:15

重構技巧Pythonic

2023-01-11 11:35:40

重構PythonPythonic

2024-04-26 11:14:34

C#單元測試框架

2024-11-01 07:30:00

2017-01-20 09:45:20

JavaScript代碼質量

2024-12-20 07:30:00

C++17代碼

2021-10-14 07:55:17

提示技巧C#
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看av网站 | 欧美日韩国产在线观看 | 91精品国模一区二区三区 | 亚洲一区| 国产欧美精品一区二区三区 | 99久久久久久久久 | 老司机成人在线 | 久久99精品久久久 | 亚洲欧美日韩在线一区二区 | 亚洲国产日韩欧美 | 亚洲天堂av在线 | 久久爱综合 | 天天色天天射天天干 | 亚洲国产精品一区二区三区 | 日日摸日日爽 | 99热精品在线观看 | 狠狠操狠狠操 | 日韩1区2区 | 婷婷久久五月天 | 99成人在线视频 | 99国产精品久久久久 | 精品国产一区二区三区性色 | 久久婷婷麻豆国产91天堂 | jizz亚洲人 | 国产亚洲一区二区三区 | 亚洲中午字幕 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 国产精品精品视频一区二区三区 | 久久精品超碰 | 精品久久久久一区二区国产 | 中文字幕成人免费视频 | 99精品网| 欧美黄色网 | 黄免费观看视频 | 国产亚洲精品精品国产亚洲综合 | 成人网av| 成人网在线看 | 人人干人人看 | 九九热在线视频观看这里只有精品 | 久久久久久久久久一区二区 | 国产欧美精品 |