Phần cứng hướng đối tượng


21

Tôi đến từ một nền tảng OO mạnh mẽ và gần đây tôi đã bắt đầu làm việc trong một tổ chức, mặc dù mã được viết bằng Java, ít chú trọng đến thiết kế OO tốt hơn so với những gì tôi đã từng sử dụng. Tôi đã được thông báo rằng tôi giới thiệu "quá nhiều trừu tượng" và thay vào đó tôi nên viết mã theo cách nó luôn được thực hiện, đó là một kiểu thủ tục trong Java.

TDD cũng không được thực hành nhiều ở đây, nhưng tôi muốn có mã kiểm tra. Chôn logic kinh doanh trong các phương thức riêng tư tĩnh trong các "lớp Thần" lớn (dường như là chuẩn mực cho nhóm này) là không thể kiểm chứng được.

Tôi đấu tranh trong việc truyền đạt rõ ràng động lực của mình với đồng nghiệp. Có ai có một số lời khuyên về cách tôi có thể thuyết phục đồng nghiệp của mình rằng sử dụng OO và TDD dẫn đến mã dễ duy trì hơn không?

Câu hỏi này về nợ kỹ thuật có liên quan đến câu hỏi của tôi. Tuy nhiên, tôi đang cố gắng tránh phát sinh khoản nợ ngay từ đầu, trái ngược với việc trả nó sau khi thực tế đó là những gì câu hỏi khác đề cập.


17
Vai trò của bạn là gì? Nhà phát triển lẩm cẩm? Bạn đang say sưa - có được một công việc tốt hơn. Nhà phát triển chính? Bạn có thể tạo ra sự khác biệt ...
Matthew Flynn

2
Không có nhiều nợ công nghệ, vì xử lý thiết kế kém và con người sẽ không thay đổi
ozz

1
Tôi nhận thức được các lý lẽ kỹ thuật và kinh doanh, tôi đang hỏi làm thế nào để mang kiến ​​thức này tốt nhất đến với đồng nghiệp của tôi, những người dường như không biết gì về điều này. Họ thấy rất nhiều lớp, tôi thấy một hệ thống có thể mở rộng, có thể kiểm chứng
ThuneGrill

5
Xin lỗi, bạn phải đi. Bạn đang nói chuyện trên đầu của các đồng nghiệp của bạn. Nó sẽ không thay đổi cho đến khi dự án trở nên không thể nhầm lẫn. Nếu bạn không thích thử nghiệm thủ công và diễu hành tử thần, tốt nhất bạn nên đi nơi khác.
kevin cline

4
Không thấy mã trong câu hỏi (vâng, thật khó để cung cấp mẫu đủ tốt, vì vậy chúng tôi chỉ cần tin vào phán đoán của bạn ở đây), thật khó để biết liệu thực sự có thiếu OO hay không, nếu bạn đang đẩy mạnh việc vận chuyển hàng hóa quá mức OO abtraction không có lý do tốt. Tôi nghĩ rằng tất cả mọi người đã thấy các ví dụ về OOP được thiết kế quá mức, nơi trừu tượng nằm trên lớp của các nhà máy trừu tượng sản xuất các nhà máy trừu tượng, v.v.
Kromster nói hỗ trợ Monica

Câu trả lời:


32

Bạn đã không phàn nàn về nó là không thể nhầm lẫn, chỉ là không theo ý thích của bạn. Nếu đó là một sự lựa chọn phong cách có chủ ý, nó có thể chỉ là một trường hợp khác biệt sáng tạo không thể hòa giải, và bạn nên điều chỉnh phong cách của mình cho phù hợp, hoặc tìm một nơi nào đó phù hợp với phong cách ưa thích của bạn.

Mọi người có thể và thực hiện viết mã mô-đun, hiệu quả, trừu tượng hóa, tương đối không có lỗi theo kiểu thủ tục mọi lúc. Java là một lựa chọn ngôn ngữ kỳ quặc cho một cửa hàng như vậy, nhưng tôi có thể thấy điều đó xảy ra nếu các yếu tố bên ngoài quyết định ngôn ngữ, chẳng hạn như cần phát triển cho Android chẳng hạn.

Mọi người đều là một thiên tài. Nhưng nếu bạn đánh giá một con cá bằng khả năng trèo cây, nó sẽ sống cả đời với niềm tin rằng nó thật ngu ngốc. - Albert Einstein

Nếu đó một sự lựa chọn có chủ ý, bạn thực sự không thể đánh giá họ bằng cách họ tuân thủ tốt các nguyên tắc thiết kế hướng đối tượng tốt như thế nào, bạn nên đánh giá xem họ tuân thủ tốt các nguyên tắc thiết kế thủ tục tốt như thế nào, và cũng tái cấu trúc theo đó. Java không cho phép bạn viết mã bên ngoài một lớp, vì vậy sự hiện diện của một người không có nghĩa là họ dự định một mô-đun hướng đối tượng.

Mặt khác, nếu mã là một mớ hỗn độn trong cả hai mô hình, có lẽ bạn chỉ nên cắt lỗ.


3
nó là thủ tục lộn xộn. Nhưng tôi đang nói về mã mới mà tôi viết được gọi là "quá hướng đối tượng"
ThuneGrill

5
Mã thủ tục lộn xộn được mở rộng với mã OO có thể không phải là một sự cải thiện, chỉ là thêm sự nhầm lẫn.
wirrbel

