2010-11-13 38 views
9

Khi chúng ta nên sử dụng hàm tạo trên thuộc tính hoặc ngược lại trong khi gán giá trị.Constructor hoặc thuộc tính: cái nào là lựa chọn tốt hơn trong khi gán giá trị

+1

http://stackoverflow.com/questions/863045/what-is-the-preferred-way-of-constructing-objects-in-c-constructor-parameters-o – jcolebrand

+0

Tôi đoán bạn có nghĩa là gán * ban đầu * giá trị ... –

+0

@drachenstern - cảm ơn cho liên kết – user498432

Trả lời

24

Nhà xây dựng là một loại hợp đồng rất thuận tiện và mạnh mẽ - một cách để yêu cầu người tiêu dùng cung cấp thông tin nhất định trước khi họ thậm chí có thể sử dụng đối tượng của bạn. Vì vậy, để biết thông tin cần thiết cho cá thể hoạt động đúng, hãy sử dụng tham số hàm tạo. Đây là khái niệm cơ bản về tiêm phụ thuộc - bất cứ điều gì bạn phụ thuộc vào để thực hiện công việc của bạn, phải được tiêm (cung cấp) cho bạn trước khi bạn bắt đầu.

Thuộc tính có thể là một vấn đề thú vị. Nói chung, kinh nghiệm đã dạy tôi rằng bất cứ nơi nào có thể, các thuộc tính phải là chỉ đọc và các đối tượng thường phải là không thay đổi bên ngoài càng tốt. Thêm một bộ công khai vào một thuộc tính là một hệ số phức tạp cho lớp của bạn. Tất nhiên, luôn có các loại đối tượng - thực thể là một ví dụ hay - nơi những người định cư có ý nghĩa. Nhưng đối với hầu hết các đối tượng, mô hình "write-to through constructor"/"read-from through properties" cho nhà nước đã làm giảm đáng kể sự phức tạp và nguy cơ lỗi trong các ứng dụng mà tôi đã chịu trách nhiệm.

+0

cảm ơn sự giúp đỡ – user498432

0

Bạn sử dụng hàm tạo khi bạn cần các giá trị ban đầu tùy ý sane và thuộc tính khi bạn muốn các giá trị có thể thay đổi sau này.

+0

Tôi luôn luôn thích Properties, là tốt – user498432

+0

Nếu đối tượng của bạn không cần giá trị ban đầu tùy ý, đó là để nói rằng nó có giá trị sane trong phương pháp xây dựng chính nó, chắc chắn. –

2

Sử dụng hàm tạo nếu các giá trị tham số thực sự được yêu cầu để đối tượng của bạn được xây dựng (không có đối tượng không thể bắt đầu hiển thị). Sử dụng các thuộc tính cho các tham số có giá trị mặc định có thể chấp nhận được, vì vậy, không được gán chúng cho tất cả. Bạn có thể cung cấp thêm một số hàm tạo sẽ gán một số thuộc tính làm viết tắt, lịch sự cho người dùng của bạn.

1

Có một vài trường hợp có thể thay đổi các thuộc tính có thể thích hợp hơn:

  1. Đối với 'tinh khiết' đối tượng dữ liệu có thể thay đổi mà chỉ đơn thuần là thiết lập các thuộc tính có thể không có tác dụng phụ. Ví dụ, bạn có thể có một đối tượng đại diện cho một số thực thể trong cơ sở dữ liệu, nhưng việc sửa đổi các thuộc tính của nó sẽ không có hiệu lực cho đến khi bạn thực hiện một thao tác Commit một cách rõ ràng. Đối tượng là một gói chứa dữ liệu, nhưng không có gì phản ứng trực tiếp với các thay đổi trong dữ liệu.

  2. Nếu bạn có một số lượng lớn trạng thái có thể định cấu hình sẽ ảnh hưởng đến một số thao tác và nhiều thuộc tính có thể định cấu hình có giá trị mặc định có ý nghĩa. Nếu đây là các thuộc tính của lớp thực hiện thao tác, thì điển hình là có một số khái niệm 'đóng băng' trạng thái sao cho các thuộc tính có thể thay đổi được ném ngoại lệ trong khi hoạt động đang chạy.

  3. Nếu bạn đang phát triển một lớp học sẽ được tiêu thụ bởi một nhà thiết kế trực quan hoặc hệ thống khác dựa trên Phản ánh trên các thuộc tính. Ví dụ, hệ thống ràng buộc dữ liệu trong WPF sử dụng rộng rãi các thuộc tính có thể thay đổi được như một cách để giao tiếp các tương tác UI. Với một thiết kế phù hợp để quản lý các đột biến này, bạn có thể tạo ra một số giao diện rất mạnh mẽ và đáp ứng.

Các vấn đề liên quan