Có, FP có thể được sử dụng trong các ứng dụng doanh nghiệp. Clojure là một ví dụ về ngôn ngữ FP thành công trong doanh nghiệp: http://cognitect.com/clojure#successstories
Đại diện cho trạng thái có thể là một thách thức trong FP và thay đổi mô hình để phù hợp với FP có thể là một chút khó khăn trong tâm trí. Một số ngôn ngữ FP hoàn toàn không cho phép bên ảnh hưởng và trạng thái có thể thay đổi. Clojure cho phép cả hai nhưng không khuyến khích hoặc cô lập những mô hình đó.
Nói tóm lại, đại diện nhà nước có thể rất giống với OO. Đó là sửa đổi nhà nước rất khác nhau. Vì vậy, ví dụ, ở trạng thái FP có thể được thể hiện bằng danh sách và bản đồ. Một danh sách nhân viên có thể trông giống như:
[[name: "James Brown" address: "Barnwell, SC"]
[name: "Elvis Presley" address: "Tupelo, MS"]]
Có hai cách tôi biết để xử lý sửa đổi trạng thái trong FP. Một là một cái gì đó giống như lập trình phản ứng chức năng. Trong mô hình này, tất cả trạng thái chỉ được xử lý ở mức cao nhất ... ví dụ: chế độ xem HTML của ứng dụng của bạn có trạng thái trong chế độ xem (như tên người, địa chỉ, v.v.). Bây giờ khi bạn nhấp vào "cập nhật tên", một chức năng được gọi là xử lý mọi điều về cập nhật tên ngoại trừ thực sự thay đổi tên. Điều này nghe có vẻ kỳ lạ ... nhưng hãy chịu đựng tôi. Tên đã thay đổi sau đó sẽ được trả về bởi hàm và chế độ xem (hoặc lưu trữ dữ liệu liên tục, v.v.) sẽ hiển thị tên mới. Hoặc, thay vào đó, toàn bộ cấu trúc mới với tên được cập nhật sẽ được trả về. Vậy chức năng này làm gì? Nó xác nhận tên và trả về tên mới nếu nó hợp lệ, lỗi nếu không, và có thể một chế độ xem mới hoặc liên kết điều hướng để theo dõi. Đối với một cái gì đó phức tạp hơn một sự thay đổi tên, nó có thể làm nhiều hơn nữa.
Vì vậy, đối với FRP, đối tượng được trả về bởi hàm là trạng thái mới và có thể được cung cấp trực tiếp cho khung nhìn hoặc bất cứ thứ gì ở mức cao. Trong một số trường hợp, FRP đưa toàn bộ trạng thái chuyển nó vào hàm và lấy lại toàn bộ trạng thái.
Với mô hình này, bộ chứa hoặc khung cần xử lý cập nhật màn hình, cơ sở dữ liệu hoặc bất cứ thứ gì khác cần cập nhật từ trạng thái mới. Vì vậy, bạn có thể tưởng tượng một khung vẽ ứng dụng trên màn hình. Khi người dùng nhấp vào một cái gì đó chức năng được gọi và trạng thái mới được trả về. Khung sau đó cập nhật màn hình bằng cách vẽ lại mọi thứ hoặc vẽ lại một cách thông minh các phần của màn hình. Xem http://blog.getprismatic.com/om-sweet-om-high-feftal-frontend-engineering-with-clojurescript-and-react/
Clojure sử dụng mô hình thứ hai mà tôi đã gặp và đó là cách ly các thay đổi trạng thái nhưng không nhất thiết phải hạn chế chúng ở mức cao nhất. Với Clojure, tất cả trạng thái có thể thay đổi phải được "giữ" (trừ khi bạn đang sử dụng các đối tượng Java cho trạng thái) bởi một nguyên tử, tác nhân hoặc tham chiếu. Cách thức hoạt động này là đối tượng được giữ hoặc chỉ hoặc tham chiếu (tuy nhiên bạn muốn gọi nó) bởi nguyên tử / tác nhân / ref là bất biến, nhưng nguyên tử / tác nhân / ref có thể thay đổi để trỏ đến một đối tượng mới. Trong trường hợp này, bạn sử dụng các phương thức đặc biệt trên nguyên tử / tác nhân / ref có nội dung "cập nhật đối tượng ở đây bằng cách thực hiện và làm như vậy và gán lại nguyên tử / tác nhân / ref cho một đối tượng mới".
Tại sao điều này có lợi bạn có thể yêu cầu? Bởi vì đối tượng bất biến được tham chiếu bởi các cấu trúc Clojure này có thể được truyền cho một hàm thực hiện điều gì đó và trong khi chức năng đó đang chạy tham chiếu đến đối tượng được đảm bảo không thay đổi. Đó là, nguyên tử / tác nhân / ref không được truyền cho hàm nhưng đối tượng bất biến được chỉ ra bởi chúng được truyền. Các nguyên tử, tác nhân và ref có các thuộc tính đặc biệt xử lý các cập nhật và đồng thời theo cách an toàn và là một phần của ngôn ngữ. Xem http://clojure.org/state
Tôi hi vọng cái này giúp được. Tôi đề nghị đọc thêm về trạng thái Clojure và FRP để hiểu rõ hơn về cách nhân viên và người có thể được đại diện trong FP. Mặc dù, biểu diễn thực tế sẽ tương tự như lập trình hướng đối tượng ... đó là khả năng biến đổi thực sự khác biệt.