Logic kinh doanh thực sự là gì?


115

Tôi đang làm việc với phát triển web từ năm 2009, khi tôi bắt đầu với PHP. Khi tôi chuyển sang ASP.NET, tôi đã nghe rất nhiều về DDD và OOAD, nơi tập trung rất nhiều vào "logic kinh doanh" và "quy tắc kinh doanh" này. Vấn đề là tất cả các ứng dụng tôi đã phát triển cho đến bây giờ đều là về các hoạt động của CRUD và tôi chưa bao giờ thấy những điều này trong thực tế.

Tôi chỉ đơn giản là không thể tưởng tượng những gì những điều đó thực sự có thể có trong thực tế. Vì vậy, logic kinh doanh thực sự là gì và làm thế nào điều này phù hợp với một ứng dụng? Tôi biết chúng được triển khai như các phương thức trong các mô hình miền, nhưng những phương thức đó có thể là gì và ở đâu trong ứng dụng chúng có thể sử dụng?

Câu trả lời:


107

CRUD là từ viết tắt của cụm từ Tạo, Đọc, Cập nhật và Xóa. Đó là bốn thao tác cơ bản mà bạn có thể thực hiện trên bộ dữ liệu. Nhưng luôn có nhiều ứng dụng kinh doanh hơn là tạo, đọc, cập nhật và xóa các bản ghi cơ sở dữ liệu.

Hãy bắt đầu với một số định nghĩa cơ bản, sau đó xem xét một vài ví dụ và xem cách các định nghĩa đó ánh xạ tới các ví dụ và cách chúng ánh xạ tới phần mềm thực tế.

Logic kinh doanh hoặc logic miền là một phần của chương trìnhmã hóa các quy tắc kinh doanh thực tế mà xác định cách dữ liệu có thể được tạo ra, lưu trữ, và thay đổi. Nó quy định cách các đối tượng kinh doanh tương tác với nhau và thực thi các tuyến đường và phương thức mà các đối tượng kinh doanh được truy cập và cập nhật.

Quy tắc kinh doanh mô tả các hoạt động, định nghĩa và các ràng buộc áp dụng cho một tổ chức. Các hoạt động cùng nhau tạo thành một quy trình; mỗi doanh nghiệp sử dụng các quy trình này để tạo thành các hệ thống hoàn thành công việc.

Bây giờ, hãy làm việc với một số ví dụ.

Chuyển tiền từ tài khoản kiểm tra này sang tài khoản khác

Đầu tiên, những điều mà bạn cần biết (đầu vào) là gì?

  • Danh tính của người thực hiện chuyển nhượng
  • Số tiền cần chuyển
  • Số tài khoản kiểm tra nguồn
  • Số tài khoản kiểm tra mục tiêu

Một số "quy tắc kinh doanh" phải được áp dụng là gì?

  • Người đưa ra yêu cầu phải có thẩm quyền để làm như vậy.
  • Giao dịch phải là nguyên tử .
  • Giao dịch có thể có yêu cầu báo cáo với chính phủ, nếu vượt quá một số tiền nhất định

Theo "nguyên tử", ý tôi là giao dịch phải hoàn toàn thành công hoặc nó phải hoàn toàn thất bại. Bạn không thể có các giao dịch tài khoản mà tiền được lấy từ một tài khoản mà không đến tài khoản kia (tiền biến mất) hoặc tiền được gửi vào tài khoản, nhưng không được ghi nợ từ tài khoản khác (tiền xuất hiện một cách kỳ diệu từ đâu).

Đặt hàng một cái gì đó từ Amazon.

Những gì bạn cần biết?

  • Danh tính của người đặt hàng
  • Thông tin vận chuyển
  • Thông tin thanh toán
  • Phương thức thanh toán
  • Số lượng và số lượng của từng mặt hàng để vận chuyển
  • Cách vận chuyển (qua đêm, thuyền chậm hoặc siêu tiết kiệm)
  • Thuế suất nhà nước

Điều gì xảy ra sau khi đặt hàng?

  • Các mặt hàng được kéo từ chứng khoán
  • Số lượng trên tay được ghi nợ
  • Các mặt hàng được đóng gói để vận chuyển
  • Hết hàng là hàng tồn kho
  • Các mặt hàng giảm dưới số lượng tối thiểu được đặt hàng
  • Một lô hàng hay hai?
  • Một danh sách hóa đơn / vận chuyển được in và đặt theo đơn đặt hàng

    ..Vân vân.


