Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengurusan kerumitan kod terkapsul dalam PHP

Pengurusan kerumitan kod terkapsul dalam PHP

王林
王林asal
2023-10-12 13:39:291031semak imbas

Pengurusan kerumitan kod terkapsul dalam PHP

Pengurusan kerumitan kod pengkapsulan dalam PHP memerlukan contoh kod khusus

Pengenkapsulan ialah salah satu konsep teras pengaturcaraan berorientasikan objek (OOP), yang boleh meningkatkan kebolehselenggaraan dan kebolehgunaan semula kod. Walau bagaimanapun, dalam perkembangan sebenar, pembungkusan yang terlalu kompleks juga boleh menyebabkan beberapa masalah. Artikel ini menerangkan cara mengurus kerumitan enkapsulasi dalam kod PHP dan menyediakan beberapa contoh kod konkrit.

  1. Kawal saiz kelas

Kelas hendaklah mempunyai tanggungjawab yang jelas dan harus sentiasa kurus. Apabila kelas menjadi terlalu besar, enkapsulasinya dicabar. Dalam kes ini, pertimbangkan untuk membahagikan kelas kepada beberapa kelas yang lebih kecil, masing-masing memfokuskan pada tanggungjawab tertentu. Berikut ialah contoh:

class Order
{
    // 省略其他属性和方法

    public function calculateTotal()
    {
        // 计算订单总额
    }

    public function checkStock()
    {
        // 检查商品库存
    }

    public function createShippingLabel()
    {
        // 创建物流标签
    }
}

Dalam kod di atas, kelas Pesanan mengandungi berbilang fungsi seperti mengira jumlah, menyemak inventori dan mencipta label logistik. Untuk menambah baik enkapsulasi, fungsi ini boleh dibahagikan kepada kelas yang berasingan, seperti OrderCalculator, StockChecker dan ShippingLabelCreator. Order类包含了计算总额、检查库存和创建物流标签等多个功能。为了提高封装性,可以将这些功能拆分为单独的类,例如OrderCalculatorStockCheckerShippingLabelCreator

  1. 减少类之间的依赖

类之间的依赖关系应该尽量简单和松散。当一个类依赖过多的其他类时,它的封装性就会降低,因为修改其中一个类可能会引起其他类的变化。下面是一个示例:

class Order
{
    // 省略其他属性和方法

    public function calculateTotal()
    {
        $discount = new DiscountCalculator();
        $total = $this->getSubtotal() - $discount->getDiscount($this->getSubtotal());

        // 计算订单总额
    }
}

上述代码中,Order类直接创建了一个DiscountCalculator对象来计算折扣。这样的实现会导致Order类对DiscountCalculator类的耦合度过高。为了降低依赖,可以使用依赖注入(Dependency Injection)来传递DiscountCalculator实例:

class Order
{
    // 省略其他属性和方法

    public function calculateTotal(DiscountCalculator $discount)
    {
        $total = $this->getSubtotal() - $discount->getDiscount($this->getSubtotal());

        // 计算订单总额
    }
}

使用依赖注入后,Order类不再直接依赖于DiscountCalculator类,而是通过方法参数接收它的实例。这样一来,DiscountCalculator的实现可以更灵活地变化,而不影响Order类的封装性。

  1. 使用适当的访问修饰符

在面向对象编程中,访问修饰符用于控制类的成员的可见性。公有(public)成员可以被任何外部对象访问,而私有(private)成员只能在类的内部访问。良好的封装性应该遵循信息隐藏的原则,只暴露必要的接口给外部。下面是一个示例:

class Order
{
    private $subtotal;

    public function setSubtotal($subtotal)
    {
        $this->subtotal = $subtotal;
    }

    public function calculateTotal()
    {
        // 计算订单总额
    }
}

上述代码中,subtotal属性被声明为私有,只能通过setSubtotal方法设置。这样设计的好处是,外部对象无法直接访问subtotal属性,只能通过calculateTotal

    Kurangkan kebergantungan antara kelas

    Pergantungan antara kelas hendaklah semudah dan longgar yang mungkin. Apabila kelas bergantung kepada terlalu banyak kelas lain, enkapsulasinya akan dikurangkan, kerana pengubahsuaian pada satu kelas boleh menyebabkan perubahan dalam kelas lain. Berikut ialah contoh:

    rrreee
    Dalam kod di atas, kelas Pesanan terus mencipta objek DiscountCalculator untuk mengira diskaun. Pelaksanaan sebegini akan menyebabkan kelas Pesanan menjadi terlalu rapat dengan kelas DiscountCalculator. Untuk mengurangkan kebergantungan, anda boleh menggunakan suntikan kebergantungan (Suntikan Ketergantungan) untuk menghantar kejadian DiscountCalculator:
  • rrreee
  • Selepas menggunakan suntikan dependensi, kelas Pesanan tidak lagi bergantung secara langsung pada Kelas DiscountCalculator , tetapi menerima contohnya melalui parameter kaedah. Dengan cara ini, pelaksanaan DiscountCalculator boleh ditukar dengan lebih fleksibel tanpa menjejaskan enkapsulasi kelas Pesanan.
    1. Gunakan pengubah suai akses yang sesuai
    🎜🎜Dalam pengaturcaraan berorientasikan objek, pengubah akses digunakan untuk mengawal keterlihatan ahli kelas. Ahli awam boleh diakses oleh mana-mana objek luaran, manakala ahli persendirian hanya boleh diakses dalam kelas. Enkapsulasi yang baik harus mengikut prinsip penyembunyian maklumat dan hanya mendedahkan antara muka yang diperlukan kepada luar. Berikut ialah contoh: 🎜rrreee🎜Dalam kod di atas, atribut subtotal diisytiharkan sebagai peribadi dan hanya boleh ditetapkan melalui kaedah setSubtotal. Kelebihan reka bentuk ini ialah objek luaran tidak boleh mengakses atribut subtotal dan hanya boleh mengira jumlah melalui kaedah calculateTotal. 🎜🎜Kerumitan enkapsulasi dalam kod PHP boleh diurus dengan berkesan dengan mengawal saiz kelas, mengurangkan kebergantungan antara kelas dan menggunakan pengubah suai akses yang sesuai. Teknik ini boleh meningkatkan kebolehselenggaraan kod, mengurangkan kejadian pepijat dan menjadikan kod lebih mudah difahami dan digunakan semula. Dalam pembangunan sebenar, kita harus menilai bila dan cara merangkum kod berdasarkan keperluan khusus untuk mencapai pengurusan kerumitan kod yang optimum. 🎜🎜Rujukan: 🎜🎜🎜Robert C. Martin (2008 Clean Code: A Handbook of Agile Software Craftsmanship.🎜🎜Steve McConnell .🎜🎜

    Atas ialah kandungan terperinci Pengurusan kerumitan kod terkapsul dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn