Learning refactoring (Một phần cấu trúc quan trọng trong TDD-PHPUnit)

Lý do:

Refactoring là viết lại source code một cách khoa học hơn mà vẫn giữ được tính đúng đắn và giá trị về chức năng của source code đó.

Định nghĩa:

Refactoring là thay đổi ở cấu trúc bên trong mà không làm thay đổi hành vi với bên ngoài của hệ thống.

Một số smell và kỹ thuật trong Refactoring:

1. Hàm, phương thức quá dài -> Tách phân chia hàm nhỏ lại.

2. Quá nhiều tham số trong 1 hàm -> Khai báo ít biến, sử dụng công thức tổng hợp.

3. Class quá lớn -> Chia nhỏ thành class con.

Công nghệ refactoring (gồm 6 rule):

1.1  Composing methods: Hạn chế các trùng lặp mở đường cho tương lai.

+ Extract method: Phân tích, xử lý hàm cho ngắn gọn theo từng tính năng nhỏ.

+ Inline method: Thay thế nội dung của phương thức thành các lời gọi tới chính nó.

+ Extract Variable: Tách các biến con trong lệnh gọi thành các biến khai báo bên ngoài ngắn gọn mà mô tả được ý nghĩa của  ó.

+ Inline temp: Gán biến thực sự khi cần thiết.

+ Replace temp with query: Tạo một phương thức toàn cục thay vì một biến toàn cục.

……

2.1 Moving Feature between Object: Cách di chuyển các chức năng một cách an toàn giữa các lớp.

+ Move method: Cùng một hàm thực hiện chức năng tương tự nhau ở trong các lớp -> Di chuyển sang một class duy nhất.

+ Move field: Tương tự move method.

…..

3.1 Organizing Data: Sắp xếp dữ liệu giúp gỡ rỗi trong khi di chuyển các tính năng giữa các đối tượng.

+ Self Encapsulate Field: Truy cập trực tiếp theo phương thức đóng gói dữ liệu.

….

4.2 Simplifying conditional Expressions: Để đơn giản hóa biểu thức có điều kiện.

….

5.1 Simplifying Method call: Làm cho phương thức gọi đơn giản và dễ hiểu hơn.

….

6.1 Dealing with Genneralisation: Xử lý tổng quát (tạo một abstract quản lý các đối tượng.

….

Tham khảo tiếp và chi tiết tại:

https://sourcemaking.com/refactoring/refactorings

https://viblo.asia/p/refactoring-techniques-composing-methods-part-1-6J3ZgDEElmB

Advertisements

Learning TDD-PHPUnint

TDD (Test Driven Development một phương thức làm việc, hay một quy trình viết mã hiện đại.

Lý do áp dụng TDD: Code refactor an toàn, it bug, code gọn gàng và năng suốt.

https://viblo.asia/p/9-loi-ich-cua-test-driven-development-znmMdyE6Gr69

Quy trình test tiến hành qua 4 bước: (Làm sao cho test thành công).

Bước 1: Thinking

Bước 2: Red

Bước 3: Green

Bước 4: Refactor.

Thực hành tại:

http://cyber-dojo.org/kata/edit/hkDpgmMb9e?avatar=deer

Hoặc cài đặt về máy.

Gợi ý thực hành bài tập (Roman number) hướng dẫn tdd hay tại:

Learning Design Patterns (2)

4. Strategy Design Pattern: Thực hiện hành vi của đối tượng -> trừu tượng hóa các đối tượng bằng cách đưa ra cài đặt ở những lớp khác.

Nhắc lại: Sự kế thừa các lớp trong php: – implement : Sử dụng đối với kế thừa interface. – extends: Sử dụng đối với kế thừa trong abstract .

  • Thực hiện: Tạo một interface -> Tao các class kế thừa từ interface-> Tao một class main theo cơ chế switch bắt sự kiện khi nào class kết thừa interface được gọi.? Trong class này tạo một phương thức nội dung gọi tới các phương thức ở trong interface.  ->Thực thi theo cơ chế: Cấp phát vùng nhớ cho class main và thực hiện.
  • Như vậy: Các lớp kế thừa interface đã thực hiện các chức năng của riêng nó, và bị quản lý bởi lớp main. Nên khi có sự thay đổi giá trị ở lớp nào, thì chỉ cần xử lý ở function ở lớp đó. Giúp việc xử lý thực thi thay đổi đơn giản hơn nhiều.

5. Observer Design Patterns: Duy trì một danh sách các phần phụ của nó và thông báo tới chúng một cách tự động khi có sự thay đổi của nó.

  • Triển khai: Gồm 2 đối tượng: Subject và Observer.

+) Subject: Giao diện cho đối tượng dữ liệu. Lưu trữ trạng thái mà đối tượng Observer quan tâm.

+) Observer: Khai báo phương thức chính là update(). Phương thức này có thể truy cập đối tượng Subject mà nó đăng ký. Phải có hàm constructor, khai báo đối tượng Subject mà nó theo dõi.