5
Tôi thích các định nghĩa nhưng trong các ví dụ, tôi bỏ lỡ sự phân biệt bạn thực hiện giữa logic kinh doanh so với quy tắc kinh doanh.
jv-Jan de Vaan

1
ĐỒNG Ý. Nhưng tại sao bạn gắn nhãn "Giao dịch phải là nguyên tử" như một quy tắc kinh doanh? Tôi có vẻ hơi thấp cho một quy tắc kinh doanh.
jv-Jan de Vaan

9
@jdv: Bạn đang xem xét lại điều này. Một giao dịch viên chỉ thực hiện một nửa giao dịch đó?
Robert Harvey

1
@jdv: Nói rằng giao dịch phải là nguyên tử bao hàm hai điều: (1) nếu có gì đó cản trở quá trình xử lý giao dịch, có thể hoàn tác bất kỳ tác động nào của giao dịch như thể nó chưa từng xảy ra (ngoại trừ, có lẽ, đối với việc tạo một báo cáo nhật ký lỗi) hoặc nếu không thì hoàn thành mọi thứ cần phải hoàn thành; (2) không có phần nào của giao dịch sẽ chồng lấp bất kỳ giao dịch "nguyên tử" nào khác liên quan đến các tài khoản đó. Ví dụ: nếu ai đó có 1.000.000 đô la trong mỗi hai tài khoản chuyển 500.000 đô la từ tài khoản này sang tài khoản khác tại thời điểm ngân hàng được yêu cầu ...
supercat

4
Giao dịch @jdv là nguyên tử là một yêu cầu cơ bản cần được đảm bảo và liên quan đến trạng thái kết thúc.
icarus74

27

CRUD chỉ đơn giản là Tạo, Đọc, Cập nhật, Xóa mà ứng dụng thực hiện.

Ở một mức độ nào đó, trình theo dõi lỗi cũng là một ứng dụng CRUD. Tạo lỗi, Đọc (hiển thị) lỗi, Cập nhật lỗi và có thể xóa chúng.

Tuy nhiên, có nhiều thứ để theo dõi lỗi hơn là chỉ CRUD.

  • Nhà phát triển không được phép đánh dấu lỗi đã được xác minh hoặc đóng - đó là một phần công việc của QA. Và vì vậy, một số mã có trong đó để đảm bảo rằng ai đó thiếu vai trò của QA không thể đánh dấu một lỗi là đã đóng hoặc xác minh.
  • Không ai ngoài một người quản lý dự án thực sự có thể xóa một lỗi.
  • Để một lỗi được đánh dấu là "kiểm tra tôi", phải có ít nhất một cam kết mã chống lại lỗi đó.
  • Chỉ một lỗi ở trạng thái 'đóng' mới có thể được chuyển sang trạng thái 'mở lại'
  • Nhà phát triển được gán cho lỗi không thể chuyển nó từ 'đánh giá mã' sang 'hoàn tất đánh giá mã'
  • QA và Nhà phát triển chỉ có thể thấy các lỗi trên các dự án mà họ được giao.

Mã thực hiện ở trên là logic kinh doanh của ứng dụng.

Hạn chế của quy trình công việc hoặc ai có thể thực hiện các hoạt động khác nhau trong CRUD. Đây là những gì tách một ứng dụng CRUD với một ứng dụng khác. Chúng là những phần mà bạn cần để doanh nghiệp thực sự nói cách ứng dụng hoạt động. Làm thế nào hợp lý là ... tốt, đó là thảo luận tốt nhất về một ly bia ra khỏi tai nghe của người quản lý dự án. Nhưng đó là những gì kinh doanh logic.

Chắc chắn, có thể viết ứng dụng CRUD 'thuần túy' trong đó không có vai trò, mọi thứ đều có thể được sửa đổi và xem - nhưng đây là những ngoại lệ thay vì quy tắc.

Việc kinh doanh Logic là logic mà bạn đang viết vào chương trình của bạn để xử lý các quy tắc kinh doanh mà bạn đang đưa ra.


Khi bạn bắt đầu tham gia vào các quy tắc kinh doanh, điều này có xu hướng ở mức cao hơn so với chính bản thân hoặc logic kinh doanh. Điều này có xu hướng là những điều bạn nhận được từ một nhà phân tích kinh doanh đang làm việc với doanh nghiệp.

Xem xét trong ví dụ này, một chương trình xác định cách xử lý trả lại một mặt hàng tại bàn trả lại trong cửa hàng.

  • Nếu biên nhận bằng hoặc hơn 90 ngày tuổi, chỉ có thể cung cấp tín dụng trong cửa hàng
  • Nếu hóa đơn chưa đến 90 ngày, hãy ghi có gói thầu mà hóa đơn đã được sử dụng để mua (tín dụng quay lại thẻ tín dụng, tiền mặt trở lại thành tiền mặt, tín dụng trong cửa hàng chuyển sang tín dụng trong cửa hàng) ... trừ khi là một tấm séc, trong trường hợp đó sử dụng tiền mặt.