7
@ThuneGrill, Bạn cho rằng họ đã chọn phong cách mã hóa của mình vì không biết gì về thiết kế hướng đối tượng, rằng nếu bạn chỉ cần giáo dục họ, họ sẽ nhìn thấy ánh sáng. Nếu bây giờ ai đó có kinh doanh phần mềm có lợi nhuận bằng ngôn ngữ hướng đối tượng mạnh mẽ đã không nhìn vào lợi ích của OOD, thì không có cách nào "anh chàng mới" sẽ thuyết phục anh ta. Lấy từ của tôi cho nó và từ của những người bình luận khác. Nếu bạn không thể hoặc sẽ không điều chỉnh phong cách của mình để giúp đội dễ đọc hơn, bạn nên cắt lỗ.
Karl Bielefeldt

3
@ThuneGrill: Karl đúng. Bám sát những lý do thực dụng, không tôn giáo. OOP chắc chắn là một ý tưởng tốt, nhưng tôi đã thấy nó mang theo những thái cực lố bịch. Kết quả là làm cho núi ra khỏi molehills. Những thứ có thể được thực hiện trong 1000 dòng mã cuối cùng là 10.000 dòng mã với các lớp galore. Sau đó, Gee, thật khó để duy trì và hiệu suất rất tệ. (Không có vấn đề gì với các lớp bộ sưu tập được sử dụng.)
Mike Dunlavey

1
Tôi không nhất thiết phải từ bỏ ý tưởng rằng bạn có thể thuyết phục mọi người về điều này. Thật khó khăn, nhưng nó có thể được thực hiện - Tôi đã làm được. Vì câu hỏi này dường như đã đóng cửa, hãy xem nơi làm
việc.stackexchange.com / questions / 913 / bia

7

Đọc câu hỏi của bạn, tôi nhớ một mẹo của cuốn sách Lập trình viên thực dụng.

Một trong những lời khuyên của nó là Be a Catalyst for Change:

Bạn có thể đang ở trong một tình huống mà bạn biết chính xác những gì cần làm và làm thế nào để làm điều đó. Toàn bộ hệ thống chỉ xuất hiện trước mắt bạn. Bạn biết đó là đúng. Nhưng hãy xin phép để giải quyết toàn bộ sự việc và bạn sẽ gặp phải sự chậm trễ và những cái nhìn trống rỗng. Mọi người sẽ thành lập ủy ban, ngân sách sẽ cần phê duyệt và mọi thứ sẽ trở nên phức tạp. Mọi người sẽ bảo vệ tài nguyên của riêng họ. Đôi khi điều này được gọi là "mệt mỏi khởi động."

Đã đến lúc nấu Stone Soup. Tìm ra những gì bạn có thể yêu cầu hợp lý. Phát triển nó tốt. Khi bạn đã có nó, hãy cho mọi người thấy và để họ ngạc nhiên. Sau đó nói "tất nhiên, sẽ tốt hơn nếu chúng tôi thêm vào." Giả vờ nó không quan trọng. Ngồi lại và chờ đợi họ bắt đầu yêu cầu bạn thêm chức năng bạn muốn ban đầu. Mọi người thấy dễ dàng hơn để tham gia một thành công liên tục. Cho họ thấy một cái nhìn thoáng qua về tương lai và bạn sẽ khiến họ tập hợp xung quanh.

Vì vậy, tôi nghĩ rằng nếu bạn bắt đầu làm tốt công việc với kiến ​​thức OO và TDD của mình, chẳng mấy chốc họ sẽ bắt đầu nhìn và hỏi về công việc của bạn.


Cố gắng là vậy, nhưng kiến ​​trúc sư uber (người không viết mã) sẽ không có gì trong số đó.
ThuneGrill

Ngay khi anh ấy nhận thấy lợi ích của TDD và OO tốt hơn (độ tin cậy, năng suất, ...), bạn sẽ nhận được sự chú ý của mình!
Rodrigo

3

Để bán những cách mới để làm việc, bạn cần thể hiện những lợi ích rõ ràng. Viết nhiều lớp trừu tượng hơn, không có lợi ích rõ ràng nhưng mơ hồ: "nó có thể có ích cho tương lai" sẽ không hiệu quả.

Làm cho các nhà máy nơi các nhà máy tạo ra nhiều hơn một loại đối tượng. Sử dụng tiêm phụ thuộc, nơi nó ngay lập tức cho thấy lợi ích. Tạo các giao diện thực sự sẽ được thực hiện bởi nhiều hơn một lớp.

Điều tôi thấy quá thường xuyên trong "OO thực sự" là các kỹ thuật tiên tiến được sử dụng để giải quyết các vấn đề thực sự đơn giản theo cách quá phức tạp.

Làm thế nào bạn có thể cho thấy lợi ích của một nhà máy nếu nó chỉ bao giờ sẽ tạo ra cùng một đối tượng? Tìm một vấn đề trong mã của bạn có lợi từ các kỹ thuật nâng cao và cho thấy quan điểm của bạn và làm việc từ đó.

Chiến tranh được chiến thắng một trận tại một thời điểm.


1

Bạn chỉ có thể thuyết phục họ bằng cách sử dụng một đoạn mã nhỏ và triển khai TDD và thực hành OO tốt hơn trên đó để nhận ra lợi ích. Bạn đã dẫn họ đến miền đất hứa, không chỉ hiển thị những tấm bưu thiếp đẹp của nó.

Chắc chắn, tôi nghĩ rằng có những trường hợp quá trừu tượng được sử dụng trong nhiều cơ sở mã ngày nay. Chỉ đưa vào những gì bạn cần, và bao gồm cả trừu tượng là tốt.


1
Chỉ cần làm, đó là những gì gây ra toàn bộ cuộc thảo luận. Tôi chỉ giới thiệu 3-4 bản tóm tắt về chức năng hiện có
ThuneGrill
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.