Trong thiết kế phần mềm, chúng ta thường có xu hướng phân tách ứng dụng của mình thành hai khối lớn: khối luật nghiệp vụ và khối các plugin. Và để làm điều đó cho tốt, chúng ta nên có khả năng phát biểu thật rõ ràng luật nghiệp vụ thật ra là thứ gì?
Luật nghiệp vụ then chốt
Một cách nghiêm ngặt, luật nghiệp vụ là những thủ tục giúp cho quá trình kinh doanh kiếm được ra tiền. Chúng đảm nhiệm vai trò đó mà thậm chí còn không cần quan tâm đến việc những thủ tục đó có được thực hiện bằng hệ thống tự động hóa (máy tính, phần mềm) hay không. Chúng vẫn có thể giúp kiếm được tiền, kể cả khi được thực hiện hoàn toàn thủ công. Chẳng hạn thủ tục tính lãi cho vay của một ngân hàng có thể giúp ngân hàng kiếm được tiền mà không cần đến bất cứ hệ thống phần mềm nào.
Chúng ta gọi những thủ tục như thế là luật nghiệp vụ then chốt, bởi chúng là mấu chốt của nghiệp vụ kinh doanh, và chúng tồn tại kể cả khi không có hệ thống tự động nào vận hành chúng.
Các luật nghiệp vụ then chốt thường yêu cầu sử dụng đến một số dữ liệu liên quan. Lấy ví dụ, thương vụ cho vay của ngân hàng sẽ yêu cầu dữ liệu về khonar vay, lãi suất, và thời điểm đáo hạn. Chúng ta gọi những dữ liệu đó là dữ liệu nghiệp vụ then chốt. Những dữ liệu này tồn tại kể cả khi không có hệ thống tự động nào lưu giữ và tính toán chúng.
Luật và dữ liệu nghiệp vụ then chốt gắn bó chặt chẽ với nhau, chúng là những ứng viên rất tốt để mô hình hóa thành các object, chúng ta gọi những object đó là các Entity.
Các Entity
Entity là một object mà thể hiện một tập nhỏ các luật nghiệp vụ then chốt hoạt động trên một số dữ liệu nghiệp vụ then chốt. Các object Entity hoặc là chứa các dữ liệu nghiệp vụ then chốt hoặc có khả năng truy cập tới chúng rất dễ dàng. Interface của các Entity chứa các hàm triển khai các luật nghiệp vụ then chốt mà hoạt động trên những dữ liệu đó.
Lấy ví dụ, entity Khoản vay có thể sẽ trông như sau. Nó chứa ba mảnh dữ liệu nghiệp vụ then chốt, và hiển hiện trên giao diện của nó ba nghiệp vụ then chốt liên quan:
Khi tạo ra những class như thế này, chúng ta đã gom những mảnh phần mềm quan trọng với nghiệp vụ kinh doanh, chia tách nó khỏi bất kỳ nhiễu nhương nào khác trong hệ thống phần mềm (như database, giao diện người dùng, framework…). Khối phần mềm đó sẽ có có thể phục vụ trên bất kỳ hệ thống nào, không quan trọng hệ thống đó hiển thị như thế nào hay lưu tồn dữ liệu ra sao. Các Entity thuần túy là các luật nghiệp vụ, ngoài ra không còn thứ gì khác.
Mặc dù ở đây sử dụng tới class để làm ví dụ. Nhưng entity không phụ thuộc vào khái niệm đó. Chúng ta thậm chí không cần tới một ngôn ngữ hướng đối tượng để có thể tạo ra một entity. Tất cả những gì cần thiết là thao tác gắn kết những luật nghiệp vụ then chốt và những dữ liệu nghiệp vụ then chốt liên quan lại với nhau trong cùng một module phần mềm.
Các Use Case
Không phải mọi luật nghiệp vụ đều có tính thuần chất như các Entity. Một số luật nghiệp vụ giúp ăn tiền bằng cách thiết lập nên cách mà hệ thống tự động hoạt động. Những luật đó có thể không xuất hiện khi thực hiện nghiệp vụ một cách thủ công, bởi chúng chỉ có ý nghĩa trong những hệ thống tự động hóa.
Lấy ví dụ, một ứng dụng đăng ký khoản vay có thể sẽ có các hoạt động xác thực danh tính cũng như tìm hiểu điểm tín dụng của người đăng ký. Nhờ đó mà ngân hàng có thể chỉ định để hệ thống không xử lý các đăng ký chưa được xác thực hay có dấu hiệu sinh nợ xấu.
Những chi tiết như vậy được gọi là use case – những ca sử dụng. Một use case là một bản mô tả về cách mà hệ thống hoạt động trong một trường hợp sử dụng nào đó. Nó đặc tả thông tin đầu vào được cung cấp bởi người dùng, thông tin đầu ra được trả lại, và các bước xử lý liên quan tới quá trình tạo nên đầu ra đó. Chúng mô tả các luật nghiệp vụ đặc thù của ứng dụng, khác với các luật nghiệp vụ của các Entity.
Dưới đây là ví dụ của một use case. Chú ý rằng dòng cuối cùng nó đã làm việc với Customer. Đó là tham chiếu tới entity Customer – thứ chứa các luật nghiệp vụ then chốt khống chế mối quan hệ giữa ngân hàng và các khách hàng của nó.
Các use case chứa các luật đặc tả thời điểm và cách thức mà các luật nghiệp vụ then chốt trong các Entity được gọi. Chúng là nhạc trưởng điều phối vũ điệu của các Entity.
Cũng lưu ý rằng các use cáe không mô tả nhiều về giao diện người dùng trừ những thông tin tối thiểu về những dữ liệu gì sẽ tới từ và được gởi lại. Từ use case không thể suy ra được rằng ứng dụng sẽ được chuyển giao như một ứng dụng web hay một ứng dụng dòng lệnh hay một dịch vụ web thuần túy.
Điều đó rất quan trọng.
(còn tiếp)