[Revit API] Thủ Thuật Lập Trình: Singleton - VietBIMCoder.com

[Revit API] Thủ Thuật Lập Trình : Singleton và trung tâm hóa lưu trữ dữ liệu

Singleton là một khuôn mẫu lập trình được định nghĩa để trung tâm hóa việc lưu trữ dữ liệu, giúp bạn truy xuất và xử lý dữ liệu một cách dễ dàng. Singleton đem lại hiệu quả rõ rệt khi bạn muốn quản lý có hệ thống trong một dự án phức tạp.

1.      Khái niệm ban đầu

Một singleton là một Class cho phép chỉ tồn tại một thể hiện của nó được tạo. Thể hiện Singleton tồn tại khi ứng dụng nằm trong bộ nhớ, và lưu trữ các dự liệu trong một Singleton sẽ giúp truy xuất và xử lý dữ liệu trong suốt hoạt động ứng dụng (chỉ bị loại bỏ khi hoàn thành hoặc tắt ứng dụng).

Singleton giúp bạn cách truy cập dữ liệu dễ dàng giữa các class điều khiển, quản lý dữ liệu dự án tốt hơn, nhờ đó tăng hiệu suất phát triển sản phẩm.

Singleton có thể áp dụng với nhiều ngôn ngữ lập trình hướng đối tượng khác nhau, ở đây mình sẽ sử dụng ngôn ngữ C# để mình họa.

2.      Thiết lập một Singleton:

a.       Tạo class Singleton với thuộc tính tĩnh Instance:

Thuộc tính Instance sẽ là thể hiện duy nhất của class Singleton dùng để lưu trữ và truy xuất dữ liệu dự án một cách tập trung.

b.      Tạo thêm các thuộc tính dữ liệu cần để truy xuất:

Bạn có thể định nghĩa thuộc tính thuộc bất kì kiểu dữ liệu nào (Có thể Class trong thư viện RevitAPI, WPF… hoặc do bạn tự định nghĩa).

c.       Khởi tạo thể hiện tĩnh, truy xuất và lưu trữ dữ liệu

Khởi tạo thể hiện bởi thuộc tính Instance của Singleton ở bất kì đâu trong dự án (nên ở vị trí khởi đầu dự án), gán các dự liệu cần thiết.

 

Lúc này bạn đã có thể truy xuất và xử lý các dữ liệu cần thiết (ở đây bạn đã lấy và lưu trữ thành công dữ liệu từ Revit session hiện hành)

 

3.      Phân lớp dữ liệu trong Singleton

Dữ liệu lưu trữ tập trung trong Singleton có thể được tổ chức phân lớp để người phát triển quản lý dữ liệu dự án dễ dàng, đặc biệt hiệu quả trong các dự án phức tạp áp dụng nhiều công nghệ.

Ở ví dụ này, chúng ta sẽ phân loại dữ liệu thành 3 nhóm: RevitData – dữ liệu Revit, WPFData – dữ liệu WPF, OtherData – dữ liệu khác hoặc tự định nghĩa.

a.       Tạo class Singleton

Thực hiện tương tự mục 2.a.

 

b.      Tạo class RevitData

Ở đây kiểu dữ liệu Revit Data có nhiệm vụ lưu trữ các dữ liệu đầu vào từ Revit (chưa qua xử lý).

 

c.       Tạo class WPFData

Kiểu dữ liệu WPFData được định nghĩa để lưu trữ các dữ liệu được input bởi người sử dụng addin như đường kính thép, tầng bố trí, …

 

d.      Tạo class OtherData

OtherData có tác dụng lưu trữ các kiễu dữ liệu tự định nghĩa hoặc dữ liệu thuộc loại khác.

 

e.      Khởi tạo thể hiện tĩnh, truy xuất và lưu trữ dữ liệu

Thực hiện tương tự như mục 2.c.

4.      Đặc điểm của Singleton:

a.       Ưu điểm

Singleton giúp bạn quản lý dữ liệu dự án hiệu quả và thuận tiện khi tập trung các dữ liệu cần thiết về một cơ sở trung tâm. Nếu dự án lập trình của bạn phức tạp với nhiều class khác nhau, Singleton giúp truy xuất và xử lý dữ liệu dễ dàng.

Có thể tạo các file .cs định nghĩa Singleton để thiết lập tổ chức dữ liệu như nhau làm tăng năng suất phát triển ứng dụng.

b.      Nhược điểm

Mặc dù Singleton tạo một nơi để lưu trữ dữ liệu dài hạn, nhưng dữ liệu sẽ bị mất đi khi ứng dụng hoàn thành hoặc tắt đi). Do đó, Singleton không phải là một giải pháp lưu trữ dữ liệu dài hạn.

Khi nghĩ đến một giải pháp lưu trữ dữ liệu lâu dài, bạn nên cân nhắc lưu trữ thông tin trên file hoặc gửi dữ liệu về server…

Cố gắng sử dụng Singleton cho mọi thứ trong mọi phần của dự án kể cả chúng không cần thiết là dư thừa, tốn thời gian viết code và bộ nhớ máy tính khi thực thi. (ps: tốn thêm bộ nhớ não để nhớ nữa nhé, :3)

5.      Kết luận:

Singleton là một giải pháp lưu trữ tập trung hóa dữ liệu dự án, lưu trữ và truy xuất dữ liệu hiệu quả. Singleton giúp bạn lập trình, tổ chức dữ liệu có hệ thống khi dự án gồm nhiều class phức tạp.

Song Singleton cũng có nhữngmặt hạn chế của nó: không phải là giải pháp lưu trữ dữ liệu dài hạn, bạn cũng hạn chế gom mọi thứ vào quản lý bằng Singleton nếu dữ liệu không cần thiết.

Để sử dụng Singleton hiệu quả, bạn hãy cân nhắc các câu hỏi sau: Dữ liệu này có quan trọng? sử dụng ở phần nào của dự án? truy xuất và xử lý thế nào?

 

Bài viết liên quan