SOLID là 5 nguyên tắc cốt lõi & quan trọng trong phát triển phần mềm, hôm nay chúng ta cùng tìm hiểu SOLID là gì và SOLID được áp dụng như thế nào trong Optimizely CMS & E-commerce qua phần giới thiệu của anh Nguyễn Quang Mạnh - hiện đang làm việc tại Niteco với vai trò .Net developer nhé.
1. Cách hiểu đúng về SOLID
SOLID là các chữ cái viết tắt của 5 nguyên lý lập trình trong lập trình nói chung và lập trình hướng đối tượng nói riêng. Đây là các kiến thức cơ bản mà hầu hết sinh viên theo học CNTT đã được tiếp cận từ khi còn đang ngồi trên ghế nhà trường.
Khía cạnh khái niệm
SOLID được biết đến như một tập các nguyên lý trong lập trình hướng đối tượng (OOP), bên cạnh 4 đặc điểm chính vốn có là đóng gói (encapsulation), trừu tượng (abstraction), kế thừa (inheritance) và đa hình (polymorphism). SOLID đươc tạo thành bởi:
Nhìn chung, các khái niệm của những nguyên lý trên không khó hiểu. Tuy nhiên, việc hiểu được bao nhiêu và ứng dụng thế nào cho đúng thì cần thực tiễn rất nhiều.
Thêm nữa, tùy vào đặc thù, quy mô của mỗi dự án mà chúng ta sẽ có những trải nghiệm thực tế nhất định. Chẳng hạn, ở Niteco, với những dự án thời gian phát triển ngắn, timeline không nhiều trong khi đó yêu cầu thay đổi liên tục, việc phân tích thiết kế trước gần như không thể đạt được. Lúc này lập trình viên được yêu cầu phải có kĩ năng tốt, có thể tự thiết kế kiến trúc code cho phần sub-module của mình.
Với những dự án phát triển lâu dài hơn, đội công nghệ (Techleads team) sẽ có nhiều thời gian để thiết kế kiến trúc trước khi chạy phase thực thi. Từ đây sẽ có nhiều patterns được ứng dụng hơn, mở ra nhiều cơ hội học hỏi hơn cho các bạn lập trình viên trẻ. Đây là điều dễ thấy khi các bạn làm việc ở Niteco. Tuy nhiên vấn đề đặt ra lúc này là phải hiểu về patterns đã được đưa vào kiến trúc, tuân thủ các patterns đó khi thực thi code. Đây cũng là một thách thức khá lớn với nhiều bạn mới vào nghề.
Khía cạnh thực tiễn
Sự thực là, từ khái niệm đi tới thực tiễn là cả một chặng đường dài. Chúng ta có thể chưa hiểu hết nguyên lý, hoặc có thể hiểu theo một cách nhìn khác với tác giả. Những điều này phải làm trong thực tế mới có thể đánh giá được. SOLID cũng vậy. Khi được triển khai ở các dự án thực tế sẽ mang lại nhiều cảm nhận khác nhau. Nhưng tóm gọn lại, một mặt, SOLID dùng để thiết kế kiến trúc hệ thống cho các phần modules mới, mặt khác, nó giúp chúng ta hiểu nhanh hơn kiến trúc hệ thống hiện tại, và luồng chạy giữa các modules.
Ở mức thiết kế ứng dụng, có thể phân tách application thành các modules và submodules. Tuy nhiên, vấn đề khá thách thức đặt ra là phải chia sao cho tiện phát triển và dễ bảo trì về sau. Khi đó, SOLID kết hợp với khái niệm về coupling và cohesion sẽ giúp chúng ta có cái nhìn khách quan hơn về mối quan hệ giữa các modules với nhau, hơn thế nữa, nó cũng là độ đo cho sự bền chặt của module (mối quan hệ giữa các thành phần trong modules đó).
2. Ứng dụng SOLID trong Optimizely Eco-system
Optimizely (tên cũ Episerver) vẫn luôn là một chủ đề hay đối với thương mại điện tử, với hệ thống quản lý nội dung và luôn là lựa chọn tối ưu đối với rất nhiều doanh nghiệp, trong đó có Niteco. Sự thật là, Niteco là đối tác thương mại lớn nhất của Optimizely suốt nhiều năm qua.
Ở phần này, chúng ta sẽ tìm hiểu hệ thống kiến trúc của một dự án đã và đang chạy, với các phần liên quan. Nếu như bạn nghĩ Optimizerly chỉ đơn giản là một CMS hoặc Commerce system thì bạn đã bỏ sót khá nhiều phần kiến trúc phía sau - những phần mà chỉ khi bạn bắt tay vào làm trong thực tế thì bạn mới hiểu được độ phức tạp của nó.
Kiến trúc hệ thống thương mại điện tử cơ bản
Hệ thống trên thể hiện mối quan hệ của các khối làm việc kết hợp với nhau, mỗi khối thực hiện một chức năng nhất định trong hệ thống:
- CDN: Mục tiêu là cung cấp tính khả dụng và hiệu suất cao bằng cách phân phối dịch vụ theo không gian liên quan đến người dùng cuối.
- Frontsites: Khối ứng dụng bao gồm CMS và Commerce; Ngoài ra, hệ thống đang được triển khai trên Azure, từ đây, Application insights sẽ giúp việc quản lý vận hành của hệ thống trở nên tiện lợi hơn bao giờ hết.
- SAP systems: QAD và Gigya giúp quản lý thông tin sản phẩm, thông tin người dùng và hóa đơn từ hệ thống Commerce.
- Microservices: Không thể phủ nhận rằng thời gian gần đây người ta thường nhắc tới nhiều từ khóa này. Bởi lẽ, các services là nơi cung cấp tính năng tìm kiếm, quản lý kho và thời gian vận chuyển; BAM đảm nhận việc g cung cấp giải pháp quản lý ảnh cho hệ thống sản phẩm; còn Cloudcontrol sẽ quản lý tổ chức cho người dùng.
- Payments: Đảm nhiệm chức năng thanh toán khi người dùng muốn mua hàng.
- Caching layers và NoSql: Thực hiện nhiệm vụ tích hợp dữ liệu và lưu trữ dữ liệu tạm thời để tăng tốc hiệu năng của toàn bộ hệ thống.
Vậy SOLID đóng vai trò gì trong hệ thống này?
Chúng ta đều biết, việc thiết kế tránh các phụ thuộc trực tiếp giữa các modules sẽ làm tăng tính linh hoạt cho các thay đổi, có thể đến trong tương lai. Thử xem xét một vài ví dụ sau:
- Đổi cổng thanh toán (Payment) hoặc bổ sung thêm.
- Đổi service quản lý ảnh cho hệ thống (BAM).
- Đổi RedisCacher về hệ thống Pub/Sub với cơ chế xử lý đồng bộ tốt hơn.
- Tích hợp với dịch vụ tìm kiếm khác.
Nếu thay đổi có thể dẫn đến việc phải lược bỏ quá nhiều thứ ở hệ thống đang có, thì đồng thời chúng ta cũng cần xem xét việc phải kiểm thử lại các chức năng hiện tại. Do vậy, việc thiết kế giảm phụ thuộc trực tiếp giữa 2 modules là điều cần thiết. Hai modules này sẽ phụ thuộc vào phần thứ ba (interfaces / abstraction). Khi cần thay đổi, chúng ta sẽ giảm tối đa việc thay đổi trong sources đang có.
Như vậy, bên cạnh CMS và Commerce là hai frameworks được dùng phổ biến, khi làm việc với Optimizely, chúng ta còn có cơ hội làm với microservices và nhiều components khác. Và việc ứng dụng SOLID sẽ giúp tăng tính linh động cho các thay đổi hoàn toàn có thể xảy ra trong tương lai
Trang web tham khảo:
# Concepts https://devopedia.org/solid-design-principles
# Product https://laerdal.com/no/
# Solid with Csharp https://procodeguide.com/design/SOLID-principles-with-csharp-net-core/
Làm việc tại Niteco là làm việc với những chuyên gia về công nghệ, ham học hỏi và sẵn sàng training, truyền đạt kiến thức. Để có cơ hội làm việc với anh Nguyễn Quang Mạnh và các đồng nghiệp khác, các bạn có thể ứng tuyển các vị trí sau tại Niteco nhé: Các vị trí đang tuyển dụng tại Niteco.