Chuyển đến nội dung chính

Bài đăng

MediatR: CQRS Command Validation

Validation là 1 phần quan trọng của API. Khi sử dụng Clean Architect hoặc bất kỳ design pattern hiện đại nào, chúng ta thường tách phần Validation và Business Logic ra thành những thành phần riêng biệt. Giả sử với đoạn code sau, nếu không validate PageIndex thì thỉnh thoảng đoạn code sẽ gây ra exception nếu PageIndex < 0 public class GetAuthorQueryHandler : IRequestHandler<GetAuthorQuery, List<AuthorModel>> { private readonly IAuthorRepository _authorRepository; public GetAuthorQueryHandler(IAuthorRepository authorRepository) { _authorRepository = authorRepository; } public async Task<List<AuthorModel>> Handle(GetAuthorQuery request, CancellationToken cancellationToken) { if(request.PageIndex < 0) throw new Exception("PageIndex is invalid") return _authorRepository.GetAuthors(request.PageSize, request.PageIndex); } } Để phân tách phần Validation, chúng ta sẽ áp dụng mẫu thiết kế cross-cutting concern. Trong ASP.NET Core, điều nà
Các bài đăng gần đây

Bootstrap 5: Giới thiệu về Bootstrap - Day 1

Lịch sử Bootstrap Bootstrap là một framework front-end phát triển bởi Twitter vào năm 2011 bởi Mark Otto và Jacob Thornton. Ban đầu, nó được gọi là "Twitter Blueprint" và được sử dụng bên trong Twitter để tạo giao diện cho ứng dụng Web của họ. Sau đó, Twitter quyết định chia sẻ nó với cộng đồng phát triển Ngày 19 tháng 8 năm 2011, Bootstrap chính thức được phát hành. Bootstrap 2 ra mắt vào tháng 1 năm 2012 với nhiều cải tiến và tính năng mới. Phiên bản này đã cải thiện hệ thống lưới, tương tác trang Web và hỗ trợ trình duyệt tốt hơn. Tiếp đến Bootstrap 3 được phát hành vào tháng 8 năm 2013 và đưa ra các tính năng Responsive Design, tương thích với các thiết bị di động, và nhiều thành phần giao diện mới. Bootstrap 4 đã mất một thời gian dài để phát triển, ra mắt vào tháng 1 năm 2018 với nhiều cải tiến lớn. Bootstrap 4 cải thiện hệ thống grid, tối ưu hóa CSS, hỗ trợ Flexbox, và đem lại nhiều tính năng và sự linh hoạt hơn cho người phát triển. Đến nay Bootstrap đã nhận được sự ủ

Fluent Validation trong .NET

Validation là gì? Là quá trình kiểm tra dữ liệu người dùng (End User) nhập liệu đã đúng với các Quy tắc ràng buộc dữ liệu hay chưa? Tránh dữ liệu gởi đến Server là không chính xác/không sử dụng được (dữ liệu rác). Trong lập trình C# và nhiều ngôn ngữ lập trình khác, việc xác thực dữ liệu (validate data) là một phần quan trọng của việc phát triển ứng dụng, vì nó giúp đảm bảo tính nhất quán, an toàn và đáng tin cậy của hệ thống. Dưới đây là 1 ví dụ về việc sử dụng Validation trong C# Trong ví dụ này, chúng ta sẽ tạo 1 console application để nhận data từ console app. Khai báo Person public class Person { public string FirstName { get; set; } public string LastName { get; set; } } Thực hiện việc kiểm tra trong hàm Validate() var person = new Person(); // Get data Console.WriteLine("Enter first name:"); person.FirstName = Console.ReadLine(); Console.WriteLine("Enter last name:"); person.LastName = Console.ReadLine(); if (string.IsNullOrWhiteSpace(person.Fir

Sử dụng ADO.NET để thực thi Stored Procedure

