I. Giới thiệu Với sự phát triển không ngừng của công nghệ, các loại hình và kịch bản ứng dụng của ngôn ngữ lập trình ngày càng trở nên phong phú. Trong số đó, YAMLAin'tMarkup Language (YAML) được sử dụng rộng rãi trong việc biên dịch các tệp cấu hình như một tiêu chuẩn tuần tự hóa dữ liệu ngắn gọn và dễ đọc. Là ngôn ngữ cốt lõi của nền tảng phát triển của Microsoft, các tính năng mạnh mẽ và nhiều ứng dụng của C khiến nó trở thành một trong những lựa chọn hàng đầu cho các nhà phát triển. Bài viết này sẽ giới thiệu cách sử dụng YAML trong C và sử dụng một dự án có tên là "nohutyemek" làm ví dụ để chỉ ra cách mã YAML có thể được sử dụng kết hợp với mã C. 2. Giới thiệu về YAML YAML là một tiêu chuẩn tuần tự hóa dữ liệu dễ đọc và bằng văn bản với cú pháp đơn giản hỗ trợ nhiều ngôn ngữ lập trình. Sử dụng YAML trong các tệp cấu hình giúp thông tin cấu hình rõ ràng và dễ quản lý hơn. Ngoài ra, YAML hỗ trợ các cấu trúc lồng nhau để thể hiện rõ ràng các mối quan hệ phân cấp. 3. Sử dụng YAML trong C Để sử dụng YAML trong C, các nhà phát triển có thể sử dụng các thư viện của bên thứ ba như Serilog và YamlDotNet. Các thư viện này cung cấp một API phong phú giúp dễ dàng đọc và ghi dữ liệu YAML trong C. Trước tiên, bạn cần nhập các tệp thư viện thích hợp vào dự án của mình và sau đó bạn có thể bắt đầu làm việc với dữ liệu YAML của mình. 4. Tổng quan dự án Nohutyemek "Nohutyemek" là một tên dự án giả định liên quan đến việc đọc và ghi các tệp cấu hình. Trong dự án này, chúng ta cần sử dụng YAML để lưu trữ thông tin cấu hình như thông tin kết nối cơ sở dữ liệu, cài đặt ứng dụng, v.v. Đồng thời, chúng ta sẽ sử dụng C để viết logic ứng dụng và đọc và ghi các tệp YAML. 5. Ví dụ về mã YAML Giả sử dự án "Nohutyemek" của chúng ta cần thông tin cấu hình sau: ''Yaml Ví dụ về tệp cấu hình nohutyemek.yaml cơ sở dữ liệu: connectionString: "Chuỗi kết nối cơ sở dữ liệu" user:"Tên người dùng cơ sở dữ liệu" Mật khẩu: "Mật khẩu cơ sở dữ liệu" Đăng nhập: Cấp độ: Cấp độ nhật ký "Thông tin" path: Log Path: Đường dẫn lưu trữ tệp nhật ký ``` Đây là ví dụ về tệp cấu hình YAML đơn giản chứa thông tin kết nối cơ sở dữ liệu và cài đặt nhật ký. Trong dự án thực tế, bạn có thể thêm nhiều mục cấu hình hơn nếu cần. 6. Ví dụ về mã C Dưới đây là mã mẫu để đọc và ghi dữ liệu YAML trong C: ''Cạch ngoạc sử dụng hệ thống; sử dụng YamlDotNet.Serialization; Giới thiệu thư viện YamlDotNet sử dụng YamlDotNet.RepresentationModel; Giới thiệu các không gian tên có liên quan để sử dụng các lớp mô hình đối tượng YAML namespaceNohutYemekProject//Định nghĩa không gian tên dự án { classProgram//Điểm vào chương trình { staticvoidMain(string[]args)//Điểm vào của hàm chính bắt đầu từ mã, hoạt động hoặc cấu trúc có liên quan của phương thức Main. Hãy chắc chắn rằng đầu ra là chính xác! Điều này sẽ được sử dụng để tải các tệp cấu hình và in thông tin liên quan để hiểu chi tiết về hoạt động và đảm bảo tính chính xác của việc đọc và có thể giải quyết vấn đề nếu chúng gặp phải; Thật thuận tiện để kết nối với các chi tiết phát triển của các phần khác của quá trình theo dõi sau này. (ví dụ: lệnh gọi phát triển API backend). Điểm có thể dựa vào là tính toàn vẹn của mã (không phải vì đầu ra phụ thuộc vào một đoạn mã không hoàn chỉnh không thể chạy). Đảm bảo rằng mã đang hoạt động bình thường và xuất ra kết quả mong muốn. Khi viết mã, hãy đảm bảo tuân theo các thói quen và chuẩn mực lập trình tốt để đảm bảo rằng mã mạnh mẽ và có thể duy trì được. Để đơn giản, hãy sử dụng hàm chính để bắt đầu đọc bản demo tệp cấu hình thay vì sử dụng lệnh gọi gắn API thực hoặc mã xử lý logic nghiệp vụ chương trình thực tế. Mã xử lý logic nghiệp vụ cụ thể có thể được viết theo yêu cầu thực tế của dự án. Hãy cẩn thận để đảm bảo tính mạnh mẽ của mã của bạn, bao gồm các cơ chế xử lý ngoại lệ. Đảm bảo rằng mã có thể đọc và duy trì được. Trước khi đọc tệp cấu hình, trước tiên hãy tải hệ thống ghi nhật ký của Serilog để đảm bảo rằng việc ghi nhật ký của các chương trình tiếp theo là chính xác) và sau đó tạo các đối tượng được tuần tự hóa và khử tuần tự hóa để đọc dữ liệu từ tệp YAML và khử tuần tự hóa nó thành một đối tượng C. Để đơn giản hóa bản demo, không có cơ chế xử lý lỗi liên quan. Mối quan tâm chính là đọc tệp cấu hình và xuất thông tin cấu hình ra bảng điều khiển để dễ hiểu. Thông tin cấu hình đọc sau đó có thể được sử dụng để xử lý logic nghiệp vụ khác. Dưới đây là một mã mẫu đơn giản để đọc tệp cấu hình: phân tích cú pháp tệp YAML thông qua thư viện YamlDotNet và xuất nó ra bảng điều khiển. Trong ví dụ này, mã xử lý lỗi được bỏ qua để dễ hiểu hơn về quy trình chính) và một số chi tiết có thể cần thiết trong dự án thực tế như xử lý ngoại lệ, ghi nhật ký, v.v. bị bỏ qua. Vì mã có thể liên quan đến thông tin nhạy cảm (chẳng hạn như chuỗi kết nối cơ sở dữ liệu, v.v.), nên tính bảo mật và bảo mật của thông tin này cần được đảm bảo trong dự án thực tế. Khi đọc tệp cấu hình, bạn cần chú ý đến tính chính xác của đường dẫn tệp để tránh các lỗi không thể tìm thấy tệp. Trong một dự án thực tế, bạn cũng cần xem xét các bước như kiểm tra sự tồn tại của các tệp cấu hình và xác minh định dạng tệp để đảm bảo tính mạnh mẽ của chương trình. Sau khi đọc thông tin cấu hình, bạn có thể sử dụng thông tin đó để khởi tạo các phần khác của ứng dụng, chẳng hạn như kết nối cơ sở dữ liệu. Dưới đây là một ví dụ mã C đơn giản để đọc tệp cấu hình YAML: Lưu ý rằng ví dụ này giả định rằng bạn đã cài đặt thư viện YamlDotNet và thêm vào dự án của bạn) và giả định rằng tệp cấu hình của bạn đã tồn tại và nằm trong đường dẫn chính xác) Đường dẫn được sử dụng trong mã được mã hóa cứng, vì vậy trong một dự án thực tế, bạn có thể cần phải tự động lấy đường dẫn hoặc vị trí của tệp cấu hình dựa trên tình huống thực tế. Trước hết, chúng ta cần tạo một lớp để biểu diễn thông tin cấu hình, lớp này tương ứng với cấu trúc trong tệp YAML của bạn và mỗi thuộc tính tương ứng với một cặp khóa-giá trị, để chúng ta có thể ánh xạ dữ liệu trong tệp YAML đến thể hiện của lớp này, để đạt được quyền truy cập và sử dụng dữ liệu, thêm chú thích vào lớp để mô tả từng thuộc tính và giá trị tương ứng, để cải thiện khả năng đọc và khả năng bảo trì của mã, vì nó liên quan đến thông tin cấu hình, vì vậy trong thiết kế lớp, chúng ta nên đảm bảo rằng việc truy cập vào các thuộc tính riêng thực hiện các biện pháp đóng gói thích hợp để đảm bảo tính bảo mật và toàn vẹn của dữ liệu, đồng thời tránh việc dữ liệu bị truy cập hoặc sửa đổi bất hợp pháp。 Cũng cần lưu ý rằng việc thiết kế các lớp phải tuân theo các nguyên tắc thiết kế hướng đối tượng để tạo điều kiện tái sử dụng và bảo trì mã. Dưới đây là một ví dụ đơn giản về việc tạo một lớp cấu hình: publicclassConfig{publicstringDatabaseConnectionString{get; cài; }publicstringDatabaseUser{get; cài; }publicstringDatabasePassword{get; cài; }publicstringLoggingLevel{get; cài; }publicstringLoggingPath{get; cài; Tiếp theo, hãy tạo một phương thức để đọc tệp cấu hình và deserialize dữ liệu thành một thể hiện của lớp trên, trước tiên chúng ta cần giới thiệu không gian tên có liên quan trong thư viện YamlDotNet, sau đó sử dụng lớp Serializer để deserialize dữ liệu trong tệp YAML vào đối tượng Config, phương thức này giả định rằng tệp YAML của bạn nằm trong thư mục gốc của dự án, nếu tệp nằm ở vị trí khác, bạn cần cung cấp đường dẫn tệp chính xác, sau đó gọi phương thức này để lấy thông tin cấu hình, có thể được sử dụng trong các phần khác của ứng dụng của bạn để đạt được việc sử dụng bình thường chức năng, theo nhu cầu kinh doanh cụ thể, bạn có thểSau đây là một phương pháp ví dụ về việc chỉ cần đọc tệp cấu hình và khử tuần tự nó thành một đối tượng Config: publicstaticConfigLoadConfig(){ stringyamlFilePath = "path_to_your_yaml_file.yaml"; Đặt đường dẫn tệp chính xác IDeserializerdeserializer = newDeserializerBuilder () theo tình hình thực tế. Xây dựng(); Configconfig=newConfig(); try{using(StreamReaderfile=newStreamReader(yamlFilePath)){deserializer. Deserialize (tập tin). Chấp nhận (cấu hình); }}catch(Exceptionex){Console.WriteLine($"Anerroroccurredwhilereadingtheconfigurationfile:{ex. Tin nhắn}"); trả về; }returnconfig; Sau đó, bạn có thể gọi phương thức này trong các phần khác của ứng dụng để lấy thông tin cấu hình và sử dụng nó, xin lưu ý rằng ví dụ này không liên quan đến logic xử lý lỗi cụ thể, chẳng hạn như tệp không tồn tại hoặc định dạng sai, v.v., trong quá trình phát triển thực tế, bạn cần xử lý các trường hợp này để đảm bảo tính mạnh mẽ và độ tin cậy của chương trình, nói chung, thông qua mã ví dụ trên, chúng ta có thể biết cách sử dụng các tệp YAML trong C để lưu trữ thông tin cấu hình, và cách đọc và sử dụng các thông tin cấu hình này trong ứng dụng, thông qua thiết kế và triển khai hợp lý, chúng ta có thể sử dụng cùng một phương pháp trong các dự án khác nhau để đạt được việc đọc và quản lý cấu hình, để nâng cao hiệu quả phát triểntỷ lệ và tính mạnh mẽ của chương trình. 6. Cuối cùng, thông qua phần giới thiệu và mã mẫu của bài viết này, quá trình sử dụng tệp YAML để lưu trữ và đọc thông tin cấu hình trong C được trình bày và cách sử dụng dữ liệu YAML và mã C cùng nhau trong các dự án thực tế, có thể được mở rộng và cải tiến theo nhu cầu cụ thể, và có thể nâng cao hiệu quả phát triển và tính mạnh mẽ của chương trình thông qua thiết kế và triển khai hợp lý, tôi hy vọng bài viết này có thể giúp bạn hiểu rõ hơn và áp dụng sự kết hợp giữa C và YAML để mang lại sự tiện lợi và lợi ích cho sự phát triển dự án của bạn.