Software Development

  • DDD: Phần 2 – Giao tiếp và Ngôn ngữ chung trong Domain-Driven Design

    DDD: Phần 2 – Giao tiếp và Ngôn ngữ chung trong Domain-Driven Design

    Xem lại phần 1: https://minhphien.com/ddd-part-1-phan-tich-mien-nghiep-vu-trong-domain-driven-design/ “Thứ được đưa vào production không phải là tri thức của chuyên gia miền, mà là những gì lập trình viên hiểu (hoặc hiểu sai).”— Alberto Brandolini Khi phát triển phần mềm, chúng ta thường nhảy ngay vào viết code, tạo schema, vẽ luồng xử lý. Nhưng nếu bỏ qua…

  • DDD: Phần 1 – Phân tích miền nghiệp vụ trong Domain-Driven Design

    DDD: Phần 1 – Phân tích miền nghiệp vụ trong Domain-Driven Design

    Giới thiệu Trong lĩnh vực phát triển phần mềm, nhiều developer chỉ quan tâm đến việc viết code hoàn chỉnh và tối ưu. Tuy nhiên, Domain-Driven Design (DDD) nhắc nhở rằng để thiết kế hệ thống tốt, trước hết ta cần hiểu vấn đề của doanh nghiệp và môi trường vận hành của nó. Đó…

  • Có gì mới trong .NET 10 (đầy đủ)

    Có gì mới trong .NET 10 (đầy đủ)

    .NET 10, kế thừa từ .NET 9, được hỗ trợ trong ba năm như một bản phát hành hỗ trợ dài hạn (LTS). ​ Giải thích thuật ngữ Thư viện .NET Thư viện .NET 10 giới thiệu một số tính năng và cải tiến mới, bao gồm:​ Tìm chứng chỉ bằng dấu vân tay khác…

  • Effective Javascript: Chủ đề Array và Dictionary

    Effective Javascript: Chủ đề Array và Dictionary

    Khái niệm trong Javascript cần biết để hiểu được những gợi ý trong bài này: Prototype pollution: Một cách tấn công vào Javascript runtimes, bằng cách điều khiển default value – nhằm thay đổi logic của app; đa phần dẫn đến lỗi DoS, hoặc nghiêm trọng hơn điểu khiển hệ thống từ xa. Enumerable/ Enumeration:…

  • Process vs Thread vs Coroutine

    Để dễ phân biệt những khái niệm này, ta đi từ khái niệm chương trình (Program). Program Là một file thực thi (file .exe hay .com trong windows) chứa những instructions và được lưu trong ổ đĩa. Một program có nhiều process. Ví dụ điển hình, Chrome browser là một program, và nó tạo ra…

  • Zen of Python: Nguyên tắc cơ bản của lập trình

    Zen of Python là những nguyên tắc cơ bản mọi programmer bắt buộc tuân thủ. Nguyên gốc tiếng Anh: Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren’t special…

  • Kết hợp delegate với lambda expression

    Kết hợp delegate với lambda expression

    Delegate là cách cho phép dùng một method bên ngoài để thực thi một hành động tham chiếu đến thuộc tính của đối tượng. Trước khi xem cách sử dụng trong C#, ta cần hiểu rõ tại sao và khi nào cần dùng đến Delegate. Vậy thì, khi nào cần truyền một function để thực…

  • Khác biệt giữa Generics và Dependency Injection

    Nếu bạn có cùng câu hỏi với mình về vấn đề này thì đọc phần giải thích ngắn gọn phía dưới để thấy sự khác biệt: Cả hai cách đều dùng một giao tiếp khác để một class tham chiếu đến, Generics sẽ thông qua ngay phần khai báo lớp trong khi DI sẽ thông…

  • ASP.NET MVC & WebAPI: khác biệt giữa sync & async endpoint

    ASP.NET MVC & WebAPI: khác biệt giữa sync & async endpoint

    Thông thường khi ASP.NET nhận một request, ít sẽ cấp phát một thread trong thread pool. Thread này sẽ bị chiếm bởi request cho đến khi một request sẵn sàng và được gửi đến người gọi. Thread trong process này không thể dùng cho request khác. Điều này gây ra một số limitation: Process cho…

  • CQRS là gì?

    CQRS (viết tắt của cụm Command/Query Responsibility Segregation) định nghĩa sơ khai là cách phân tách trách nhiệm truy vấn lệnh, nhằm tối ưu hóa việc ghi vào & đọc từ cơ sở dữ liệu. Motivation Ngày càng nhiều lượt đọc và ghi phức tạp trong những hệ thống lớn, dẫn đến lỗi, tắc nghẽn…