Giới thiệu ADO.NET (ActiveX Data Objects for .NET) là một tập hợp các công nghệ trong Microsoft .NET Framework được thiết kế để làm việc với dữ liệu trong môi trường .NET. ADO.NET cung cấp một mô hình lập trình cho truy cập và quản lý dữ liệu từ nhiều nguồn khác nhau, chẳng hạn như cơ sở dữ liệu SQL Server, Oracle, MySQL, và các nguồn dữ liệu khác. ADO.NET chủ yếu được sử dụng để thực hiện các thao tác thường xuyên liên quan đến cơ sở dữ liệu, bao gồm: Kết nối (Connection): ADO.NET cung cấp lớp SqlConnection để thiết lập kết nối với cơ sở dữ liệu. Kết nối là cầu nối giữa ứng dụng và cơ sở dữ liệu. Command: ADO.NET sử dụng các lớp SqlCommand, SqlDataAdapter, và SqlDataReader để thực hiện các câu truy vấn SQL, stored procedures, và thao tác khác đối với cơ sở dữ liệu. DataReader: SqlDataReader là một cơ chế để đọc dữ liệu từ cơ sở dữ liệu một cách tuần tự và hiệu quả, thích hợp cho việc đọc dữ liệu theo hàng. DataAdapter: SqlDataAdapter là một thành phần quan trọng trong ADO.NET, giúp đi

CQRS là gì?

Giới thiệu CQRS được lấy cảm hứng từ mô hình Command Query Separation (CQS) do Bertrand Meyer đề xuất trong cuốn sách "Object Oriented Software Construction". Triết lý chính của CQS là A method should either change state of an object, or return a result, but not both. In other words, asking the question should not change the answer. More formally, methods should return a value only if they are referentially transparent and hence possess no side effects.” (Wikipedia) Dựa trên nguyên tắc này, CQS phân chia các phương thức thành hai nhóm: Command: Thay đổi trạng thái của đối tượng hoặc toàn bộ hệ thống (còn gọi là modifiers hoặc mutators). Query: Trả về kết quả và không thay đổi trạng thái của đối tượng. Trong thực tế, việc phân biệt ra Query và Command khá đơn giản. Bạn có thể tìm hiểu thêm bài viết tại đây CQRS: Bản nâng cấp của CQS CQRS (hay Command Query Responsibility Segregation) là một design pattern phân tách các hoạt động read và write dữ liệu. Trong đó chia việc tương

Command Query Separation

Lần đầu tiên mình bắt đầu khám phá design pattern CQRS (Command Query Responsibility Segregation), mình phải thừa nhận rằng nó đôi chút khó khăn. Nhưng đến khi mình đối mặt với những thách thức thực tế trong dự án cá nhân, mình mới thấu hiểu giá trị quan trọng của CQRS. Điều làm mình ấn tượng là CQRS không phải là một khái niệm quá rối bời. Ngược lại, khi bạn tiếp tục làm việc và trau dồi kinh nghiệm, bạn sẽ dần dần thích ứng và làm quen với nó. Như Lỗ Tấn đã nói, "Trên đời này làm gì có đường, người ta đi mãi thì thành đường thôi.". Vì vậy, giai đoạn bắt đầu tìm hiểu luôn là quan trọng nhất. Nếu bắt đầu mọi thứ quá phức tạp từ đầu, có thể các bạn sẽ cảm thấy mất hứng thú và không muốn tiếp tục đọc các phần sau. Bài viết này gồm nhiều phần, đầu tiên là mình nói về Command Query Separation, sau đó mới là phần Command Query Responsibility Segregation. Mục đích chính là chúng ta đi từ cách tiếp cận đơn giản đến phức tạp. Command Query Separation CQS là một nguyên tắc thiết kế mẫ

Containerizing Web Apps trên Azure App Service

Trong bài viết này, mình sẽ hướng dẫn các bạn deploy web app trên Azure App Service sử dụng image. Trước tiên, chúng ta cần nhắc lại 1 số khái niệm: image, container, container registry, Azure App Service. Khái niệm Docker image : Một dạng tập hợp các file của ứng dụng, được tạo ra bởi Docker engine. Nội dung của các Docker image sẽ không bị thay đổi khi di chuyển. Docker image được dùng để chạy các Docker container. Do tính chất read-only của chúng, những images này đôi khi được gọi là snapshots. Container : một dạng runtime của các Docker image, dùng để làm môi trường chạy ứng dụng. Container Registry Container Registry là dịch vụ lưu trữ tập trung cho các Docker image. Container Registry giúp bạn dễ dàng quản lý, chia sẻ và triển khai các image container. Giả sử bạn có một ứng dụng web ASP.NET Core đơn giản. Bạn có thể sử dụng Docker để đóng gói ứng dụng này vào một image container. Sau đó, bạn có thể push image này lên Container Registry. Khi bạn muốn triển khai ứng dụng, bạn có th