Đó là một số quy tắc kinh doanh. Họ không nói chuyện với phần CRUD của ứng dụng.

Khi làm việc với các quy tắc kinh doanh, bạn thường có thể tìm thấy các quy tắc này được viết trong một công cụ quy tắc (ví dụ: Windows Workflow Foundation Rules Engine ) thay vì viết mã thô trong hệ thống của bạn.


Nhận ra rằng sự phân biệt logic / quy tắc là một trong những thuật ngữ và có thể được tranh luận suốt đêm dài (tốt nhất là một lần nữa bia). Mặc dù đây không phải là một sự khác biệt hiếm gặp, mặc dù cả hai có thể hòa hợp với nhau.


23

Các câu trả lời khác là chính xác. Thêm một suy nghĩ nữa

Logic kinh doanh là di động

Nếu bạn thực hiện lại một dự án phần mềm bằng ngôn ngữ lập trình khác, giả sử chuyển từ Turbo Pascal sang Java , logic kinh doanh & quy tắc kinh doanh là những gì mà các dự án cũ và mới sẽ có .

Các ngôn ngữ lập trình sẽ khác nhau. Các mã nguồn sẽ là hoàn toàn khác nhau. Các công cụ ( IDE , trình biên dịch , v.v.) có thể hoàn toàn khác nhau. Các giao diện người dùng có thể hoàn toàn lại tổ chức hoặc có một khác nhau look-and-feel . Các tài liệu có thể sẽ khác nhau. Nhưng mục đích của hai dự án, kết quả cuối cùng của công việc được thực hiện / mục tiêu đã hoàn thành, sẽ giống nhau.


10

Logic kinh doanh về cơ bản bao gồm 2 loại lớn: xác nhận và lưu lượng. Logic nghiệp vụ nói rằng qty 1 phải lớn hơn hoặc bằng qty 2 - ví dụ: số lượng mặt hàng cần mua phải nhỏ hơn hoặc bằng số lượng mặt hàng trong kho.

Trong một ứng dụng, những người kinh doanh sẽ nói đây là quy tắc kinh doanh và vì vậy bạn viết mã để thực thi logic nghiệp vụ này (xác nhận). Một ứng dụng khác sẽ nói rằng nếu số lượng mặt hàng được đặt hàng lớn hơn số lượng mặt hàng trong kho, để chấp nhận đơn đặt hàng và sau đó đặt đơn hàng của bạn cho chênh lệch cộng thêm 20%, và vì vậy bạn sẽ viết logic kinh doanh này (lưu lượng) .

CRUD chỉ đơn giản là nhận dữ liệu vào và ra lưu trữ và thay đổi nó. Logic nghiệp vụ xác định những gì bạn làm với dữ liệu đó và những biến đổi nào bạn được phép thực hiện với dữ liệu đó. Là khách hàng của bạn sinh ra trong tương lai, dưới 5 tuổi, từ một khu vực địa lý nhất định (giảm giá cho người dân địa phương / khách truy cập). CRUD rất đơn giản, biết rằng bạn chỉ có thể nhận được tín dụng thuế cho trẻ em nếu đứa trẻ sống với bạn hơn một nửa thời gian còn sống trong năm dương lịch KHÔNG chỉ hơn 6 tháng, thì phức tạp hơn.


9

Logic hoặc quy tắc kinh doanh là bất cứ điều gì không liên quan đến các cơ chế của giao diện người dùng ("công cụ lập trình"). Chúng là những thứ bạn vẫn sẽ phải áp dụng nếu bạn đang thực hiện giao dịch này hoặc bất cứ điều gì 100 năm trước (thủ công). Ví dụ, khi áp dụng thuế bán hàng cho một giao dịch mua.


1

"Logic nghiệp vụ" của một chương trình hoặc ứng dụng là một phần của mã thực sự làm mọi thứ với đầu vào (từ người dùng, hệ điều hành, v.v.). "Quy tắc kinh doanh" của một ứng dụng thường là các tham số được xác định của chính chương trình (chẳng hạn như cách xử lý đầu vào). Ít nhất, đây là cách tôi đã nghe nó được nhắc đến từ nhiều người. Chúng là khá nhiều thuật ngữ tương tự để mô tả các phần của mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.