Làm thế nào để tổ chức mã lặp đi lặp lại?


11

Nhóm của tôi tạo ra rất nhiều hình thức web một lần. Hầu hết các hình thức này chỉ gửi một e-mail, và một số ít làm một cơ sở dữ liệu đơn giản.

Ngay bây giờ, mỗi hình thức sống trong giải pháp riêng biệt của mình trong Visual Studio Team Foundation Server. Điều đó có nghĩa là chúng tôi có gần 100 dự án hình thức khác nhau, điều này gây khó khăn cho việc duy trì tính nhất quán. Mỗi hình thức là duy nhất trong đó các lĩnh vực là khác nhau, nhưng tất cả chúng đều làm khá nhiều điều giống nhau.

Tôi đang tìm cách ngưng tụ những thứ này bằng cách nào đó, và tôi thực sự có thể sử dụng một số hướng dẫn.

  • Tôi có nên cố gắng tạo một tệp giải pháp với tất cả các dự án biểu mẫu của chúng tôi không? Không có nhiều mã hệ thống ống nước, mặc dù tôi có thể tạo một vài lớp trợ giúp để giúp định dạng e-mail và như vậy. Sẽ rất hữu ích khi có thể chia sẻ CSS, JavaScript, điều khiển và hình ảnh trên các dự án.
  • Cho rằng chúng tôi là một cửa hàng của Microsoft, có bất kỳ lợi ích hữu hình nào khi sử dụng một cái gì đó như MVC trên Webforms cho kịch bản cụ thể này không? Tôi được bán trên toàn bộ khái niệm MVC, nhưng nó có giúp tôi tập hợp một biểu mẫu thu thập dữ liệu 15 trường hiệu quả hơn không nếu tất cả các hình thức đó được gửi một e-mail? Hình thức khiến tôi suy nghĩ về điều này có một chút logic được tích hợp để hiển thị và ẩn các trường dựa trên phản hồi của người dùng và có vẻ như việc sử dụng MVC và jQuery sẽ kém hiệu quả hơn.

2
Điều này đã được di chuyển ở đây từ meta là gì? Nên về SO.
Josh K

1
@Josh Stack Overflow dành cho các câu hỏi liên quan trực tiếp đến các vấn đề cụ thể trong mã. Chương trình và thiết kế quy trình làm việc là chủ đề ở đây.

@Mark: Điều này không có vẻ rất chủ quan, vì trong đó sẽ có n giải pháp "thực hành tốt nhất" lý tưởng dễ dàng được đưa ra. Tôi không phải là một anh chàng MS nên tôi không biết biến chứng là gì, tuy nhiên tôi sẽ mạo hiểm đoán rằng điều này sẽ được trả lời tốt nhất theo cách không chủ quan.
Josh K

Đã đồng ý. Điều này sẽ bị đóng trên SO.
Walter

1
Nó đã được hỏi về SO ở đây
ChrisF

Câu trả lời:


3

Tái bao thanh toán một cách an toàn mà không cần kiểm tra là khó khăn và đầy nguy hiểm.

Tôi sẽ bắt đầu bằng cách:

  • Viết (các) trường hợp kiểm tra bao gồm các loại đầu vào khác nhau vào các biểu mẫu đó và đầu ra dự kiến. Nghe có vẻ như điều này sẽ không thực sự mất quá nhiều thời gian vì bạn cảm thấy hầu hết các hình thức này giống hệt nhau về chức năng hoặc gần với nó.

  • Chạy các trường hợp thử nghiệm này với các biểu mẫu 100 hoặc hơn (bật phạm vi bảo hiểm mã để giúp bạn theo dõi các lộ trình mã).

Sau đó, bạn đang ở trong một vị trí để xem những gì bạn có thể tái xác định một cách an toàn, sau đó bạn có thể (một ví dụ):

  • Chạy công cụ phát hiện sao chép mã của bạn (không chắc nó được gọi là gì trong .NET, trong Java chúng tôi có CPD). Ngay lập tức loại bỏ 13 hình thức giống hệt nhau. Bây giờ chạy lại các bài kiểm tra - Yay! Tất cả đều vượt qua ngoại trừ mẫu 11, OK, vì vậy chúng tôi chưa thể xóa nó.

  • Xóa tất cả mã định dạng email cục bộ và nhận tất cả các biểu mẫu để gọi đến một mô-đun xử lý email chung. Chạy thử nghiệm, tất cả đều vượt qua ngoại trừ một, hhmmm OK .... Các ký tự UTF-8, sửa lỗi đó trong mô-đun chung, chạy thử nghiệm lại, yay tất cả chúng ta đều tốt!

