7

Làm cách nào để bạn xác định và sửa mã mùi sau:Mã Mùi: Cấu hình cơn ác mộng

Tôi có một ứng dụng khoa học nhỏ mà tôi đang viết phải có khả năng xử lý nhiều biến thể trên cùng một chủ đề. Các hoạt động bên trong của nó được tính toán tốt, chủ yếu sử dụng mẫu phương thức mẫu và một số hàm bậc cao hơn. Tuy nhiên, chỉ rõ cách tất cả các lớp và hàm này sẽ được khởi tạo và sử dụng và với những tham số nào trong chương trình nào đó quá phức tạp đến nỗi đôi khi tôi nghĩ cách dễ nhất để viết nó là viết lại main() cho mỗi lần chạy và biên dịch lại. nó.

Có cách quản lý cấu hình đơn giản, tương đối đơn giản không quá mức đối với một ứng dụng khoa học nhỏ không? Về cơ bản tôi đã chỉ sử dụng thiết bị chuyển mạch dòng lệnh và họ đang nhận được khá khó sử dụng.

Chỉnh sửa: Ứng dụng đủ nhỏ để xây dựng thời gian không đáng kể. Tôi thấy ít lợi thế khi liên kết với ngôn ngữ kịch bản chỉ đơn giản là sửa đổi mã bằng ngôn ngữ mẹ đẻ. (Ứng dụng được viết bằng ngôn ngữ lập trình D.)

Chỉnh sửa # 2: Tôi nghĩ về ý tưởng tệp cấu hình và nó sẽ hữu ích, nhưng tôi cảm thấy việc viết tệp cấu hình sẽ khó gần như viết lại chính() mỗi lần.

+2

làm thế nào về tệp cấu hình XML? hoặc một tập tin .INI –

+2

Tôi có thể thiếu một thứ gì đó, nhưng bạn không thể chỉ thiết lập các tham số đó trong một tệp cấu hình? Bạn có thể tạo các tệp khác nhau cho các kịch bản khác nhau và sau đó chỉ cần thay đổi khi cần. – Jay

+0

Re: Chỉnh sửa 2: Nhưng bạn nói rằng các thiết bị chuyển mạch dòng lệnh đang trở nên khó sử dụng. Đơn giản nhất, bạn chỉ có thể lưu trữ các bộ chuyển mạch dòng lệnh mà bạn sử dụng trong tệp cấu hình của mình và sử dụng nút chuyển trên dòng lệnh để chuyển đổi tệp cấu hình nào bạn sử dụng. Bạn không cần phải thực sự ưa thích để được hầu hết các cách để hướng tới nơi bạn cần. –

Trả lời

7

Từ góc nhìn mẫu thiết kế, mẫu Builder có thể hữu ích cho bạn. Nó sẽ cho phép bạn xác định một số cấu hình mặc định tốt trong khi cho phép bạn ghi đè các bước cụ thể. Nó hoạt động đặc biệt tốt với một Fluent Interface.

Mẫu Facade cũng xuất hiện trong đầu, vì nó cho phép bạn xác định trước các tùy chọn cấu hình chung. Bạn có thể sử dụng Nhà xây dựng để triển khai Mặt tiền.

+0

Giao diện thông thạo sẽ yêu cầu anh ta mã hóa và biên dịch lại để thay đổi cấu hình, đây có phải là vấn đề mà anh ta đang cố gắng loại bỏ không? –

+0

Thành thật mà nói, tôi không thể nói từ câu hỏi. Nếu biên dịch lại là vấn đề, thì bạn chính xác. Nếu vấn đề có liên quan đến khả năng bảo trì, Giao diện thông thạo có thể giúp ... –

0

Có vẻ như bạn cần cung cấp cho mã cốt lõi một ràng buộc trong ngôn ngữ kịch bản yêu thích của bạn và sau đó sử dụng ngôn ngữ đó để tạo cấu hình.

3

Âm thanh như điều tốt nhất cần làm là nhúng ngôn ngữ kịch bản và sử dụng ngôn ngữ đó để thúc đẩy ứng dụng của bạn. Ngôn ngữ kịch bản tạo các tệp 'cấu hình' tuyệt vời. Tôi muốn đề nghị xem xét lua (sử dụng rộng rãi trong các trò chơi) và tcl (sử dụng rộng rãi trong CAD điện tử). Cả hai đều dễ dàng nhúng và nhỏ và dễ học.

0

Nếu bạn có thể đặt tên cho từng bộ cài đặt, bạn chỉ có thể chuyển tên cho().

Ngay cả khi bạn có hàng trăm tham số mà bạn có thể đặt, thực tế bạn thực sự sử dụng bao nhiêu kết hợp? Nếu bạn sử dụng giả sử 4 kết hợp cung cấp cho mỗi tên và bạn thậm chí có thể giữ chúng được mã hóa cứng dưới dạng các tập hợp khác nhau.

Ví dụ khi bạn chọn Hồng quân trong trò chơi chiến lược, có thể có 1000 tham số cho mỗi quân đội nhưng tất cả đều được đặt cho một thứ đại diện cho Hồng quân.

0

Bạn có thể xem một số ngôn ngữ kịch bản như Python và gọi từ main().

Một tùy chọn khác là tạo DSL (Ngôn ngữ riêng cho tên miền) của riêng bạn cho ứng dụng của bạn. Bạn có thể sử dụng ANTLR cho việc này.

1

Nếu D hỗ trợ tuần tự hóa đối tượng thì tại sao không tạo lớp đại diện cho cấu hình của bạn (nó có thể là một lớp có nhiều thuộc tính hoặc một số lớp được tổng hợp bởi lớp cha) và tuần tự hóa/deserialize?

Tôi muốn giới thiệu thêm một chút công việc để tạo một đối tượng cấu hình ví dụ và sắp xếp lại và chỉnh sửa nó để cung cấp cho bạn cấu hình mẫu để làm việc.

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