2017-04-07 32 views
7

Tôi đã được yêu cầu chụp lại thiết kế của hệ thống được thực hiện bằng cách áp dụng các nguyên tắc lập trình chức năng trong C#. Yêu cầu cho việc này là sử dụng bất kỳ loại hình thức nào để mô tả thiết kế, chứ không phải là tiếng Anh không chính thức. Ngoài ra, việc sử dụng UML bị cấm.Thiết kế mô hình chức năng

Tôi đã chọn thử sử dụng F # cho các mục đích này, nhưng gặp khó khăn để giữ mức cao trừu tượng mà không cần phải thực hiện lại mọi thứ bằng F #.

Vì vậy, tôi có vài câu hỏi:

  1. Có bất kỳ khuôn khổ kiến ​​trúc/thực hành như thế nào để mô tả thiết kế chức năng?

  2. Tôi làm cách nào để hiển thị các phương pháp mà không có chi tiết triển khai?

  3. Cách tạo giao diện thành phần trong F #?

  4. Trong OO, bạn thường có các chế độ xem khác nhau cho kiến ​​trúc (ví dụ như 4 + 1). Có cái gì đó như thế cho thiết kế chức năng?

Trả lời

0

Đối với 1: Không phải là tôi biết nhưng tôi không phải là một loại kiến ​​trúc của nhà phát triển

Đối 2: Dưới đây là một kỹ thuật tôi sử dụng và như rất nhiều.

let memoize (f : 'K -> 'V) : 'K -> 'V = 
    let dict = Dictionary<'K, 'V>() 
    fun k -> 
    match dict.TryGetValue k with 
    | true , v -> v 
    | false, _ -> 
     let v = f k 
     dict.[k] <- v 
     v 

Đối với 3: Ý bạn là gì bởi giao diện thành phần?

Đối với 4: 4 + 1 phải hợp lệ đối với các ngôn ngữ chức năng cũng như ngôn ngữ đó có vẻ là ngôn ngữ độc lập. Nói chung tôi thấy thiết kế chức năng tập trung nhiều hơn vào các chức năng bậc cao, tách dữ liệu và hành vi, thích bất biến hơn tính đột biến và nâng tác dụng phụ "lên trên" (IO Monad là một ví dụ về điều này).

1

TLDR là tất cả về bố cục.

Mọi thứ bạn được yêu cầu sử dụng HKT (nghĩ về chúng như Generic Generics) chủ yếu là tài sản khổng lồ cho thiết kế thư viện, khi bạn đi lập trình hàm thuần túy, về cơ bản thì khác với tư duy GO4 hoặc từ thông dụng mới trong tuần cho lập trình doanh nghiệp.

Tìm hiểu Haskell, tìm hiểu về Monads, Functors, Applicatives, Monoids, v.v. (Đừng sợ bạn đã sử dụng chúng hơn 9000 lần mà không nhận ra nó) Sau đó nhìn vào những thứ như Free Monad nồi hơi tấm, ống kính, Typeclasses, và máy biến áp phong cách MTL và sau đó bạn sẽ là một lập trình viên thư viện tốt hơn nhiều.

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