Có ai khác có một vấn đề tái cấu trúc? [đóng cửa]


17

Có vẻ như sau khi tôi đã viết một số lượng mã đáng kể, tôi cảm thấy lo lắng như thể tôi đã không thực hiện nó theo cách tốt nhất có thể, và cuối cùng tôi liên tục tái cấu trúc và dành quá nhiều thời gian cho dự án, hoặc không bao giờ nhận được đôi khi nó được thực hiện Điều này đã từng xảy ra với bất cứ ai khác, và làm thế nào để bạn đối phó với điều này?


16
Bạn cần thời hạn chặt chẽ hơn :)

Bạn đang nói ở đây về mã bạn đang viết cho chính mình (dự án sở thích) hay mã bạn đang viết như một phần công việc của bạn?
Carson63000

Điều này đọc giống như một bản sao của lập trình
viên.stackexchange.com/questions / 8988 / Mạnh

1
Bạn có bất kỳ cơ hội hơi hậu môn ở nơi khác trong cuộc sống? Tôi biết tôi có thể cực kỳ OCD và hoàn thiện nếu tôi cho phép bản thân mình ...
Humphrey Bogart

1
Hoàn hảo là kẻ thù của đủ tốt. Làm tốt công việc Làm cho nó được thực hiện để nó hoạt động. Đừng xem lại nó trừ khi bạn có thể đưa ra bằng chứng thực nghiệm rằng nó có lỗi hoặc đang gây ra cho bạn các vấn đề về hiệu suất.
Blrfl

Câu trả lời:


18

Tôi tận hưởng những khoảnh khắc khi chúng xảy ra với tôi.

Lý do: nếu tôi không nhìn lại công việc của mình và nghĩ rằng có một cái gì đó tôi có thể làm tốt hơn tôi sẽ không thăng tiến như một nhà phát triển. Do đó, khi những khoảnh khắc giác ngộ này xảy ra, hãy nắm lấy chúng và ghi lại những gì bạn đã học. Xem xét thời gian biểu của bạn cho dự án hiện tại và nếu có thể tái cấu trúc mã, nếu không thể lấy bài học và sử dụng nó trong các triển khai trong tương lai cho các dự án.

Dù bằng cách nào, học hỏi từ những sai lầm của chính bạn là một điều tuyệt vời!


8

Dưới đây là một số quy tắc để hạn chế hoạt động này và làm cho nó hiệu quả hơn:

  • hộp thời gian, ví dụ: đặt bộ hẹn giờ thành 25 phút
  • làm điều đó chỉ khi bạn có phạm vi kiểm tra tốt.
  • cố gắng làm cho cấu trúc lại của bạn hữu ích cho sự phát triển của một số tính năng tiếp theo

