2009-02-25 26 views
5

Tôi hiện đang sử dụng ASP.NT MVC RC1 để triển khai ứng dụng timesheet cơ bản. Tôi muốn tuân theo các nguyên tắc DRY nhưng thấy khó khăn trong một trường hợp cụ thể:Làm thế nào để giữ DRY khi logic cần triển khai C# và Javascript?

Một trong các chế độ xem của tôi, có một số hộp văn bản biểu thị số giờ dành cho một tác vụ cụ thể, hộp văn bản mỗi ngày trong tuần. Khi tôi tải trang ban đầu, tôi muốn một hộp văn bản trong chế độ xem hiển thị tổng số giờ đó. Ngoài ra, tôi muốn tổng số đó cập nhật khi tôi thay đổi các giá trị trong hộp văn bản. Bản cập nhật cho các hộp văn bản không gây ra một postback đầy đủ, chỉ có một postback AJAX mà không làm bất cứ điều gì với các kết quả (postback cập nhật giá trị trên DB nhưng trả về ActionResult là một EmptyResult vì không có gì tôi cần phải cập nhật trên Giao diện người dùng).

Hiện tại tôi có bộ điều khiển tạo chế độ xem được điền bằng "tổng" cho chế độ xem đó, do đó, logic bổ sung tất cả các giá trị nằm trong bộ điều khiển C#. Về phía giao diện người dùng, tôi có javascript cập nhật tổng số trên cấp độ giao diện người dùng. Nhưng điều này là không tốt bởi vì nếu tôi thay đổi logic đằng sau cách tính tổng số đó, tôi phải thay đổi nó ở hai nơi! AHH! KHÔNG KHÔ!

Vì vậy, làm cách nào tôi có thể thực hiện việc này? Câu trả lời duy nhất mà đến với tôi cho đến nay là để phế liệu mã javascript tính toán tổng số trên giao diện người dùng và thay vào đó có postback AJAX trả lại "tổng" mới cho xem đó.

Có cách tiếp cận nào khác không?

Trả lời

1

Có logic cho tổng thời gian trong cả C# và Javascript không phải là DRY theo nghĩa hẹp nhất, điều đó đúng. Người ta có thể chia lông trên thực tế rằng họ là hai ngôn ngữ khác nhau hoạt động trong hai môi trường riêng biệt, nhưng vào cuối ngày nếu bạn thay đổi một trong những bạn phải thay đổi cả hai.

Tôi nghĩ đó là sự cân bằng giữa biểu mẫu và chức năng. Làm thế nào quan trọng là nó có javascript? Nếu cuộc gọi AJAX chỉ là quá chậm (một khả năng thực sự) thì đây có thể là lúc để nhận ra rằng nguyên tắc DRY là một nguyên tắc hướng dẫn, chứ không phải là một luật.

+2

Nó * là * nguyên tắc hướng dẫn, không phải là luật. Nếu bạn cần logic cả hai nơi, và nó không phải là khả thi về mặt kỹ thuật để chia sẻ cùng một triển khai, thì bạn sẽ phải thực hiện nó hai lần. Thật may mắn, đó là cuộc sống. ;) – jalf

+0

@jalf: chính xác. Một (bất kỳ) hướng dẫn không phải là một định luật không thể phá vỡ của sự tồn tại. – Richard

+0

OK, đã lưu ý và thay đổi;) –

0

Nếu bạn muốn mã thực thi trên cả máy chủ và máy khách, bạn có thể sử dụng/viết cây biểu thức cho trình biên dịch JavaScript.

Trên máy chủ, bạn đánh giá biểu thức và gửi cùng một biểu thức được dịch sang JavaScript cho khách hàng.

+0

Bạn có đề xuất sử dụng trình dịch Javascript C# -> để tạo phía ứng dụng javascript không? Hoặc có lẽ bạn có nghĩa là sử dụng javascript ở phía máy chủ cũng như phía khách hàng? –

+0

Không, tôi nghĩ anh ta có nghĩa là "biểu thức" có thể được thực hiện bởi cả C# AND Javascript –

+0

Có và không. Cây biểu thức là các biểu diễn trong bộ nhớ của một tập con của các biểu thức C#/VB.NET. Chúng có thể dễ dàng được đánh giá trên máy chủ. Tuy nhiên, bạn phải viết một thành phần dịch các cây biểu hiện này thành JavaScript. –

3

Bạn có thể thử Nikhil Kothari's Script# project. Đó là một trình biên dịch chéo biên dịch và dịch từ C# sang javascript độc lập của trình duyệt, cho phép bạn chia sẻ logic. Nó được sử dụng bởi nhiều nhóm bên trong Microsoft cho chính xác mục đích đó.

hơn, từ trang web:

Script # mang lại năng suất cho Ajax và phát triển JavaScript. Script # là công cụ miễn phí cho phép nhà phát triển viết mã C# nguồn và sau đó biên dịch mã thành tập lệnh thông thường, hoạt động trên tất cả các trình duyệt hiện đại và tận dụng năng suất và sức mạnh của các công cụ .NET hiện có cũng như Visual Studio IDE. Kịch bản # trao quyền cho bạn với phương pháp phát triển và phương pháp tiếp cận mang lại kỹ thuật phần mềm, khả năng bảo trì dài hạn và phương pháp tiếp cận phát triển có thể mở rộng cho các ứng dụng Ajax, thành phần và khung công tác của bạn.

Kịch bản # được sử dụng rộng rãi bởi các nhà phát triển trong xây dựng Microsoft trải nghiệm Ajax trong Windows Live, Office để đặt tên chỉ là một cặp vợ chồng, như là cũng như của một nhà phát triển và công ty bên ngoài bao gồm Facebook. Nếu bạn đang xây dựng các ứng dụng RIA dựa trên Ajax, bạn nợ chính mình để thử Script # hôm nay và xem liệu nó có thể giúp cải thiện phát triển Ajax của riêng bạn không!

Các vấn đề liên quan