Tag Archives: inversion of control

Code bạn viết ra sẽ méo bao giờ hoàn hảo hoặc hoàn toàn clean – But that’s okay!

Nếu chăm chỉ đọc blog của mấy developer giỏi và nổi tiếng (như Uncle Bob, Martin Fowler, John Skeet), các bạn sẽ thấy họ có rất nhiều guideline để viết code cho tốt:

  • Sử dụng nguyên lý SOLID để code tách bạch, rõ ràng, dễ sửa chữa
  • Sử dụng Seperation of Concern và các mô hình phổ biến như MVC, MVVM để phân tách code thành nhiều thành phần nhỏ, dễ quản lý
  • Áp dụng design pattern để giải quyết các vấn đề trong code
  • Viết code phải viết thêm test để đảm bảo code chạy đúng

Làm và áp dụng theo những guideline này, chúng ta có thể có code… đúng chuẩn (có thể thôi nhé).

 

Tuy nhiên, trên thực tế, đa phần code trong các dự án đều khá … tởm. Code không có architecture rõ ràng, không có design pattern, viết cẩu thả. Nhiều khi đọc code xong, ta chỉ muốn đập đi xây lại, viết lại cho… đúng chuẩn.

Tuy nhiên, đã bao giờ bạn tự hỏi: Liệu viết code SOLID, chuẩn này chuẩn kia, DI/IoC đồ có thật sự làm code tốt lên hay không? Liệu ta có nên đảm bảo code viết ra phải cực kì hoàn hảo, phải có trật tự?

Continue reading Code bạn viết ra sẽ méo bao giờ hoàn hảo hoặc hoàn toàn clean – But that’s okay!

Advertisements

Những mánh khóe “không bao giờ tiết lộ” của các lập trình viên vĩ đại

Mánh khóe thứ nhất: Không bao giờ truyền dạy các “mánh khóe” này cho người khác. Hết bài.

Đùa đấy, các bạn đừng gạch đá mình tội nghiệp, mình buồn. Chẳng là dạo này mình chán stackoverflow, chuyển qua quora nghịch ngợm đôi chút. Đây cũng là một trang web hỏi đáp tương tự như stackoverflow, nhưng phạm vi rộng hơn rất nhiều, bao gồm toàn bộ mọi lĩnh vựa đời sống.

Một điểm đặc biệt nữa là nó cho phép hỏi những câu chung chung hoặc “nhảm nhí”, do đó có rất nhiều câu hỏi – trả lời thú vị và “bá đạo” như: Mac Zuckerberg có giỏi PHP hay không? Tại sao người đời lại ghét sản phẩm của Apple? Làm sao nghe lén điện thoại bạn gái?… đủ thứ trên trời dưới đất =))).

Mình khuyên các bạn nên bỏ đi ít thời gian cho facebook, rảnh rỗi thì lên đây xem các câu hỏi về Computer Science/Computer Programming, sẽ học được nhiều điều thú vị lắm, giải trí cũng tốt nữa. Bài viết này là tổng hợp và chọn lọc những ý tưởng, câu trả lời hay của câu hỏi: What are the best-kept secrets of great programmers? – Những mánh khóe “không bao giờ tiết lộ” của các lập trình viên vĩ đại.

quora-logo

Continue reading Những mánh khóe “không bao giờ tiết lộ” của các lập trình viên vĩ đại

Dependency Injection và Inversion of Control – Phần 3: DI Container. Áp dụng DI vào ASP.NET MVC

Series bài viết Dependency Injection và Inversion of Control gồm 3 phần:

  1. Định nghĩa
  2. Áp dụng DI vào code
  3. Viết DI Container. Áp dụng DI vào ASP.NET MVC

Sau 2 phần đầu, chắc các bạn đã có cái nhìn tổng quan về DI và cách áp dụng chúng vào code. Đa phần chúng ta không tự viết sử dụng các DI Container nổi tiếng như: Unity, NInject, StructureMap.

Để hiểu nguyên lý hoạt động của chúng, mình sẽ cùng các bạn cách viết một DI Container đơn giản (chúng cũng không quá “ghê gớm” hay phức tạp như bạn nghĩ đâu). Sau đó mình sẽ hướng dẫn cách sử dụng cái DI Container có sẵn, cũng như áp dụng IoC và project MVC.

1. Tự viết 1 DI Container đơn giản

Các bạn có thể dùng git để clone project về máy và bắt đầu làm theo mình: https://github.com/ToiDiCodeDaoSampleCode/SimpleIoC. Các class và interface vẫn như trong phần 2, có điều mình đã bổ sung thêm 1 số class mock – module giả. Trong thực tế, ta sử dụng các class mock này để viết Unit Test.

Continue reading Dependency Injection và Inversion of Control – Phần 3: DI Container. Áp dụng DI vào ASP.NET MVC

Dependency Injection và Inversion of Control – Phần 2: Áp dụng DI vào code

Series bài viết Dependency Injection và Inversion of Control gồm 3 phần:

  1. Định nghĩa
  2. Áp dụng DI vào code
  3. Viết DI Container. Áp dụng DI vào ASP.NET MVC