https://xuanhuu.wordpress.com/2014/10/11/co-ban-observer-pattern/

 

Learning Design Patterns (1)

Design pattern là gì?

 DP là mẫu thiết kế được sử dụng trong lập trình hướng đối tượng(OOP) đưa ra quy tắc tắc chuẩn, quy ước vấn đề chung trong thiết kế phần mềm.

Tính cần thiết sử dụng Design pattern:

+ Cung cấp cấu trúc ở dạng tổng quát => Tăng tốc độ phát triển phần mềm

+ Tính tái sử dụng và bảo trì => Dễ dàng nâng cấp và bảo trì về sau.

+ Tính quy tắc chuẩn => Mọi thành viên trong nhóm có thể hiểu code nhanh, trao đổi và xây dựng dự án hiệu quả.

Có 3 nhóm Design Parttern và các loại DP quan tâm:

– Creational Patterns: Singleton, Factory (Factory Method và Abtract Factory).

– Structural Patterns: Adapter.

– Behavioral Patterns:  Observer, Strategy.

Làm việc với các loại Design Pattern:

1. Factory Design Pattern.

https://viblo.asia/p/design-pattern-trong-php-phan-1-wpVYRPWLv4ng

  • Factory method: giao việc khởi tạo một đối tượng cụ thể cho lớp con.
  • Abstract factory: 1 siêu nhà máy dùng để tạo ra các nhà máy (factory) khác.

2. Singleton: là tạo ra một đối tượng tĩnh được khởi tạo một lần duy nhất. Sau đó, ta có thể tham chiếu tới đối tượng này từ mọi nơi trong chương trình.

– Một lớp chỉ chứa duy nhất một instance được cung cấp một cách toàn cầu từ sự truy cập từ bên ngoài. Một hàm tạo để ngăn chặn việc tạo một dối tượng thông qua từ khóa “new”.

Thực tiễn: Ví dụ một máy quản lý nhiều hệ thống. Với chung một chức năng, thì khi sử dụng singleton thì nó sẽ tới sử dụng chức nó của các máy là khác nhau.

3. Adapter:

– Cầu nối giữa hai interface hoạt động độc lập (không tương thích). => Khi có sự thay đổi API trong việc bảo trì code(là rất cần thiết) nó sẽ trở nên hiệu quả khắc phục được khó khăn nhanh chóng.

https://viblo.asia/p/adapter-pattern-n7prv3mOMKod

Đọc tiếp….

https://huongtlu.wordpress.com/2018/04/19/learning-design-patterns-2/

 

 

Learning Restfull API (1)

– Khái niệm:

+ REST là thiết kế các ứng dụng mạng phân tán sử dụng HTTP như là một giao thức tầng ứng dụng và nó là một mô hình kiến trúc thực sự cho web

+ Restfull api là một tiêu chuẩn dùng trong việc thiết kế các API cho ứng dụng web quản lý các resoure (CRUD).

– Ứng dụng: Restful APi xử lý, xác định và chuẩn hóa các tài nguyên thông qua giao thức HTTP.

