2010-02-23 22 views
30

Tôi phát triển chủ yếu là các dòng ứng dụng kinh doanh.Không hoạt động khoa học. Không có tính toán phức tạp. Chỉ cần buộc Giao diện người dùng vào cơ sở dữ liệu. Lý do duy nhất tôi sử dụng luồng là làm một số công việc trong nền và vẫn giữ giao diện người dùng trả lời.Dòng ứng dụng kinh doanh: Liệu F # có giúp cho cuộc sống của tôi dễ dàng không?

này có thể không phải là phương pháp tốt nhất nhưng đây là những gì tôi làm theo

1.Create một ứng dụng làm việc đầu tiên (không đề) và đưa nó cho người dùng cuối để chơi vì lợi ích của thông tin phản hồi.
2.Khi tất cả các yêu cầu đều bị khóa, tôi cố gắng sử dụng các chủ đề ở bất cứ đâu có ý nghĩa để cải thiện hiệu suất.

Mã dành cho các bước 1 & 2 là mã khác nhau và luồng luồng thống trị hoàn toàn với mã thực tế.

1.Will F # có giúp cuộc sống của tôi dễ dàng hơn trong trường hợp ứng dụng Line of Business không?
2.Có bất kỳ công nghệ giao diện người dùng cụ thể nào phù hợp nhất với F # không? Tôi chủ yếu làm việc trên ASP.NET & Silverlight. WPF bây giờ là & rồi.
3.Bạn có ví dụ hay về Dòng ứng dụng/trình diễn doanh nghiệp với F # không?

Tôi không hỏi liệu có thể phát triển ứng dụng Line of Business trong F # hay không. Tôi đang hỏi liệu F # có giúp cuộc sống của tôi dễ dàng hơn trong việc phát triển các ứng dụng Line of Business khi so sánh với C# không? Mối quan tâm chính của tôi là luồng & đồng bộ hóa giao diện người dùng.

Trả lời

33

Tôi đang ở trong cùng một chiếc thuyền như bạn, làm rất nhiều và rất nhiều loại ứng dụng loại doanh nghiệp, không có gì "thú vị" như trò chơi hoặc trình biên dịch hoặc công cụ tìm kiếm.

Số dặm của bạn sẽ khác nhau, nhưng ít nhất theo kinh nghiệm của riêng tôi, rất nhiều nhóm dev không muốn nhảy ngay vào F # vì không ai trong nhóm biết hoặc thậm chí đã nghe nói về nó. Và ngay lập tức, bạn phải chiến đấu với những câu hỏi như "nó làm gì khác với C#?" Nếu bạn có thể thuyết phục sếp của bạn để cho phép bạn viết một vài ứng dụng demo với nó, hãy tìm nó!

Vì vậy, với điều đó đang được nói, tôi thấy rằng C# không phải là rất tốt ở quy tắc kinh doanh, nhưng nó xử lý GUIs như một nhà vô địch; Sự bất biến của F # khiến cho việc phát triển GUI trở nên khó xử, nhưng các quy tắc kinh doanh và quy trình công việc cảm thấy tự nhiên. Vì vậy, hai ngôn ngữ có điểm mạnh riêng của họ và khen ngợi điểm yếu của nhau.

