Nói gì với sếp nếu họ muốn bạn sử dụng biến toàn cục


13

Tôi hiện đang được 4 tháng thực tập và khi xem xét mã của mình, sếp của tôi đã không thích rằng tôi đã giữ một đối tượng cụ thể cục bộ cho một số phương thức trong một vài lớp riêng biệt trong một hội đồng. Anh ấy không thích rằng tôi đã được tạo ra một đối tượng mới mỗi lần, và thay vào đó bảo tôi tạo một đối tượng duy nhất có thể được truy cập từ bất cứ đâu. Do đó, tôi đã phải tạo nó như một đối tượng tĩnh trong một lớp tĩnh và chỉ cần tham chiếu nó từ đây tôi muốn sử dụng nó!

Làm thế nào bạn sẽ đối phó với điều này, vì tôi chỉ mới lập trình chuyên nghiệp được 4 tháng!


4
Sếp của bạn là người kỹ thuật hay người không có kỹ thuật? Nếu anh ấy kỹ tính, anh ấy đã đọc "Clean Code" của Robert C. Martin chưa?
George Stocker

5
Vì vậy, ông chủ của bạn đã thuê bạn viết mã, và bây giờ đang cho bạn biết làm thế nào để viết mã?
Jeremy Heiler

8
Bạn đã nói trong một bình luận bên dưới rằng "đối tượng không có bất kỳ trạng thái nào, ngoài rất nhiều hằng số". Trong trường hợp đó, một lớp tĩnh có vẻ như là một giải pháp tốt cho tôi.
Justin

5
"Có ông chủ" nảy ra trong tâm trí ...

2
"bảo tôi tạo một đối tượng duy nhất có thể được truy cập từ bất cứ đâu. Do đó tôi phải tạo ra nó như một đối tượng tĩnh" Đây không phải là lý do hợp lệ. Bạn nói như thể có một đối tượng duy nhất có thể truy cập được từ toàn bộ ứng dụng ngụ ý rằng bạn có Singleton - tại sao bạn không tạo nó trong thư mục tổng hợp và sau đó chuyển tham chiếu của nó đến các lớp phụ thuộc?
nuốt chửng elysium

Câu trả lời:


33

Nếu một đối tượng là đủ, việc tạo ra một đối tượng mỗi lần là một sự lãng phí, và ở đây ông chủ của bạn có thể đúng.

Vấn đề là truy cập thích hợp vào đối tượng đó. Một phương thức giống như nhà máy với khả năng hiển thị phù hợp luôn trả về đối tượng tĩnh đó là giải pháp đầu tiên nảy ra trong đầu. Những người khác chắc chắn tồn tại.


3
+1: nhiều như tôi không thích bất kỳ câu trả lời "GoF said so", đúng là đúng.
Javier

1
Tôi đã nghĩ về Singletons, tuy nhiên tôi chỉ thấy nó là một trình bao bọc xung quanh một biến toàn cục, vì vậy tôi đã không theo dõi nó. Tôi sẽ thử ngay bây giờ, vì đối tượng không có bất kỳ trạng thái nào, ngoài rất nhiều hằng số nên sẽ ổn. Cảm ơn.
Darren Young

9
Tôi nghi ngờ đây có thể là trường hợp ("đối tượng không có bất kỳ trạng thái nào ... rất nhiều hằng số"). Sếp của bạn nói đúng. Không có ý nghĩa trong việc gây áp lực nhân tạo lên bộ thu gom rác cho các giá trị không bao giờ thay đổi.
Berin Loritsch

3
@ darren-young: trên một lưu ý phụ, không có trạng thái là thú vị và cho phép một số cách tiếp cận mạnh mẽ; hãy xem cái gọi là 'lập trình chức năng' nếu bạn chưa làm.
9000

8

Tôi không thể bình luận trường hợp cụ thể của bạn, nhưng sử dụng các biến toàn cầu đôi khi một giải pháp tốt. Lớp hệ thống của Java có đầy đủ các biến toàn cục, tĩnh.

Nhưng nói chung, nếu bạn nghĩ rằng bạn đúng và sếp của bạn sai, thì tại sao bạn không yêu cầu sếp giải thích lý do tại sao anh ta nghĩ rằng một biến toàn cầu là một giải pháp tốt hơn? Một từ đơn giản "Tôi không thích nó" mơ hồ như "các biến toàn cầu là xấu xa". Bạn phải yêu cầu nhiều hơn từ ông chủ của bạn!

