Giới Thiệu về WebVella
WebVella là một hệ thống ERP mã nguồn mở, phát triển trên nền tảng .NET Framework và hiện đã được nâng cấp lên .NET. Mặc dù nhận được 1.1k sao trên GitHub sau 6 năm hoạt động, nhưng WebVella vẫn thiếu sự hỗ trợ tài chính từ các công ty lớn, điều này đã ảnh hưởng đến việc nâng cấp và bảo trì mã nguồn của nó.
Tuy nhiên, đây lại là một cơ hội tốt cho các lập trình viên để học hỏi từ thực tiễn, tiếp xúc với những mã nguồn mới và tốt hơn. Trong khi nhiều người có thể không quen thuộc với các best practices và conventions trong lập trình, loạt bài viết này sẽ cố gắng cải thiện và giải thích các vấn đề trong mã nguồn của WebVella.
Phân Tích Phương Thức DataSourceQueryAction
Dưới đây là phương thức DataSourceQueryAction
mà chúng ta sẽ xem xét:
csharp
[Route("api/v3/en_US/eql-ds")]
[HttpPost]
public ActionResult DataSourceQueryAction([FromBody] JObject submitObj) {
ResponseModel response = new ResponseModel();
response.Success = true;
// Một số xử lý logic...
}
Các Vấn Đề Của Phương Thức
Phương thức này dài và có một số vấn đề như sau:
- Tên Phương Thức Không Đúng Convention: Nên đặt tên là
QueryByDataSource
để phản ánh hành động. - Tên Tham Số Không Hợp Lý:
submitObj
có thể gây nhầm lẫn; nên đổi thànhrequestJObject
để rõ ràng hơn. - Khởi Tạo ResponseModel Không Hợp Lý: Nên khởi tạo
Success = true
khi thực sự có kết quả đúng. Việc khởi tạo này không cần thiết ở đầu hàm. - Tên Gọi Model Không Cụ Thể: Nên đặt tên cụ thể hơn như
queryModel
để tránh sự mơ hồ. - Sử Dụng Region Không Hợp Lý: Thay vì sử dụng region, có thể tách riêng logic vào hàm private để dễ đọc hơn.
- Lặp Lại Mã Nguồn: Sử dụng nhiều lần cấu trúc tương tự để trả về kết quả có thể làm cho mã nguồn trở nên khó đọc.
- Cấu Trúc Vô Nghĩa: Việc khởi tạo
response
ở đầu hàm là lãng phí nếu không sử dụng. Nên hoãn lại đến khi cần thiết.
Kết Quả Sau Khi Refactor
Sau khi cải thiện, cấu trúc phương thức rõ ràng và dễ đọc hơn:
csharp
[Route("api/v3/en_US/eql-ds")]
[HttpPost]
public ActionResult QueryEqlDataByDataSource([FromBody] JObject requestJson) {
if (requestJson == null) return NotFound();
try {
var queryModel = InitializeEqlQueryModel(requestJson);
var dataSource = GetDataSource(queryModel.Name);
if (dataSource == null) {
return Ok(GetFailedResponseModel($"DataSource with name '{queryModel.Name}' not found."));
}
// Logic xử lý...
}
catch (EqlException eqlEx) {
return Ok(GetFailedResponseModel(eqlEx.Errors.Select(e => new ErrorModel("eql", "", e.Message)).ToList()));
}
catch (Exception ex) {
return Ok(GetFailedResponseModel(ex.Message));
}
}
Đánh Giá Kết Quả
- Dễ Đọc Hơn: Phương thức cấu trúc lại rõ ràng hơn, giúp người đọc dễ dàng nắm bắt logic.
- Quy Tắc Viết Hàm: Thực hiện quy tắc một hàm nên trong một trang màn hình, giúp tăng cường khả năng bảo trì mã.
- Comment: Tránh sử dụng comment quá nhiều; mã nguồn rõ ràng có thể tự diễn đạt tốt hơn.
Kết Luận
Refactoring là một phần thiết yếu trong lập trình, diễn ra thường xuyên trong quy trình phát triển sản phẩm. Việc này giúp loại bỏ code lỗi thời, cải thiện kỹ thuật lập trình và nâng cao chất lượng sản phẩm. Đừng ngần ngại sửa đổi mã nguồn để phù hợp với thực tế mới.
Mời Góp Ý
Nếu bạn có mã nguồn nào cần xem xét, xin để lại thông tin hoặc liên hệ qua email tại ore@refacore.com. Chúng ta sẽ cùng nhau học hỏi và phát triển.
source: viblo