2012-02-07 46 views
6

Vì vậy, đây là kịch bản, tôi đang tái cấu trúc một số mã spaghetti. Vấn đề đầu tiên của tôi là một chuỗi các lớp đã tạo mới các lớp khác, tôi đã sửa lỗi này bằng cách làm cho ctor của lớp tôi muốn kiểm tra (Search.cs) lấy lớp mà nó cần như một sự phụ thuộc, bây giờ nó trông như thế này.Chế nhạo một lớp kế thừa từ một lớp khác

public Search(XmlAccess xmlFile, SearchDatabaseConnect searchDatabaseConnection) 
    { 
     this.xmlFile = xmlFile; 
     FsdcConnection = searchDatabaseConnection; 
     Clear(); 
    } 

Tôi đang làm mới nó thêm lên chuỗi. Đó là tất cả tốt nhưng tôi có một vấn đề nhỏ.

Lớp mà tôi ctor tiêm thừa kế từ lớp khác, tôi đã Resharper và tôi đã trích xuất giao diện nhưng vấn đề là lớp phụ thuộc kế thừa từ một lớp cụ thể - xem ý tôi là gì?

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 
{ // } 

Tôi không biết phải làm gì về kế thừa trên DatabaseConnect? Làm thế nào để tôi thử? Rõ ràng nếu đó không phải là có tôi sẽ được tất cả các thiết lập tôi có thể thử một ISearchDatabaseConnect và đi chúng tôi đi nhưng tôi bị mắc kẹt trên thừa kế của một lớp bê tông. Tôi chắc chắn mọi người đã chạy vào điều này trước khi googl'ing của tôi là một thất bại khi nó đến để tìm kiếm các ví dụ về việc này.

Cảm ơn trước vì bất kỳ đề xuất hữu ích nào.

+1

Chỉ để tham khảo "newing it up" thường được gọi là instantiating ;-) –

+0

vâng, cảm ơn bạn - nó chỉ là vấn đề sở thích cá nhân, tôi có xu hướng thích cụm từ "newing" vì nó a) là từ khóa mà mã sử dụng (well OK n ew là) và b) bằng cách nào đó có vẻ thú vị hơn là thuật ngữ instantiating. – Kenn

Trả lời

3

DatabaseConnect cũng có giao diện được trích xuất từ ​​nó không? Tôi nghĩ bạn có thể thiết lập nó như:

public interface IDatabaseConnect 

public class DatabaseConnect : IDatabaseConnect 

public interface ISearchDatabaseConnect : IDatabaseConnect 

public class SearchDatabaseConnect : DatabaseConnect, ISearchDatabaseConnect 

Và bây giờ, hãy thực hiện tất cả "nội dung" từ cả hai giao diện.


Side-lưu ý, phương pháp của bạn/constructor có lẽ nên dùng trong giao diện, không phải là bê tông:

public Search(XmlAccess xmlFile, ISearchDatabaseConnect searchDatabaseConnection) { ... } 

Bằng cách đó bạn có thể tiêm các mô hình, như:

var mockedSearchDatabaseConnect = new Mock<ISearchDatabaseConnect>(); 
var search = new Search(xmlFile, mockedSearchDatabaseConnect.Object); 
+0

Ah ... Rất hiển nhiên! – Kenn

+0

vâng, đúng! Tôi hiểu ý bạn là gì. – Kenn

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