Trong các ứng dụng LOB riêng tôi, F # chạy vòng tròn xung quanh C# trong một vài lĩnh vực:

  • 's F # async luồng công việc và xử lý hộp thư bậc độ lớn dễ dàng hơn để làm việc với hơn đề nguồn gốc và thậm chí có thể thao tác thư viện song song . Kể từ khi sử dụng bộ xử lý hộp thư cho giao tiếp xen kẽ, tôi thậm chí không nhớ lần cuối cùng tôi đã phải khóa hoặc thread.join() bất cứ điều gì cho syncronization cả.

  • Xác định công cụ quy tắc nghiệp vụ và DSL với công đoàn FTW! Mỗi ứng dụng LOB không tầm thường mà tôi từng làm đều có ngôn ngữ và thông dịch viên nửa nướng của riêng mình, và hầu như luôn dựa trên đệ quy chuyển đổi một enum để khoan qua các quy tắc và tìm một kết quả phù hợp. Dự án hiện tại tôi hiện có chứa 1300 lớp công cộng, 900 hoặc hơn là các lớp chứa đơn giản để đại diện cho một quy tắc. Tôi nghĩ rằng đại diện cho các quy tắc như là một liên minh F # sẽ làm giảm đáng kể bloat mã và làm cho một động cơ tốt hơn.

  • Mã không thể thực hiện chỉ hoạt động tốt hơn - nếu bạn nhận được một đối tượng mới có trạng thái không hợp lệ, bạn không phải tìm kiếm mã vạch vi phạm, mọi thứ bạn cần biết là có trong cuộc gọi cây rơm. Nếu bạn có một đối tượng có thể thay đổi với trạng thái không hợp lệ, đôi khi bạn phải dành nhiều thời gian theo dõi nó. Bạn có thể viết mã bất biến trong C#, nhưng thực sự khó khăn để không bị mất khả năng đột biến, đặc biệt là khi bạn đang sửa đổi một đối tượng trong một vòng lặp.

  • I ghét nulls. Tôi không thể đưa ra ước tính chính xác, nhưng có vẻ như một nửa số lỗi mà chúng tôi nhận được trong sản xuất là ngoại lệ tham chiếu null - một đối tượng được khởi tạo không đúng cách và bạn không biết về nó cho đến khi bạn có 30 khung ngăn xếp sâu trong mã. Tôi nghĩ F # sẽ giúp chúng tôi viết thêm mã lỗi miễn phí trong lần đầu tiên.

C# thường hoạt động tốt khi:

  • Bạn đang viết code GUI hoặc làm việc với các hệ thống vốn đã có thể thay đổi.

  • Hiển thị DLL hoặc dịch vụ web cho nhiều khách hàng khác nhau.

  • Sếp của bạn sẽ không cho phép bạn sử dụng các công cụ bạn muốn;)

Vì vậy, nếu bạn có thể vượt qua được những "lý do tại sao chúng tôi muốn sử dụng một trở ngại ngôn ngữ mới", tôi nghĩ rằng F # sẽ thực sự làm cho cuộc sống của bạn dễ dàng hơn.

+3

Câu trả lời hay. Điểm duy nhất tôi không đồng ý là tôi nghĩ F # khá tốt cho GUIs quá nếu bạn có một apporach DSL à la WebSharper (http://www.intellifactory.com/) – Robert

+3

+1. Tôi chỉ muốn thêm rằng F # có thể được biên dịch thành một DLL mà sau đó có thể đặt cược được gọi bởi một chương trình C#. Sử dụng tốt nhất tôi đã tìm thấy là khi tôi lưới hai với nhau. – tzenes

+0

@ Juliet, tôi không nghi ngờ bạn nhưng tôi vẫn không chắc chắn lý do tại sao nó là phát triển của GUI sẽ được vốn dễ dàng hơn bất kỳ thực hiện với mutability. Bạn có thể vui lòng chia sẻ một ví dụ cụ thể để giúp tôi hiểu được quan điểm của bạn không? –

10

Đó là một câu hỏi rất khó trả lời - Tôi nghĩ rằng F # sẽ làm cho một số khía cạnh của cuộc sống của bạn dễ dàng hơn nhiều và khó hơn một chút.