Bạn đã đọc phần 1 nhưng vẫn chưa hiểu rõ lắm về DI, IoC, chưa biết cách áp dụng chúng vào code? Đừng lo, ở phần 2 này sẽ cung cấp những đoạn code mẫu, giải thích rõ hơn về những điều mình đã nói ở phần 1. Sau khi đọc xong phần này, các bạn quay lại phần 1 thì sẽ thấy “thông” ra được nhiều thứ nhé.

Dependency là gì?

Dependency là những module cấp thấp, hoặc cái service gọi từ bên ngoài. Với cách code thông thường, các module cấp cao sẽ gọi các module cấp thấp. Module cấp cao sẽ phụ thuộc và module cấp thấp, điều đó tạo ra các dependency.

ioc-and-mapper-in-c-4-638

Continue reading Dependency Injection và Inversion of Control – Phần 2: Áp dụng DI vào code

Dependency Injection và Inversion of Control – Phần 1: Định nghĩa

Series bài viết Dependency Injection và Inversion of Control gồm 3 phần:

  1. Định nghĩa
  2. Áp dụng DI vào code
  3. Viết DI Container. Áp dụng DI vào ASP.NET MVC

Hôm trước, có vài bạn nhờ mình giải thích các khái niệm Dependency Injection, Inversion of Control. Vốn lười, mình định google một bài viết bằng tiếng Việt để quăng cho các bạn ấy. Ngặc một nỗi là mình chả tìm được bài nào cụ thể rõ ràng về Dependency Injection, chỉ có hướng dẫn sử dụng Unity, StructureMap. Một số bài viết hay thì lại toàn bằng tiếng Anh.

Mình cũng thấy vài bạn đã đi làm 1, 2 năm mà vẫn còn “ngáo ngơ” về DI, IoC, chỉ biết sử dụng nhưng không hiểu rõ bản chất của nó. Do đó, mình viết bài này nhằm giải thích một cách đơn giản dễ hiểu về Dependency Injection. Các bạn junior nên đọc thử, vì DI được áp dụng rất nhiều trong các ứng dụng doanh nghiệp, rất hay gặp khi đi làm/đi phỏng vấn. Pattern này được dùng trong cả C#, Java và các ngôn ngữ khác nên các bạn cứ đọc thoải mái nhé.

ioc-and-mapper-in-c-1-638

Continue reading Dependency Injection và Inversion of Control – Phần 1: Định nghĩa

Chuyện về các cây đa cây đề trong làng Software Engineering

Để thành một lập trình viên giỏi, có rất nhiều bạn phải học và phải biết: Cách viết code sạchrefactor code, design thế nào để code SOLID, Inversion of Control và  Dependency Injection, Agile methodology, …

Tuy nhiên, đã bao giờ bạn tự hỏi: “Ai là người đã nghĩ ra những thứ đấy” chưa?. Bài viết này sẽ kể bạn nghe về những người đó. Đây là những cái tên có nhiều đóng góp to lớn cho ngành phần mềm. Họ nổi tiếng không chỉ nhờ khả năng code, mà còn nhờ khả năng viết và diễn đạt, truyền cảm hứng.

img

Continue reading Chuyện về các cây đa cây đề trong làng Software Engineering

Review sách: Presentation Zen – 99% sinh viên/lập trình viên đã làm slide tệ hại như thế nào

Thời sinh viên, thuyết trình luôn là nỗi ác mộng đối với mình và bạn bè: Phải chuẩn bị nội dung để nói, phân chia thời gian nói, và làm slide. Các bạn sinh viên nói chung (bao gồm cả mình) thường làm slide theo công thức đơn giản: Copy một đống chữ từ đâu đó bỏ vào slide, thêm tiêu đề, thêm hình ảnh, căn chỉnh lại 1 tí, thế là đã có một slide hoàn chỉnh.

Đến thời đi làm, mình tưởng rằng đã thoát khỏi cái cảnh phải chuẩn bị slide thuyết trình. Thế nhưng, đến những lúc cần giới thiệu sản phẩm, công nghệ, hay khi tổ chức seminar, mình lại phải bật PowerPoint lên, làm lại công việc nhàm chán thời sinh viên. Hỏi các anh senior, các bác Manager mới biết là muốn leo lên vị trí cao, muốn thăng tiến phải giỏi thuyết trình, biết cách trình bày thì mới được đồng nghiệp nể trọng, cấp trên chú ý.

Xem các hướng dẫn làm slide nhiều, mình cũng ngộ ra là: Slide tốt là slide ít chữ, nhiều hình, ngôn từ ngắn gọn. Đến một ngày, sau khi đọc xong 1 cuốn sách, mình ngộ ra được cái “đạo”, cái “tinh túy” của nghệ thuật làm slide, nghệ thuật thuyết trình, cuốn sách đó tên là … Presentation Zen.

cover

Continue reading Review sách: Presentation Zen – 99% sinh viên/lập trình viên đã làm slide tệ hại như thế nào