rửa sạch và lặp lại.


2
+1 Xem Michael Feathers hoạt động hiệu quả với Mã di sản amazon.com/dp/0131177052 để biết các gợi ý về cách tiếp cận tái cấu trúc.
Michael Brown

Ohhhh tài liệu tham khảo tốt - Tôi thích cuốn sách đó.
Martijn Verburg

0

Tôi muốn đề nghị trừu tượng hóa phần nộp. Sử dụng Model / View / Controller, đặt các biểu mẫu vào View và để chúng sử dụng cùng một bộ điều khiển. Bộ điều khiển này có thể thực hiện một hành động chung, như gửi email đến địa chỉ mặc định hoặc chuyển hướng dữ liệu biểu mẫu đến bộ điều khiển có thể. Bằng cách đó, tất cả những gì bạn phải làm để tạo một biểu mẫu mới là tạo biểu mẫu và hướng đầu ra đến bộ điều khiển đó. Kiến trúc này có thể được chứa trong một dự án duy nhất, cho phép bạn chia sẻ CSS và javascript như bạn đã đề cập.

Để xử lý định dạng email, tôi sẽ bắt đầu bằng cách tạo một trình định dạng chung, giả sử một danh sách chỉ liệt kê các tên và giá trị của thành phần biểu mẫu, cũng như các kiểu metdata khác như thời gian gửi, v.v. Bạn có thể làm điều này như bạn muốn . Sau đó, nếu bạn thực sự cần xử lý tùy chỉnh nhiều hơn thế, hãy thêm một nhà máy. Nhà máy sẽ trả về một giao diện định dạng. Sau đó, trong nhà máy, bạn có thể tìm kiếm một bộ định dạng cho biểu mẫu cụ thể đó hoặc trả về mẫu chung nếu không có mẫu cụ thể nào tồn tại. Thiết kế này cũng sẽ giúp cho việc kiểm tra đơn vị dễ dàng hơn của bộ điều khiển, vì bạn có thể dễ dàng cung cấp một bộ định dạng giả cho mục đích thử nghiệm.

Ngẫu nhiên, tôi sẽ không đặt địa chỉ email làm đối số từ biểu mẫu. Nếu bạn cần gửi đến nhiều địa chỉ, tôi khuyên bạn nên có một bảng tra cứu có chứa tất cả các biểu mẫu và email để gửi chúng đến. Điều này có thể được thực hiện bằng XML hoặc bằng mã (tôi đã thấy cả hai, mặc dù tôi không chắc liệu nó có tốt hơn không). Điều này sẽ giúp tránh những kẻ gửi thư rác nhận địa chỉ email của bạn từ trang mẫu.


Cảm ơn vi đa trả lơi. Trong kiến ​​trúc này, bạn sẽ xử lý định dạng các e-mail được gửi ở đâu? Tôi muốn trừu tượng hóa điều này, nhưng tôi không thể nghĩ ra cách nào để thực hiện định dạng mà không cần tạo trình tạo chuỗi và thả các trường vào giữa các khối văn bản tĩnh. Điều này có vẻ cụ thể cho từng hình thức.
Josh Earl

Ngoài ra, có đề xuất nào về việc xử lý logic biểu mẫu như điền vào danh sách thả xuống dựa trên lựa chọn trong một danh sách thả xuống khác không? JQuery có phải là lựa chọn duy nhất nếu chúng ta đi với tuyến đường MVC không?
Josh Earl

@JoshEarl: Tôi đã chỉnh sửa một ý tưởng cho trình định dạng, nhưng tôi không thể đưa ra bất kỳ đề xuất nào về jQuery, v.v ... Phía trang web không phải là một lĩnh vực tôi hoàn toàn không thể đưa ra khuyến nghị. Bạn có thể phải đi với một thiết kế MVC đầy đủ, một bộ điều khiển trên mỗi trang, nếu mọi thứ quá phức tạp. Như @Martijn đã nói, kiểm tra đơn vị sẽ giúp bạn thấy chính xác yêu cầu của bạn là gì. Thiết kế của tôi giả định khá nhiều sự tương đồng giữa các hình thức.
Michael K
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.