Về mặt cộng, xử lý luồng phải tương đối không đau - F # quy trình công việc không đồng bộ là một lợi ích rất lớn. Ngoài ra, F # Interactive làm cho việc lặp lại nhanh chóng và khám phá mã rất dễ dàng. Với tôi, đây là một lợi ích rất lớn so với C#, vì tôi có thể thử nghiệm những thay đổi nhỏ về mã mà không phải trải qua một bản dựng đầy đủ. Ở mặt bên dưới, công cụ cho F # không phải là nơi dành cho C#, điều đó có nghĩa là bạn sẽ không có quyền truy cập vào các công cụ xây dựng GUI, công cụ tái cấu trúc, v.v. Thật khó để nói năng suất lớn như thế nào nhấn điều này sẽ khiến bạn không biết nhiều hơn về kịch bản của bạn. Một cách giải quyết khác là tạo một giải pháp đa ngôn ngữ có mặt trước C# mỏng, nhưng một lần nữa sự phức tạp có thể không đáng để hưởng lợi.

7

@ Juliet và @kvb có câu trả lời hay, tôi chỉ muốn nhắc lại mức độ hữu ích của F # cho việc tạo luồng dễ dàng. Trong bài viết trên blog của tôi "An RSS Dashboard in F#, part six (putting it all together with a WPF GUI)", tôi nói

... Lưu ý việc sử dụng tiện lợi của 'async' ở đây - Tôi sử dụng Async.StartImmediate, có nghĩa là tất cả các mã chạy trên thread UI (nơi Trình xử lý nhấp bắt đầu), nhưng Tôi vẫn có thể thực hiện các chế độ ngủ không bị chặn không làm kẹt giao diện người dùng. Đây là một trong cách mà F # async chỉ thổi các cửa ra vào tắt mọi thứ khác.

...

của chúng tôi “trước” thông tin (“3 phút trước”) sẽ nhanh chóng có được cũ nếu chúng ta không làm mới nó, vì vậy chúng tôi bắt đầu một vòng lặp mà vẽ lại mỗi phút. Sau khi một lần nữa, F # async đá mông, vì tôi có thể chỉ cần viết điều này như thể nó là vòng lặp đồng bộ chạy trên giao diện người dùng , nhưng lệnh chặn không chặn đảm bảo rằng giao diện người dùng vẫn hoạt động. Tuyệt vời. ...

nhưng bài đăng trên blog đó là ví dụ về việc sử dụng F # để mã hóa toàn bộ giao diện người dùng. Điều đó ngụ ý kinh doanh tất cả các công cụ GUI tuyệt vời mà bạn nhận được với C# hoặc VB. Tôi tưởng tượng rằng một phương pháp lai có thể có tiềm năng gần như tất cả các lợi ích của cả hai (với chi phí có hai dự án trong giải pháp mà trước đây bạn đã có), nhưng tôi chưa có kinh nghiệm trực tiếp chia sẻ ở đây.

(Có kinh điển "bài toán ví dụ" của một C ứng dụng # GUI nơi bạn cần phải thêm luồng để cải thiện về hiệu suất hoặc giữ ứng dụng sống trong một số hoạt động lâu? Nếu vậy, tôi có nên kiểm tra xem nó ra.)

+0

@Brian Bài đăng tuyệt vời! Ví dụ về 'giữ ứng dụng hoạt động' trong các ứng dụng Line of Business rất nhiều. Ví dụ: Tạo báo cáo về chuỗi nền và cập nhật giao diện người dùng với các khối dữ liệu được xử lý cho đến thời điểm này. Cải thiện các kịch bản hiệu suất giống như kéo dữ liệu từ các nguồn khác nhau (có thể là cho các vùng khác nhau) và hiển thị nó trên UI.Once một lần nữa cảm ơn cho bài đăng tốt đẹp. – funwithcoding

0

Để giải quyết này tôi đã đăng một vài suy nghĩ của tôi trong việc sử dụng F #,

http://fadsworld.wordpress.com/2011/04/13/f-in-the-enterprise-i/ http://fadsworld.wordpress.com/2011/04/17/fin-the-enterprise-ii-2/

Tôi cũng đang lên kế hoạch thực hiện một video hướng dẫn để hoàn thành chuỗi video và cho biết cách F # có thể đóng góp trong lập trình UX.

Tôi chỉ nói trong ngữ cảnh của F # tại đây.

-Fahad

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