Có một API ngoại lệ mạnh mẽ và được thiết kế phù hợp là rất phù hợp. Sử dụng điều này để thực thi các quy tắc kinh doanh cũng có thể phù hợp. Trong thực tế theo kinh nghiệm của tôi, quy tắc kinh doanh càng phức tạp thì càng có nhiều khả năng nó sẽ bị xử lý theo cách này. Nó thường dễ dàng như vậy nếu không dễ dàng hơn để viết một hệ thống trong đó các trường hợp ngoại lệ được mong đợi hơn là viết logic phân nhánh có thẩm quyền.
Điều này có nghĩa là các quy tắc đơn giản có thể được mô tả trong một câu nói chung nên được thực hiện theo cách phòng ngừa hoặc có thẩm quyền tùy thuộc vào đó là gì. Tuy nhiên, nếu bạn có một quy tắc đa chiều và yêu cầu nhiều hơn ba hoặc bốn yếu tố (đặc biệt nếu việc lựa chọn các yếu tố này dựa trên một hoặc nhiều yếu tố khác) thì mã hóa ngoại lệ có thể được duy trì nhiều hơn. Thông thường trong các trường hợp này, đường dẫn logic sẽ có nhiều ngoại lệ cần phải được ném, (kiểm tra lý do tại sao hành động không thể được thực hiện) sau đó (hoặc ngược lại) có một sự sụp đổ đối với bảo mật (để kiểm tra xem hành động đó có được phép không ), đôi khi sẽ có một số logic tích lũy có thẩm quyền cần được kiểm tra (tính sẵn có của hậu duệ / tổ tiên, tiền thân nói rằng các đối tượng phải được đưa vào, v.v.
Một lợi ích bắt nguồn từ kiểu ném ngoại lệ này là nó cho phép bạn tách ra và sử dụng lại các ngoại lệ tiền thân trên nhiều lĩnh vực trong dự án của bạn. (Đây là bản chất của Lập trình hướng theo khía cạnh.) Bằng cách này, bạn đang gói gọn một khía cạnh cụ thể của các quy tắc kinh doanh chung của bạn trong một thành phần khép kín và có thể duy trì. Nói chung, các thành phần này sẽ tương ứng 1-1 với các thông báo lỗi được ném. (Mặc dù đôi khi bạn sẽ có một thành phần đưa ra một số ngoại lệ khác nhau, nhưng bạn hầu như không bao giờ có cùng một ngoại lệ được ném từ nhiều thành phần.)
Theo tôi, việc thiết kế các hệ thống ngoại lệ dựa trên khó khăn hơn và thời gian phát triển ban đầu dài hơn vì bạn phải xây dựng quy trình ngoại lệ trên tất cả các cấp độ N. Tuy nhiên, những hệ thống này thường ổn định hơn nhiều. Mặc dù không bao giờ có thể thiết kế một hệ thống 'sẽ không thất bại', lợi ích của thiết kế dựa trên ngoại lệ là bạn luôn lường trước được sự thất bại. Đối với hầu hết mọi người, quá trình này có thể phản trực giác. Nó giống như hỏi đường và có ai đó nói với bạn tất cả các đường phố mà bạn không nên bật.