Tính chất của Restful: Có 4 loại lệnh được sử dụng để truy xuất tới Restful API là:

+ GET sử dụng để lấy 1 đối tượng. POST để tạo đối tượng. PUT để chỉnh sửa, thay thế 1 đối tượng. DELETE được dùng để xóa bỏ đối tượng.

Hướng dẫn: Tạo môi trường làm việc với Restful API (ở đây là Laravel) -> Làm việc với file api.php- > Test Restful (với phần mềm POSTMAN) chạy test đường dẫn như trên trình duyệt-> Thực hiện -> Kết quả.

 

( Tham khảo thêm bên dưới):

https://viblo.asia/p/lam-nhu-the-nao-de-tao-mot-restful-api-bang-laravel-gGJ59X3DlX2

  • Làm việc trên môi trường docker-composer đã học được từ trước.

+ Nhắc lại: Tạo một folder tên là laradoc (them nội dung vào folder dựa trên hướng dẫn trang chủ). Sau đó tạo một forder tên là public  folder mặc đinh của docker là tên folder chứa nội dung laravel mình cần làm việc.

* Thực hiện:

B1: Tạo một database tên tùy chỉnh

B2: Tạo một Model

B3: Tạo một controller

B4: Tạo và xử lý trong file router/api.php

B5: Chạy trên trình duyệt : localhost/api/tenroute.

 

Skill Learning Vue.js

– Tại sao lại nên dùng Vuejs?

=> Tham khảo tại: https://allaravel.com/tutorials/vuejs-framework/tai-sao-dung-vue-js/

Nói ngắn gọn:

+ Vuejs là tích hợp của những tính năng tốt nhất của những framework phía giao diện người dùng hiện đại.

+ Vuejs xây dựng dựa trên các component giúp module hóa trong việc lập trình HTML, Javascript, CSS, tạo ra các khối giao diện người dùng có thể tái sử dụng. Component vi diệu hơn các đối tượng ở chỗ nó có thể được sử dụng lại trong các template như là một phần tử HTML.

+ Chỉ thị lệnh vủa vuejs được kế thừa theo lối của framework hiện đại như Laravel,..

+ Kiến trúc của vuejs được bố trí theo các file riêng, tạo nên tính hiện đại của framework. Vuejs học tập, kế thừa, triển khai đồng thời còn phát triển xa hơn các framework đàn anh chị trước đó.

– Vuejs là gì?  => Vuejs là một framework hữu dụng cho việc xây dựng phía giao diện người dùng. Nó là tích hợp hiện đại giữa NodeJs và ReactJS (công nghệ mới nổi bật hiện nay).

Làm sao để làm việc được với môi trường của VueJs?

1. Thêm thư viên vuejs: 

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

2. Học hướng dẫn làm việc với Vuejs: 

Trên trang chủ: https://vuejs.org/

Trên youtube: https://www.youtube.com/watch?v=Y05uRiksXXI&list=PL3VM-unCzF8iRyPotjFsgy7EfuCITvr_3

Group thảo luận (fb): https://www.facebook.com/groups/vuejsvietnam/about/

Học trên github: https://github.com/vuejs/awesome-vue#youtube-channels

Học chi tiết về Vuejs: https://allaravel.com/category/tutorials/vuejs-framework/

– Trải nghiệm kiến thức học vuejs ra sao?

+ Học vuejs thông quan  việc thực hành lập trình một biểu đồ số giải một bài toán game kỳ thú:

Mô tả: Game of life hay còn gọi là Life (Cuộc sống) là bài toán thuộc lĩnh vực cellcular automaton được đưa ra bởi John Horton Conway vào năm 1970.

Đây là một trò chơi mà không có người chơi. Sự tiến hóa của trò chơi được xác định bởi trạng thái ban đầu, và không cần thêm đầu vào nữa.

