Tôi và hai đồng nghiệp khác đang cố gắng hiểu cách thiết kế chương trình tốt nhất. Ví dụ, tôi có một giao diện ISoda
và nhiều lớp mà thực hiện giao diện như Coke
, Pepsi
, DrPepper
, vv ....Sử dụng chính xác phụ thuộc tiêm
Đồng nghiệp của tôi đang nói rằng nó là tốt nhất để đặt các mặt hàng vào một cơ sở dữ liệu như một chìa khóa/giá trị đôi. Ví dụ:
Key | Name
--------------------------------------
Coke | my.namespace.Coke, MyAssembly
Pepsi | my.namespace.Pepsi, MyAssembly
DrPepper | my.namespace.DrPepper, MyAssembly
... sau đó có tệp cấu hình XML ánh xạ đầu vào tới khóa chính xác, truy vấn cơ sở dữ liệu cho khóa, sau đó tạo đối tượng.
Tôi không có bất kỳ lý do cụ thể nào, nhưng tôi chỉ cảm thấy rằng đây là một thiết kế tồi, nhưng tôi không biết phải nói gì hoặc cách tranh luận chính xác chống lại nó.
Đồng nghiệp thứ hai của tôi cho thấy rằng chúng tôi quản lý vi mô từng lớp học này. Vì vậy, về cơ bản đầu vào sẽ đi qua một tuyên bố chuyển đổi, một cái gì đó tương tự như thế này:
ISoda soda;
switch (input)
{
case "Coke":
soda = new Coke();
break;
case "Pepsi":
soda = new Pepsi();
break;
case "DrPepper":
soda = new DrPepper();
break;
}
Điều này có vẻ tốt hơn một chút đối với tôi, nhưng tôi vẫn nghĩ rằng có một cách tốt hơn để làm điều đó. Tôi đã đọc lên trên container IoC vài ngày qua và nó có vẻ như là một giải pháp tốt. Tuy nhiên, tôi vẫn còn rất mới để tiêm phụ thuộc và container IoC, vì vậy tôi không biết làm thế nào để một cách chính xác tranh luận cho nó. Hoặc có lẽ tôi là người sai và có một cách tốt hơn để làm điều đó? Nếu vậy, ai đó có thể đề xuất một phương pháp tốt hơn?
Tôi có thể đưa loại đối số nào vào bảng để thuyết phục đồng nghiệp thử phương pháp khác? Ưu/khuyết điểm là gì? Tại sao chúng ta nên làm điều đó một cách?
Thật không may, đồng nghiệp của tôi rất có khả năng thay đổi vì vậy tôi đang cố gắng tìm ra cách tôi có thể thuyết phục họ.
Edit:
Có vẻ như câu hỏi của tôi là một chút khó hiểu. Những gì chúng tôi đang cố gắng tìm ra là làm thế nào để thiết kế tốt nhất một ứng dụng sử dụng nhiều giao diện và chứa nhiều loại cụ thể để triển khai các giao diện đó.
Có, tôi biết rằng việc lưu trữ nội dung này trong cơ sở dữ liệu là một ý tưởng tồi, nhưng chúng tôi chỉ đơn giản là không biết cách nào tốt hơn. Đây là lý do tại sao tôi yêu cầu cách chúng tôi có làm điều đó tốt hơn không.
public void DrinkSoda(string input)
{
ISoda soda = GetSoda(input);
soda.Drink();
}
Làm cách nào để chúng tôi triển khai chính xác GetSoda
? Chúng ta nên suy nghĩ lại toàn bộ thiết kế? Nếu đó là một ý tưởng tồi để vượt qua các chuỗi ma thuật như thế này, thì chúng ta nên làm như thế nào?
Đầu vào của người dùng như "Chế độ ăn kiêng", "Coke", "Coke Lime" hoặc bất kỳ thứ gì sẽ khởi tạo một loại Coke
, do đó nhiều từ khóa ánh xạ tới một loại duy nhất.
Rất nhiều người đã nói rằng mã được đăng ở trên không tốt. Tôi biết nó xấu. Tôi đang tìm kiếm lý do để trình bày cho các đồng nghiệp của tôi và tranh luận tại sao nó xấu và tại sao chúng ta cần phải thay đổi.
Tôi xin lỗi nếu giải thích này vẫn khó hiểu. Thật khó cho tôi để mô tả tình hình bởi vì tôi không thực sự hiểu làm thế nào để đặt nó trong lời nói.
Thật khó để hiểu vấn đề thực tế bạn đang cố giải quyết là gì. – mquander
Khối mã thứ hai của bạn trông giống như thứ bạn sẽ thấy khi sử dụng mẫu nhà máy. Bạn có hỏi cách xác định loại ISode được chuyển cho bạn không? – NitroxDM
Wow - lưu trữ tên kiểu trong cơ sở dữ liệu, sử dụng tệp XML để ánh xạ từ tới bản ghi cơ sở dữ liệu và sau đó sử dụng sự phản chiếu để khởi tạo chúng - bây giờ ** ** là ** enterprisey! ** – Aaronaught