Mô hình thiết kế nhà máy python là gì?

Trong bài viết này, chúng ta sẽ xem cách sử dụng Factory Design Pattern và giúp bạn có thể tạo các đối tượng khác nhau chỉ bằng cách sử dụng một tập hợp các lớp và phương thức.

Hãy bắt đầu

Tổng quan về mẫu thiết kế

Một mẫu thiết kế là một giải pháp cho một vấn đề chung về thiết kế trong Lập trình hướng đối tượng, nhưng không chỉ xem xét việc phát triển phần mềm, như Christopher Alexander đã nói trong “A Pattern Language” Nhà xuất bản Đại học Oxford, New York 1977

Mỗi mẫu mô tả một vấn đề xảy ra lặp đi lặp lại trong môi trường của chúng ta và sau đó mô tả cốt lõi của giải pháp cho vấn đề

Điều này có nghĩa là các mẫu đó là một tập hợp các giải pháp cho các vấn đề điển hình thường xảy ra khi chúng tôi xây dựng phần mềm của mình, điều này có thể giúp công việc của chúng tôi nhất quán, đáng tin cậy và dễ hiểu hơn

Trong lập trình hướng đối tượng, chúng ta có thể tìm thấy 3 loại Mẫu thiết kế

sáng tạo. để thiết kế việc tạo ra các đối tượng

Cấu trúc. cho mối quan hệ thiết kế giữa các đối tượng

hành vi. cho sự tương tác thiết kế và trách nhiệm của các đối tượng

Trong bài đăng này, chúng ta sẽ thấy Factory Pattern là Mẫu thiết kế sáng tạo, như tên gợi ý và chúng ta sẽ sử dụng nó để đọc các tệp CSV khác nhau, nhưng sử dụng cùng một lớp

Mô hình nhà máy

Factory Pattern là một trong những pattern được sử dụng nhiều nhất

Nó được sử dụng để tạo các loại đối tượng khác nhau chỉ bằng một API và sử dụng các lớp con để xác định đối tượng nào sẽ được tạo

Hãy làm một ví dụ. xem xét việc có hai tệp CSV khác nhau, một tệp chứa thông tin người dùng và một tệp chứa thông tin ô tô, mẫu xuất xưởng sẽ giúp bạn tạo một đối tượng đại diện cho Người dùng và một lớp đại diện cho Ô tô, chỉ sử dụng một “điểm truy cập”

Hãy bắt đầu xây dựng các lớp, mỗi lớp sẽ đại diện cho một hàng CSV

Chúng ta có thể bắt đầu xây dựng một hệ thống phân cấp lớp như thế này

Định nghĩa lớp cho tất cả các loại hàng

Chúng tôi có một lớp Trừu tượng đại diện cho khái niệm về dòng CSV,

Lớp cơ sở hàng CSV

và hai lớp con, một cho người dùng,

Triển khai lớp cụ thể cho hàng Người dùng với phương thức tùy chỉnh in

và một cho xe hơi

Triển khai lớp cụ thể cho hàng Người dùng với phương thức tùy chỉnh in

Không cần sử dụng mẫu xuất xưởng, chúng ta có thể chỉ cần viết điều đầu tiên xuất hiện trong đầu, đó là câu lệnh “nếu” (hoặc chuyển đổi) đơn giản, dựa trên loại thông báo được cung cấp dưới dạng tham số

Một hàm đơn giản hữu ích để xây dựng một đối tượng hàng cụ thể, sử dụng câu lệnh if

Đây còn được gọi là phương pháp xuất xưởng và đây là cách đơn giản nhất để thực hiện và sẽ ổn khi bạn cần làm việc với số lượng loại thấp hơn và với số lượng phụ thuộc thấp, nhưng khi số lượng loại trở nên cao, điều này

Hãy phân tích điều này từ quan điểm kỹ thuật phần mềm

  1. Nó vi phạm Nguyên tắc Mở/Đóng, vốn nói rằng

Các thực thể phần mềm (các lớp, mô-đun, chức năng, v.v. ) nên được mở để mở rộng nhưng đóng để sửa đổi

Điều này đúng vì nếu bạn muốn thêm một loại dòng CSV khác, chẳng hạn như Vị trí, bạn cần sửa đổi phương thức này. Chúng tôi chỉ đơn giản là buộc phải chỉnh sửa mọi lúc

2. Nó đã vi phạm Nguyên tắc đảo ngược phụ thuộc, nói rằng

Trừu tượng không nên phụ thuộc vào chi tiết. Chi tiết nên phụ thuộc vào trừu tượng

Điều này đúng bởi vì phương thức này phụ thuộc vào việc triển khai lớp chứ không phải lớp trừu tượng. Và nếu chúng ta cần thêm một loại hàng khác, chúng ta thậm chí cần sửa đổi quá trình nhập

Và chúng ta thậm chí có thể thêm cái này. khi trong mã của bạn, bạn tìm thấy danh sách if-else, if-else hoặc switch có nhiều trường hợp, bạn nên xem xét một cách tiếp cận khác

Vì vậy, hãy cố gắng cải thiện logic này bằng cách làm theo hai nguyên tắc sau

Chúng tôi bắt đầu nghĩ về việc khái quát hóa CsvRow bằng cách sử dụng lớp trừu tượng và bây giờ chúng tôi cần nghĩ ra một cách tổng quát để tạo chúng

Một cách để giải quyết vấn đề này là Factory Pattern

UML với lớp nhà máy

Trọng tâm của lớp RowFactory là thuộc tính class_map, đây là một từ điển đơn giản ánh xạ cho mọi loại hàng cụ thể, lớp triển khai nó và như bạn có thể thấy với đường đứt nét từ RowFactory đến CsvRow, nó chỉ phụ thuộc vào

