Làm cách nào để tạo kiến ​​trúc / thiết kế của một ứng dụng trong Agile?


8

Nếu tôi sắp phát triển một ứng dụng Doanh nghiệp, nhưng theo như tôi hiểu từ quy trình nhanh, tôi chia các tính năng thành các phần nhỏ và phát triển chúng lặp đi lặp lại. Tôi đã sử dụng để tạo cơ sở dữ liệu và cốt lõi của ứng dụng trước, sau đó tôi mở rộng các lần lặp này.

Câu hỏi là: Tôi có phải giữ những gì tôi đã từng làm trước đây (phát triển cốt lõi trước tiên) hay tôi phải phân phối phát triển cốt lõi qua phát triển câu chuyện? Sau này, tôi không chắc mã sẽ đủ linh hoạt cho các tiện ích mở rộng trong tương lai!

Bất kỳ ý tưởng?


2
Tỷ lệ cược là bất cứ điều gì bạn cho là "đủ linh hoạt" ở phía trước sẽ quá không linh hoạt hoặc quá linh hoạt.

OK, có kỹ thuật nào để cung cấp thiết kế / kiến ​​trúc tốt trong khi phát triển lặp mà không phát triển lõi trước không? xin lỗi, tôi là người mới nhanh nhẹn: /
Sameh Deabes

Câu trả lời:


11

Đừng phát triển cốt lõi trước . Một nguyên tắc chính của phát triển Agile là viết mã tối thiểu cần thiết cho các tính năng đã hoàn thành. Bằng cách đó bạn có thể giao hàng bất cứ lúc nào. Mã vẫn linh hoạt vì bạn liên tục tái cấu trúc để loại bỏ trùng lặp. Tái cấu trúc được hỗ trợ bởi các thử nghiệm tự động bạn đã viết cho từng tính năng khi bạn xây dựng nó. Lõi phát triển tự động khi bạn tính đến việc sao chép từ mã cấp cao hơn.

Về cơ bản, thay vì xây dựng tính linh hoạt trong một nỗ lực thường vô ích để giảm thiểu các thay đổi mã đắt tiền trong tương lai, Agile xây dựng các thử nghiệm tự động để hỗ trợ tái cấu trúc, do đó thay đổi mã là tương đối rẻ.

Tái cấu trúc của Martin Fowler là cuốn sách yêu thích của tôi về các kỹ thuật tái cấu trúc hiệu quả. Nó dễ dàng hơn nhiều để đưa ra một lõi có thể sử dụng hơn là xác định một mặt trước. Xác định lõi có thể sử dụng trước khi triển khai tính năng là gần như không thể, trừ khi bạn chỉ đang thực hiện lại API hiện có. Và không có giá trị trong đó.


Sau đó, chìa khóa ở đây là tái cấu trúc liên tục + kiểm tra tự động. Cảm ơn bạn!
Sameh Deabes

1
@Girgio: Xin lỗi, không rõ ràng. Tôi có nghĩa là không có giá trị trong việc viết khung đăng nhập của riêng bạn, hoặc ORM, v.v. thay vì chỉ áp dụng một trong nhiều lựa chọn thay thế hiện có. Có vẻ hiển nhiên, nhưng tôi đã thấy nhiều công ty làm điều đó.
kevin cline

1
@kevin: Tôi nghĩ rằng trong một số trường hợp nhất định, có giá trị đi kèm với giải pháp của riêng bạn. Một cái gì đó như Logging tương đối nhỏ trong phạm vi, tôi có thể sẽ sử dụng một giải pháp hiện có. Một cái gì đó giống như một ORM tôi có thể thấy giá trị trong việc tự lăn. Một cái gì đó như Doctrine có mã để xử lý hàng tấn các trường hợp sử dụng và tính năng khác nhau, nhưng nếu tôi chỉ cần 25-30% trong số đó. Nếu tôi tự sở hữu 25-30% chức năng tôi cần, tôi sẽ kết thúc với thứ gì đó nhỏ hơn, dễ sử dụng hơn và có thể hoạt động tốt hơn.
ryanzec

2
Bạn không thể đơn giản cấu trúc lại kiến ​​trúc của một hệ thống. Đây là một huyền thoại phổ biến của nhanh nhẹn và kiến ​​trúc.
Michael

1
@SamehSerag, "Lõi phát triển tự động khi bạn [tái] yếu tố ..." ngụ ý rằng kiến ​​trúc không được lựa chọn tích cực mà chỉ được phép "tự động" xuất hiện bởi các lựa chọn ngẫu nhiên về các quyết định cấp thấp hơn (không phải hệ thống). Đó là vấn đề với việc cố gắng "phát triển" kiến ​​trúc một cách hữu cơ thông qua tái cấu trúc.
Michael

1

Cách tiếp cận của tôi để phát triển nhanh là xây dựng "các lát cắt dọc". Tôi lấy một câu chuyện từ UI để lưu trữ và thực hiện nó. Tôi có một số công cụ gọn nhẹ mà tôi sử dụng để hỗ trợ quá trình này (như khung IRep repository / UnitOfWork đơn giản có bộ điều hợp cho Bộ nhớ (thường để thử nghiệm), Entity Framework và NHibernate. Tại thời điểm này tôi không nghĩ có nhiều đối số về việc người ta có nên sử dụng O / RM hay không mà nên sử dụng cái nào. Và đối với tôi, nó phụ thuộc vào môi trường.

Tôi đã thấy rằng phương pháp này chiến thắng những người không tán thành về phát triển nhanh vì họ sẽ thấy phần mềm hoạt động nhanh hơn so với việc tôi dành nhiều thời gian trước để tạo ra lõi. Kết hợp với Thiết kế hướng tên miền và một số kỹ thuật khác mà tôi sử dụng, tôi thường có thể nhận được rất nhiều chức năng làm việc trước người dùng rất nhanh.

TDD hoặc thậm chí kiểm tra đơn vị hậu hoc rất quan trọng vì một phần của việc duy trì vận tốc khi ứng dụng của bạn phát triển là có mạng lưới an toàn mà bộ kiểm thử đơn vị toàn diện cung cấp. "Tôi cần phải thay đổi lớp học này, làm thế nào để đảm bảo tôi không phá vỡ bất cứ thứ gì?" Với bộ kiểm thử đơn vị tốt, đơn giản như chạy bộ kiểm tra đó. Không, nó trở thành vấn đề chạy thủ công thông qua ứng dụng của bạn để xác minh. Không vui vẻ gì cả.


-1

Chế tạo khung ngang tối thiểu hỗ trợ một lát chức năng dọc. Khung được chế tạo để có thể mở rộng và là nơi tập trung nhiều nỗ lực nhất ban đầu. Các lát cắt dọc của chức năng là để hạ thấp rằng khung hỗ trợ giá trị thực. Trong các lần lặp lại tiếp theo dành ít nỗ lực hơn khi khung được hiện thực hóa và nhiều hơn để xây dựng các khả năng sử dụng khung. Tiếp tục theo cách này cho đến khi phần lớn nỗ lực tập trung vào chức năng bằng cách sử dụng khung phát triển qua các lần lặp.

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.