2010-11-13 36 views
7

Tôi đang cố gắng cải thiện kiểu mã hóa của mình. Hãy xem xét kịch bản sau:
Giả sử rằng tôi muốn xác định điều khiển máy chủ Album ASP.Net tùy chỉnh. Mục đích là để cho phép người dùng chọn loại album và tất cả các nội dung khác sẽ được thực hiện bởi điều khiển.
Tôi đã nghĩ về 2 cách tiếp cận:Mẫu thiết kế tốt nhất cho kịch bản sau

1- Xác định giao diện IAlbum và xác định lớp (triển khai IAlbum) cho mọi loại Album. Ví dụ:

public class FlashAlbum : IAlbum 
    { 
    // Implement IAlbum Methods... 
    // FlashAlbum-Specific Properties/Methods. 
    } 
    public class JSAlbum : IAlbum 
    { 
    // Implement IAlbum Methods... 
    // JSAlbum-Specific Properties/Methods. 
    } 

Vì vậy, nếu người dùng muốn có một album flash, anh ấy nên tạo rõ ràng đối tượng FlashAlbum. một cái gì đó như:

var myFlashAlbum = new FlashAlbum(/*FlashAlbumParameters*/); 
var myJSAlbum = new JSAlbum(/*JSAlbumParameters*/); 

Vấn đề là tôi không muốn người dùng phải đối phó với nhiều loại album. Đọc dưới đây để hiểu ý tôi.

2- Xác định IAlbum, xác định một lớp (mà thực hiện IAlbum) cho tất cả các loại Album (giống như trên) và xác định Album lớp mà không thực hiện IAlbum. Nó được sử dụng để tạo ra các trường hợp album trong contructor của nó (mô hình nhà máy). Xác định EnumAlbumTypes:

Public Enum AlbumTypes 
{ 
    FlashAlbum, 
    JSAlbum 
} 

Bây giờ hãy xác định hàm tạo cho album Lớp cha mẹ có tham số kiểu EnumAlbumTypes và tạo album thích hợp dựa trên tham số. Tôi thích phương pháp này. Nhưng tôi không phải rất quen thuộc với mô hình nhà máy. Tôi muốn người dùng tạo album như:

var myFlashAlbum = new Album(AlbumTypes.FlashAlbum); 
// Now set FlashAlbum custom properties. 
var myJSAlbum = new Album(AlbumTypes.JSAlbum); 
// Now set JSAlbum custom properties. 

Cách tiếp cận tốt nhất để đạt được điều này là gì?
Cảm ơn và xin lỗi vì bài đăng dài.

+0

Bạn dường như trả lời câu hỏi của riêng bạn. Mẫu nhà máy xuất hiện để giải quyết tốt hơn kỳ vọng của bạn rằng người dùng không phải đối phó với nhiều loại album bằng cách đóng gói việc tạo một loại cụ thể. Bạn có quan tâm gì về việc triển khai mẫu này? –

+1

Như bạn thấy trong mã của tôi, tôi đã gọi cho lớp nhà máy chính không chính xác. 'Album mới (AlbumType.FlashAlbum)' là chính xác. Tôi nên gọi nó là: 'AlbumFactory.Create (AlbumType.FlashAlbum)'. P.S. Vì tôi mới sử dụng các mẫu thiết kế, tôi muốn đảm bảo rằng tôi đang đi đúng hướng. – Kamyar

Trả lời

4

Mẫu nhà máy là một lựa chọn tốt khi bạn muốn đóng gói quyết định về loại đối tượng cụ thể cần tạo. Phương thức tạo nên trả lại loại Album sao cho nó sẽ là:

var myFlashAlbum = Album.create(AlbumTypes.FlashAlbum); 
    var myJSAlbum = Album.create(AlbumTypes.JSALbum); 

Nếu quá trình tạo album khác nhau đáng kể bạn có thể muốn xem xét mẫu trình tạo. Nó cho phép bạn đóng gói phức tạp tạo logic.

+0

Cảm ơn! xây dựng mô hình có vẻ thú vị. – Kamyar

+1

"var" cũng có thể được thay thế bằng IAlbum. – Philipp

0

Nếu bạn không muốn người dùng quan tâm đến loại album họ có, thì tại sao bạn thậm chí còn cho họ lựa chọn?

Thừa kế có vẻ là lựa chọn đúng ở đây. Tôi không thấy bất kỳ bằng chứng hay tranh luận nào ủng hộ lựa chọn khác.

+0

Tôi muốn người dùng có MỘT đối tượng và có thể thay đổi kiểu của Album THAT. không tạo đối tượng thuộc loại khác. – Kamyar

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