Từ điển này được điền vào hàm tạo của lớp này, bằng cách gọi phương thức create_class_map()

Hàm này được gọi trên hàm tạo của kết cấu và tìm kiếm tất cả các lớp cụ thể

Hàm này phân tích cú pháp mô-đun thông báo và nó tìm kiếm tất cả các thành phần

  1. là một lớp học
  2. không phải là một lớp trừu tượng
  3. là một lớp con của CsvRow

Theo cách này, các phụ thuộc duy nhất mà lớp này sẽ có là lớp CsvRow trừu tượng

Đây là một ví dụ về nội dung sử dụng công cụ gỡ lỗi trên PyCharm

Khi chúng tôi đã tạo từ điển, chúng tôi đã sẵn sàng để tạo cá thể bằng cách sử dụng phương thức create_row_instance()

Phương thức này nhận làm tham số loại hàng mà chúng ta muốn xây dựng và nội dung dòng, là tham số của hàm tạo lớp cụ thể

Nó tìm kiếm trên từ điển class_map phần tử có tên được truyền dưới dạng tham số, truy xuất lớp và gọi hàm tạo, truyền nội dung dòng và trả về trực tiếp đối tượng cụ thể

Đây là mã lớp hoàn chỉnh

Triển khai lớp Factory

Và đây là một ví dụ về cách sử dụng lớp nhà máy này để tạo các đối tượng

Ví dụ về việc sử dụng nhà máy trên một tệp chính

Đó là nó

Và bây giờ làm thế nào tôi có thể kiểm tra nó bằng một bài kiểm tra đơn vị?

Chúng ta chỉ có thể sử dụng TestCase. assertIsInstance() như một xác nhận để xác minh xem nhà máy của chúng ta có hoạt động tốt hay không. Đây là một ví dụ

Ví dụ về Unit Test trên Vải

Trong bộ thử nghiệm này, chúng tôi có ba thử nghiệm, một thử nghiệm cho từng loại hàng và một thử nghiệm để xác minh rằng một ngoại lệ được đưa ra khi một lớp sai được hỏi

Như bạn có thể thấy, trong hai bài kiểm tra đầu tiên, chúng tôi xác minh lớp của đối tượng được tạo bằng TestCase. assertIsInstance() và cũng sẽ kiểm tra các giá trị của thuộc tính sau khi tạo

Phần kết luận

Mẫu xuất xưởng giúp bạn tạo các loại đối tượng khác nhau có nguồn gốc từ cùng một lớp cha và ngăn việc sửa đổi phần tạo mã của bạn

Bạn viết nó chỉ một lần và gần với một giải pháp tao nhã

Một ưu điểm lớn khác của công cụ này là khi bạn cần mở rộng tính năng của mã như thêm một loại tệp khác, bạn chỉ cần triển khai lớp cụ thể bên trong mô-đun bên phải và nhà máy sẽ lấy nó từ mô-đun đó trong một

liên kết

Bạn có thể tìm thấy một triển khai hoàn chỉnh trên liên kết này

https. //chút. ly/3MSkirf

Nếu bạn muốn, bạn có thể thêm tôi trên LinkedIn vào liên kết này

Gabriele Carboni - Kỹ sư phần mềm - OROBIX. LinkedIn

Tôi là Kỹ sư phần mềm có kinh nghiệm thực hành về thử nghiệm tự động, thiết kế kiến ​​trúc, dịch vụ dựa trên đám mây, CI/CD…

www. linkin. com

cảm ơn vì đã dành thời gian cho tôi

Hẹn gặp lại các bạn trong bài viết tiếp theo

Thêm nội dung tại PlainEnglish. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Theo dõi chúng tôi trên Twitter và LinkedIn. Tham gia cộng đồng của chúng tôi

Mẫu thiết kế nhà máy trong Python là gì?

Factory Method là mẫu thiết kế sáng tạo được sử dụng để tạo triển khai cụ thể của giao diện chung . Nó tách quá trình tạo một đối tượng khỏi mã phụ thuộc vào giao diện của đối tượng. Ví dụ: một ứng dụng yêu cầu một đối tượng có giao diện cụ thể để thực hiện các tác vụ của nó.

Mẫu nhà máy có hữu ích trong Python không?

Ví dụ sử dụng. Mẫu Factory Method được sử dụng rộng rãi trong mã Python. Điều này rất hữu ích khi bạn cần cung cấp mức độ linh hoạt cao cho mã của mình . Nhận biết. Các phương thức xuất xưởng có thể được nhận ra bằng các phương thức tạo xây dựng các đối tượng từ các lớp cụ thể.

Mẫu nhà máy trong mẫu thiết kế là gì?

Phương thức xuất xưởng là mẫu thiết kế sáng tạo, tôi. e. , liên quan đến việc tạo đối tượng . Trong mẫu Factory, chúng tôi tạo các đối tượng mà không hiển thị logic tạo cho máy khách và máy khách sử dụng cùng một giao diện chung để tạo một loại đối tượng mới.

Chiến lược so với mẫu nhà máy trong Python là gì?

Mẫu xuất xưởng là mẫu sáng tạo trong khi chiến lược là mẫu hành vi có nghĩa là chúng được tạo bằng các phương pháp khác nhau. Chúng ta có thể giải quyết các vấn đề trong cuộc sống thực bằng cách sử dụng cả hai cách tiếp cận nhưng trước khi sử dụng chúng, chúng ta có thể kiểm tra xem cách tiếp cận nào đơn giản và hiệu quả hơn để giải quyết vấn đề của mình.