TL; DR: nó phụ thuộc vào những gì bạn đang cố gắng giải quyết.
Tôi đã có một cuộc trò chuyện tương tự với Gramp của tôi về điều này, trong khi chúng tôi đang nói về việc Func và Action trong C # tuyệt vời như thế nào . My Gramp là một lập trình viên hẹn giờ rất cũ, đó là xung quanh mã nguồn vì phần mềm được chạy trên các máy tính chiếm toàn bộ phòng.
Ông đã thay đổi công nghệ nhiều lần trong đời. Ông đã viết mã bằng C, COBOL, Pascal, BASIC, Fortran, Smalltalk, Java và cuối cùng bắt đầu C # như một sở thích. Tôi đã học được cách lập trình với anh ấy, ngồi trên đùi anh ấy khi tôi còn là một kẻ lầm đường lạc lối, khắc sâu những dòng mã đầu tiên của tôi trên trình soạn thảo màu xanh của SideKick của IBM. Khi tôi 20 tuổi, tôi đã dành nhiều thời gian viết mã hơn là chơi bên ngoài.
Đó là một chút ký ức của tôi, vì vậy xin lỗi nếu tôi không thực tế trong khi kể lại chúng. Tôi hơi thích những khoảnh khắc đó.
Đó là những gì anh ấy nói với tôi:
"Chúng ta có nên khái quát hóa một vấn đề, hoặc giải quyết nó trong phạm vi cụ thể, bạn có hỏi không? À, đó là một ... câu hỏi."
Gramp đã tạm dừng để suy nghĩ về nó trong một khoảnh khắc ngắn, trong khi cố định vị trí của kính trên mặt. Anh ta đang chơi một trò chơi match-3 trên máy tính, trong khi nghe LP của Deep Purple trên hệ thống âm thanh cũ.
"Chà, điều đó phụ thuộc vào vấn đề mà bạn đang cố gắng giải quyết", anh nói với tôi. "Thật hấp dẫn khi tin rằng một giải pháp duy nhất, thần thánh cho tất cả các lựa chọn thiết kế tồn tại, nhưng không có. Kiến trúc phần mềm giống như phô mai, bạn thấy đấy."
"... Pho mát, Gramp?"
"Không quan trọng bạn nghĩ gì về sở thích của mình, sẽ luôn có người cho rằng nó có mùi".
Tôi chớp mắt bối rối một lúc, nhưng trước khi tôi có thể nói bất cứ điều gì Gramp tiếp tục.
"Khi bạn đang chế tạo một chiếc xe hơi, làm thế nào để bạn chọn vật liệu cho một phần?"
"Tôi ... tôi đoán nó phụ thuộc vào chi phí liên quan và phần nên làm, tôi cho là vậy."
"Điều này phụ thuộc vào vấn đề mà bộ phận đang cố gắng giải quyết. Bạn sẽ không chế tạo lốp xe bằng thép hoặc kính chắn gió làm bằng da. Bạn chọn vật liệu giải quyết tốt nhất vấn đề bạn có trong tay. Bây giờ, cái gì là Bạn có nên sử dụng một cách tiếp cận đầy đủ chức năng, để cung cấp sự linh hoạt tối đa cho một mã sẽ chỉ được sử dụng một lần không? Một phần trong hệ thống của bạn sẽ thấy rất nhiều công dụng và có thể có nhiều thay đổi? Lựa chọn thiết kế giống như những vật liệu bạn chọn cho một phần trong xe hơi hoặc hình dạng của viên gạch Lego bạn chọn để xây dựng một ngôi nhà nhỏ Gạch Lego nào là tốt nhất? "
Lập trình viên cao tuổi với lấy một mô hình tàu Lego nhỏ mà anh ta có trên bàn trước khi tiếp tục.
"Bạn chỉ có thể trả lời rằng nếu bạn biết những gì bạn cần viên gạch đó. Làm thế quái nào bạn biết được giải pháp cụ thể tốt hơn giải pháp chung chung hay ngược lại, nếu bạn thậm chí không biết bạn đang gặp vấn đề gì cố gắng giải quyết? Bạn không thể nhìn thấy một lựa chọn mà bạn không hiểu. "
"..Bạn chỉ trích dẫn Ma trận? "
"Gì?"
"Không có gì, tiếp tục."
"Chà, giả sử bạn đang cố gắng xây dựng một cái gì đó cho Hệ thống Hóa đơn Quốc gia. Bạn biết API đó và tệp ba mươi nghìn dòng của nó trông như thế nào từ bên trong. Một giải pháp 'chung chung' để tạo tệp đó thậm chí sẽ trông như thế nào Tệp có đầy đủ các tham số tùy chọn, đầy đủ các trường hợp chỉ nên sử dụng các chi nhánh rất cụ thể của doanh nghiệp. Đối với hầu hết các trường hợp, bạn có thể bỏ qua chúng một cách an toàn. Bạn không cần tạo hệ thống hóa đơn chung nếu điều duy nhất bạn ' Sẽ bán được giày. Chỉ cần tạo một hệ thống bán giày và biến nó thành hệ thống hóa đơn bán giày tốt nhất hiện có. Bây giờ, nếu bạn phải tạo một hệ thống hóa đơn cho bất kỳ loại khách hàng nào, trên một ứng dụng rộng rãi hơn - được bán lại như một hệ thống bán hàng độc lập, chung chung,ví dụ - bây giờ thật thú vị khi thực hiện các tùy chọn chỉ được sử dụng cho Gas, thực phẩm hoặc rượu.Bây giờ đó là những trường hợp sử dụng có thể. Trước đây chúng chỉ là một số trường hợp sử dụng giả thuyết Đừng sử dụng và bạn không muốn triển khai các trường hợp không sử dụng . Đừng sử dụng là em trai của Đừng cần . "
Gramp đặt con tàu lego trở lại vị trí của nó và quay lại trò chơi match-3 của mình.
"Vì vậy, để có thể chọn một giải pháp chung chung hoặc cụ thể cho một vấn đề nhất định, trước tiên bạn cần phải hiểu vấn đề đó là cái quái gì. Nếu không, bạn chỉ đoán và đoán là công việc của các nhà quản lý, không phải lập trình viên. tất cả mọi thứ trong CNTT, nó phụ thuộc. "
Vì vậy, có bạn có nó. "Nó phụ thuộc". Đó có lẽ là cách diễn đạt hai từ mạnh mẽ nhất khi nghĩ về thiết kế phần mềm.