2013-04-22 25 views
22

Cũng có một chủ đề tương tự về kịch bản giao dịch với cơ sở dữ liệu NoSQL, nhưng cái này nói chung về mô hình. Từ những gì tôi tìm thấy về kịch bản giao dịch, nó không phải là hướng đối tượng ở tất cả. Mã thủ tục cơ bản của nó mặc dù thực tế là nó có thể sử dụng các đối tượng trong mỗi dòng mã của nó.Kịch bản giao dịch là Antipattern?

Giải pháp tốt hơn là sử dụng mô hình miền thay thế, cùng với bản ghi hoạt động hoặc trình ánh xạ dữ liệu với đơn vị công việc/bản đồ nhận dạng/đối tượng truy vấn/tải chậm và như vậy. Kịch bản giao dịch có thể dễ sử dụng, nhưng nó thực sự là lập trình thủ tục và do đó nên được coi là một antipattern trong thế giới hướng đối tượng.

Bạn nghĩ sao? Bạn có đồng ý với kịch bản giao dịch là antipattern không? Hay bạn thực sự có một cách thiết kế một kịch bản giao dịch mà là hướng đối tượng thay vì thủ tục ngụy trang? Tôi nghi ngờ điều này là có thể mặc dù.

Trả lời

37

Script giao dịch chắc chắn là không chống mẫu.

Từ những gì tôi tìm thấy về tập lệnh giao dịch, nó hoàn toàn không hướng đối tượng.

Bạn nói đúng, thực tế là không. Tuy nhiên, thực tế đó không làm cho nó trở thành một hình mẫu. Mặc dù nó là một cách tiếp cận thủ tục, thực sự, nó vẫn có vị trí phù hợp trong loạt các mẫu kiến ​​trúc logic nghiệp vụ - bạn chỉ cần biết trong trường hợp đó là cách thực hành tốt nhất để sử dụng nó - và trong trường hợp đó không phải. Nói một cách đơn giản: nếu miền vấn đề của bạn rất đơn giản thì nó không đáng để sử dụng một mẫu phức tạp hơn trong logic nghiệp vụ của bạn.

Hoặc - như Fowler viết:

Khi nào thì sử dụng nó

Vinh quang của giao dịch Script là sự đơn giản của nó. Tổ chức logic theo cách này là tự nhiên đối với các ứng dụng chỉ với một lượng nhỏ logic, và nó liên quan đến rất ít chi phí đầu vào hoặc trong hiệu suất hoặc trong sự hiểu biết.

Mẫu chống bạn có thể nghĩ đến được gọi là Anemic Domain Model. Đây là trường hợp khi bạn có ý địnhnghĩ rằng bạn đang xây dựng Mô hình miền - bởi vì miền vấn đề của bạn đủ phức tạp cho điều đó, nhưng bạn thực sự kết thúc trong Tập lệnh giao dịch - vì tổ chức mã lỗi/yếu Kỹ năng OO.

+0

Những gì bạn nói là hoàn toàn đúng, nhưng trong kinh nghiệm của tôi mỗi khi tôi đã đi qua mô hình giao dịch Script nó là một tổng mess tạo ra để bù đắp cho mô hình miền thiếu máu. Gọi nó là tội lỗi của hiệp hội, nhưng khi tôi nhìn thấy mô hình này, tôi biết nó là một vấn đề. – HDave

7

Đó là không phải chống mẫu. Trên thực tế, hầu hết các ứng dụng doanh nghiệp (tất cả những gì tôi đã thấy) đều sử dụng tập lệnh giao dịch chứ không phải mẫu mô hình miền phong phú.

Bản ghi hoạt động mẫu bạn đã đề cập chỉ hữu ích khi bạn có bản đồ đơn giản một đối tượng miền để tập hợp lưu trữ liên tục (bảng RDBMS).

Trình ánh xạ dữ liệu giống như ORM (Hibernate và bạn bè). Nếu logic nghiệp vụ của bạn nằm trong thực thể tên miền, các thực thể này phải tự biến đổi. Theo tôi, logic cặp vợ chồng này làm thay đổi trạng thái (vốn là vốn có khi bạn sử dụng ORM) với chính trạng thái.Việc xem mô hình miền của bạn từ bên ngoài và đưa logic nghiệp vụ của bạn trở nên đơn giản hơn vào các dịch vụ (kịch bản giao dịch). Ngoài ra, nếu khối lượng logic kinh doanh của bạn lớn, khó tìm thấy mã có liên quan khi nó nằm rải rác trên các thực thể tên miền (giống như việc các tập lệnh giao dịch của bạn được trộn lẫn với nhau).

Nhưng bạn không phải kết thúc với phương pháp tiếp cận hoàn toàn theo thủ tục vì bạn có thể (và nên) phân hủy các dịch vụ của bạn thành các 'thùng chứa thủ tục' có tính gắn kết cao.

Các vấn đề liên quan