1
Tôi đồng ý với bạn, nhưng vào (3) ... Tôi sẽ chỉ nghĩ về một vài tính năng tiếp theo nếu tôi chắc chắn những tính năng đó phải được đưa vào phiên bản tiếp theo, bởi vì nếu không bạn có thể rơi vào YAGNI (You Ain ' t Gonna cần nó). Tôi đề nghị đọc cuốn sách "Tái cấu trúc: Cải thiện thiết kế mã hiện tại" của Martin Fowler và Kent Beck.
Oscar Mederos

1
@Oscar: đồng ý. Ý tôi là tránh tái cấu trúc vì lợi ích của chính nó và tạo ra YAGNI.
azheglov

7

Có vẻ như bạn luôn có thể cấu trúc lại, phải không? Tôi cố gắng hạn chế tái cấu trúc chỉ khi cố gắng giải quyết các vấn đề khác. Ví dụ, tái cấu trúc khi bạn gặp vấn đề về hiệu năng và tái cấu trúc với sự giúp đỡ bạn giải quyết nó - tái cấu trúc khi bạn cần thêm chức năng mới và tái cấu trúc sẽ giúp bạn giải quyết nó


3

Thành thật mà nói, tôi sẽ lo lắng nhiều hơn nếu bạn tạo ra những dòng mã lớn và nghĩ rằng nó hoàn hảo và không cần bất kỳ sự tái cấu trúc nào ...

Khi tôi còn trẻ và thiếu kinh nghiệm, tôi rất kiêu ngạo về khả năng lập trình của mình và luôn có xu hướng tưởng tượng rằng có thể thiết kế và lên kế hoạch thực sự tốt - và khi tôi bước vào giai đoạn thực hiện, tôi sẽ chỉ ra nó và nó ' Tất cả sẽ hoàn hảo.

Thực tế gần như ngược lại. Một số người thậm chí còn nói rằng ngay khi bạn bắt đầu viết mã, bạn nên ở chế độ Bảo trì. Ý tưởng ở đây là giai đoạn "Thực hiện" của SDLC không thực sự tồn tại như vậy, bởi vì bạn không bao giờ nên sửa lỗi hoặc tái cấu trúc sang một bên và giả vờ rằng mã bạn đang sản xuất là "mới" và hoàn hảo.

Tất cả những gì đã nói, tôi cho rằng nó càng tốt để có được quá ám ảnh về refactoring. Tôi chưa nhìn thấy nó. Và tôi càng có nhiều kinh nghiệm, tôi càng nghĩ rằng đó sẽ là một điều tốt nếu nhiều nhóm phần mềm kiên quyết từ chối làm việc để thắt chặt thời hạn và đi vào nợ kỹ thuật. Rốt cuộc, đây là lý do phổ biến nhất khiến việc tái cấu trúc bị gạt sang một bên trong thế giới thực.


2

Tôi sẽ đề nghị không phụ thuộc hoàn toàn vào cảm giác hoặc mùi mã.

Liệt kê rõ ràng những gì sai với mã và các giải pháp là gì. Nghiêm túc, viết nó xuống, bởi vì bạn sẽ muốn xem lại hiệu quả của trình tái cấu trúc của bạn chống lại điều này.

Xác định các cách để chia nhỏ bộ tái cấu trúc thành các phần có thể đạt được và ưu tiên chúng. Có kỷ luật chỉ tập trung vào phạm vi của từng đoạn, tránh các tiếp tuyến có thể làm suy yếu nhiệm vụ của bạn.

Ngoài ra, xác định đơn vị kiểm tra đơn vị nào bạn có thể viết đối với mã hiện có trước khi bạn tiến hành. Nếu đã có thử nghiệm rộng rãi, đó là một điều tuyệt vời. Thiếu các bài kiểm tra đơn vị đại diện cho một cơ hội tuyệt vời để thực hiện một số.


1

Không có nghi ngờ gì tôi rơi vào cái bẫy này nhưng một số tái cấu trúc là quan trọng cho việc hỗ trợ / gỡ lỗi trong tương lai.

Khi viết một đoạn mã chính, sẽ rất dễ dàng để theo dõi các dòng mã vào phương thức hiện đang được viết. Khi tôi hoàn thành một đoạn mã chính, tôi đặt một việc cần làm : bình luận đánh giá mã . Sau đó vài ngày tôi sẽ thực hiện đánh giá mã và cấu trúc lại cho phù hợp. Nếu tôi gặp khó khăn trong việc đọc nó một vài ngày sau đó, những gì sẽ xảy ra trong một vài tháng hoặc thậm chí vài năm.


1

Tôi rơi vào cái bẫy này khi lần đầu tiên tôi học một ngôn ngữ hoặc công nghệ. Ví dụ, khi bạn lần đầu tiên học java, hãy tưởng tượng bạn viết một ứng dụng web với một servlet, nghĩ rằng đó là cách đúng đắn. Sau đó, bạn nhận ra có jsp và bạn nghĩ oh đó mới hơn có lẽ đúng. Sau đó, khi bạn đi được nửa chặng đường, bạn sẽ tìm thấy Struts và có thể một số nội dung EJB, sau đó bạn tìm thấy mùa xuân (dựa trên xml), sau đó bạn tìm thấy các chú thích @MVC thú vị, sau đó bạn thấy nó quá dài dòng và bạn tha hồ tìm kiếm sự lựa chọn giữa Groovy / grails và scala / thang máy! Điều này là hoàn toàn tốt cho các dự án cá nhân vì điểm thường là để học và không nhất thiết phải đạt một số thời hạn.

Tôi cũng từng là người tái cấu trúc trong công việc. Nhưng khi tôi có được nhiều kinh nghiệm hơn, tôi trở nên chọn lọc hơn về những gì tôi sẽ tái cấu trúc. Hóa ra khi bạn rời khỏi một công ty, bạn không mang theo mã và thường các kỹ sư khác có thể phá mã gần như nhanh hơn bạn có thể sửa nó.


1

Quy tắc ngón tay cái tôi tuân theo là: Tôi tái cấu trúc cho đến khi nó được tối ưu hóa như lúc đó và sau đó tôi không tái cấu trúc lại trừ khi tình huống thay đổi, hoặc hiếm khi tôi có cảm hứng về một cách mới và tốt hơn để làm mọi việc (ví dụ sử dụng một tính năng ngôn ngữ mới).

Chẳng hạn, tôi đã từng phải viết một mô-đun mã mới cho một ứng dụng hiện có. Tôi đã viết nó theo một cách nào đó, và ngày hôm sau tôi đã suy nghĩ nhiều hơn và hình dung rằng tôi có thể tái cấu trúc nó và làm cho nó trừu tượng hơn vì chúng tôi khá chắc chắn rằng nó sẽ cần được mở rộng cho các mục đích sử dụng khác. Vì vậy, tôi tái cấu trúc mã ra. Sau đó, tôi quyết định nó quá chung chung và tôi hợp nhất một số lớp và giao diện về cơ bản đang làm điều tương tự, sử dụng Generics (C #) để có cùng chức năng. Tại thời điểm này tôi có thể có thểtái cấu trúc thêm để làm cho nó thậm chí còn tốt hơn, nhưng nó "đủ tốt" - mã được viết tốt, tuân theo các mẫu thiết kế phù hợp và các khái niệm kỹ thuật, và có thể mở rộng. Tôi sẽ chỉ cấu trúc lại nó một lần nữa nếu các yêu cầu buộc tôi phải đánh giá lại mã hoặc nếu có một tính năng ngôn ngữ có thể làm cho mã rõ ràng hơn và / hoặc dễ đọc hơ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.