Nếu anh ấy không thể đưa ra lý do cho lập trường của mình và bạn có thể đưa ra lý do cho lập trường của mình, hoặc ngược lại, thì đó là một cơ hội học tập tốt. Nếu cả hai bạn có thể biện minh cho lập trường của mình, thì đó có lẽ là vấn đề của sở thích - hoặc vấn đề kinh nghiệm: ông chủ của bạn phải lập trình chuyên nghiệp hơn 4 tháng, tôi nghĩ sao?


1
Xem, java.lang.Systemchứa chính xác ba biến toàn cục và đối với mỗi biến đó có một phương pháp để đặt đúng. Nhưng Systemcó đầy đủ các phương thức tĩnh trả về các đối tượng toàn cầu và chính xác không có gì sai với điều này, không thể tranh luận.
9000

2
Đúng; Tôi coi các biến toàn cục khá giống như các phương thức tĩnh trả về các đối tượng toàn cục.
Joonas Pulakka

Vì vậy, Java làm điều này. Đó là một câu hỏi hoàn toàn khác về việc đó có phải là một ý tưởng tốt hay không. Trình tạo số ngẫu nhiên tiêu chuẩn của C giữ trạng thái toàn cầu. Nhưng người ta thường thừa nhận rằng điều này thật kinh khủng và do đó, trình tạo số ngẫu nhiên do đó không thể sử dụng được trong một số ứng dụng nhất định (xem ví dụ: Bentley và cộng sự, Kỹ thuật một chức năng sắp xếp ). Java nói riêng có một loạt các vấn đề về thiết kế (đã được cải thiện phần nào thuận trong C #) để I't được rất thận trọng của việc sử dụng nó như là một cuộc tranh cãi như thế này.
Konrad Rudolph

@Konrald Rudolph: Cuối cùng, đó là một quyết định thiết kế. Mọi quyết định đều có ưu và nhược điểm. Ví dụ, giữ trạng thái toàn cầu Systemđơn giản hóa, giả sử, 99,9% trường hợp sử dụng với chi phí gây ra sự cố trong 0,1% còn lại. Không có câu trả lời "đúng" cho dù 0,1% đó có xứng đáng với độ phức tạp thêm hay không.
Joonas Pulakka

5

Là một người ở vị trí của bạn, điều bạn có thể làm nhất là học hỏi. Nếu đối tượng về cơ bản là một hằng số (tức là nó không thể thay đổi và nó không duy trì trạng thái), thì ông chủ của bạn có thể đúng. Không có hại trong việc có một đối tượng không đổi tĩnh. Rốt cuộc, có bao nhiêu định nghĩa về PI?

Một số người bảo vệ tư duy "không có đối tượng toàn cầu" đến mức tôn giáo. Đó là vì một trong hai lý do: họ gặp khó khăn trong việc theo dõi lỗi hoặc sự yếu kém của hệ thống do sử dụng quá mức các biến / đối tượng toàn cầu hoặc họ đã nghe nói rằng điều đó thật tệ và họ không thể tự nghĩ ra. Cá nhân tôi rơi vào nhóm những người bị ảnh hưởng nặng nề bởi sự mong manh và khó theo dõi lỗi - nhưng tôi cũng đã học được một số cân bằng ở đây.

Nếu tôi ở trong đôi giày của bạn, tôi sẽ tiếp tục và làm theo những gì ông chủ nói - rốt cuộc đó là mông của anh ấy. Sau đó, tôi sẽ xem và thấy tác dụng của lựa chọn đó theo thời gian. Đây là một công cụ học tập hiệu quả.


Đó là một thực tập. Bạn đang học. Mù quáng làm những gì ông chủ của bạn nói không học.
David Thornley

5
Cũng không mù quáng đi ngược lại ông chủ của bạn. Lời khuyên của tôi, như đã được viết, là quan sát ảnh hưởng của sự lựa chọn của sếp. Chúng tôi (trên stackexchange) không thể đưa ra đánh giá giá trị về tình huống này vì chúng tôi đang thiếu thông tin quan trọng. Đây là một trường hợp để làm một phương pháp khoa học nhỏ. OP có một giả thuyết, ông chủ đã thách thức nó. Bây giờ là lúc để thực hiện thí nghiệm.
Berin Loritsch

2

Tùy thuộc vào tình huống cụ thể, một biến toàn cục có thể là giải pháp tốt nhất. Trong lập trình nhúng, toàn cầu không chiếm không gian ngăn xếp và vì lý do đó là một lựa chọn tốt.

Globals hay không, tôi đã tìm thấy một lời khen ngợi tốt để đặt tiền tố trên toàn cầu. Điều này sẽ làm cho các lập trình viên khác googling mã của bạn nhận thức được tác động nếu sự lộn xộn với nó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.