Là mạng lưới các ô (tế bào) tạo nên một không gian hai chiều không giới hạn. Trạng thái của ô: sống hoặc chết. Mỗi tế bào sẽ tương tác với tám hàng xóm (tế bào liền kề). Trạng thái tiếp theo của ô được quyết định theo quy tắc:

  1. Ô đang sống mà có ít hơn hai hàng xóm đang sống sẽ chết
  2. Ô đang sống mà có nhiều hơn 3 hàng xóm đang sống sẽ chết
  3. Ô đang sống mà có 2 hoặc 3 hàng xóm đang sống sẽ tiếp tục sống
  4. Ô chết mà có đúng 3 hàng xóm đang sống sẽ chuyển thành ô sống Mẫu ban đầu là mầm của hệ thống.

+ Một số code khái niệm được giải thích như sau:

* Khai báo kiểu dữ liệu của biến là “let” – từ ES6 trở đi sử dụng kiểu dữ liệu này mà k dùng “var”: Khi được gọi ở các nơi khác nhau nó sẽ trả lại giá trị tương ứng với nơi đó.

* Sử dụng component trong Vuejs: Giúp gom các mã HTML lại để tái sử dụng các module tương tự  -> để xử lý các hành vi. (Chú ý trong component đặt tên không theo chuản w3c).

* Một số cấu trúc  hàm khai báo với Vuejs:

– el: “#tenid” : Khai báo tên id, gọi thực thi tới id trong file HTML.

….

Programming skills code (2)

2. Mỗi hàm thực hiện chỉ một chức năng. Điều đó sẽ dễ hiểu và làm cho việc bảo trì code dễ dàng hơn rất nhiều.

3. Xây dựng hàm theo nguyên lý Step-down rule. (Đi từ chức năng to bao quát tới chức năng nhỏ triển khai).

4. Sử dụng cơ chế “switch statement” để xử lý những trường hợp cùng xử lý một chức năng những có nhiều kiểu dữ liệu trả về.

5. Đặt tên hàm. Đừng ngại việc dành thời gian để nghĩ ra cái tên để đặt, mà hãy dành thời gian cho nó và thử một số tên khác và đọc ở mọi vị trí. Thống nhất tên mà mình đã đặt, sử dụng danh từ cụm danh từ, động từ. Đặt tên là những từ khóa dễ dàng tìm kiếm nội dung bày tỏ, bảy tỏ được đối số đầu ra.

6. Nội dung hàm cần bắt sự kiện xử lý được các lỗi các trường hợp phát sinh. Tuyệt đối không để bị trùng lặp tên biến đặt và dư thừa dữ liệu.

  • Chapter 4:

” Comment như thế nào là vừa đủ và cần thiết ?”

Chúng ta sẽ cần phân tích 3 góc cạnh:

– Những trường hợp không cần comment – Ghi lại những suy nghĩ của bạn thân khi đang viết code – Suy nghĩ ở vị trí người đọc code để hiểu mình cần comment những  gì.

  • Không comment: Những đoạn code không mang lại một lượng giá trị thông tin nào. Hãy sửa nếu tên đặt không đủ ý thay vì comment để giải thích.
  • Ghi lại suy nghĩ của bản thân khi đang code: Comment tổng quan để cho người đọc dễ nắm bắt được nội dung trước khi đi vào đọc chi tiết. Comment những điểm còn khúc mắc mà chưa được giải quyết. Comment những trường hợp đặt tên có giá trị hằng số (người đọc nhanh hiểu hơn và việc chỉnh sửa sau đó sẽ dễ dàng hơn rất nhiều).
  • Đứng ở vị trí người đọc: Dự tính trước các thắc mắc thường gặp, thông báo trước các cạm bẫy có thể gặp phải, viết comment ngắn gọn và dễ hiểu.

Tiến hành triển khai comment cần hiểu được các nội dung chi tiết sau:

+ Phải làm sạch code trước khi comment.

+ Bày tỏ được những giá trị diễn đạt code thông qua comment.

+ Comment thể hiện cái bản quyền của bút danh riêng của cơ quan.

….. (viết tiếp0