Sơ đồ trường hợp sử dụng UML cho phép hai cách tương đương dường như cho thấy trường hợp sử dụng nhất định có thể được thực hiện theo một số cách khác nhau là use case generalizations thay vì use case extensions. Tôi đã thấy ví dụ cơ bản sau đây được mô hình hóa bằng cách sử dụng một trong hai cách tiếp cận với tần số bằng nhau, đôi khi trong một nguồn duy nhất.Sử dụng trường hợp tổng quát so với phần mở rộng
Để tâm trí của tôi một phần mở rộng là một mối quan hệ yếu hơn so với khái quát như một thay thế trực tiếp của các trường hợp sử dụng chuyên ngành đối với trường hợp cơ sở phải có thể trong sự tổng quát nhưng không nhất thiết ở phần mở rộng.
Dường như với tôi rằng khái quát hóa ngụ ý việc thực hiện đa hình là mong muốn trong khi phần mở rộng ngụ ý một số cấu trúc phân nhánh sẽ được sử dụng.
void makePayment(const PaymentDetails* pd)
{
pd->pay();
}
như trái ngược với
void makePayment(const PaymentDetails* pd)
{
switch(pd->type)
{
case EFT:
payViaEFT(pd);
break;
case PAYPAL:
payViaPayPal(pd);
break;
case CREDITCARD:
payViaCreditCard(pd);
break;
}
}
Không phải là giai đoạn sử dụng Case quá sớm để lo ngại thực hiện như vậy cụ thể để được mô hình? Có nhiều sơ đồ UML thích hợp hơn cho điều đó. Có một quy tắc cứng nhắc và nhanh chóng nào liên quan đến việc sử dụng cái nào và nếu nó là gì?
Cả hai triển khai đều mô hình cùng một vấn đề. Chúng không liên kết với một sơ đồ UC hay sơ đồ khác. Một hình đa hình thì hấp dẫn hơn nhiều, vì nó đơn giản hơn, dễ mở rộng hơn và ít bị lỗi của con người hơn. –