कुशलतापूर्वक बनाने और उपयोग करने के लिए कैसे करें हमारी आखिरी परियोजना पर हमने अपने यूनिट परीक्षणों के लिए एक साझा परीक्षण स्थिरता के साथ समाप्त किया जिसने कई समस्याएं दीं। तो हमारे वर्तमान प्रोजेक्ट पर मैंने बिल्डर पैटर्न में देखा है। हम विकास इकाइयों और बिल्ड सर्वर पर डेटाबेस के खिलाफ स्मृति में हमारे यूनिट परीक्षण चलाते हैं।बिल्डर पैटर्न
वर्तमान में मैं जो उदाहरण के लिए एक छात्र के लिए निम्नलिखित बिल्डर का उत्पादन एक टी -4 टेम्पलेट है:
public class StudentBuilder : Builder<Student, StudentBuilder>
{
public StudentBuilder()
{
IsMale = true;
}
public StudentBuilder WithFirstName(string firstName)
{
this.FirstName = firstName;
return this;
}
public StudentBuilder WithLastName(string lastName)
{
this.LastName = lastName;
return this;
}
public StudentBuilder WithIsMale(bool isMale)
{
this.IsMale = isMale;
return this;
}
internal override Student Construct()
{
Student result = new Student()
{
FirstName = FirstName ?? "FirstName:" + id.ToString(),
LastName = LastName ?? "LastName:" + id.ToString(),
IsMale = IsMale,
Id = id,
};
/ return result;
}
}
गर्त आधार वर्ग मैं निम्नलिखित तरीके से इस का उपयोग कर सकते हैं:
Student wouter = StudentBuilder.Build()
.WithFirstName("Wouter")
.WithLastName("de Kort");
List<Student> students = StudentBuilder.Build().Multiple(10, (builder, index) => builder.WithFirstName("FirstName" + index));
हम चलाने यह सुनिश्चित करने के लिए कि सब कुछ डेटाबेस के खिलाफ काम करता है, हमारे निर्माण सर्वर पर एकीकरण परीक्षण। इसका मतलब है कि हमें यह सुनिश्चित करना होगा कि सभी संदर्भित बाधाओं को पूरा किया जाए। लेकिन फिर समस्याएं शुरू होती हैं।
उदाहरण के लिए, एक छात्र एक संरक्षक के लिए आवश्यक है, एक संरक्षक, एक स्कूल के अंतर्गत आता है एक शहर, एक करने के लिए एक शहर के लिए एक स्कूल ....
इस तरह कोड में परिणाम होगा:
StudentBuilder.Build().WithMentor(MentorBuilder.Build().WithSchool(SchoolBuilder.Build().WithCity(CityBuilder.Build()))
मुझे इसे कैसे अनुकूलित करना चाहिए? मैंने प्रत्येक बिल्डर के निर्माण पद्धति में 'डिफ़ॉल्ट इमारत' करने के बारे में सोचा है, लेकिन अगर मैं 10 छात्रों का निर्माण करूंगा तो 10 में 10 शहरों में 10 स्कूलों में 10 सलाहकार होंगे ....
या शायद WithAllCity (..), WithAll (स्कूल)
कोई भी विचार बनाने के तरीके बनाना क्या मैं वास्तव में बिल्डर पैटर्न का सही तरीके से उपयोग कर रहा हूं? क्या एक निदेशक वर्ग मदद कर सकता है? या क्या मुझे छात्रबिल्डर से विरासत में कक्षाएं मिलनी चाहिए जो इन विभिन्न मामलों को हल करती हैं?
या कोई अन्य विचार, क्या मुझे डेटाबेस में डेटा भेजने से पहले मेरी सेवा परत में और अधिक सत्यापन जोड़ना चाहिए? फिर मैं मेमोरी डेटाबेस में अपने यूनिट परीक्षणों में और त्रुटियों को पकड़ूंगा।
'हम विकास मशीनों पर और बिल्ड सर्वर पर डेटाबेस के खिलाफ स्मृति में हमारे यूनिट परीक्षण चलाते हैं।' - यह समस्या निवारण के लिए दर्दनाक लगता है। यह आपके प्रोजेक्ट के लिए कैसे काम कर रहा है? –
मैं स्मृति में डेटाबेस से स्विच करने के लिए एकता अनुभाग के साथ विभिन्न app.config सेटिंग्स बनाने के लिए http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5 का उपयोग कर रहा हूं। डेवलपर वहां कॉन्फ़िगरेशन बनाने के लिए यूनिट परीक्षण डेटाबेस को लक्षित कर सकते हैं। यह विकास को गति देता है (स्मृति परीक्षणों में वास्तव में तेज़ी से चलता है) लेकिन यह भी उन बगों को पकड़ता है जिनमें नकली नकली पकड़ नहीं है। लेकिन वहां आपको तुरंत समस्या है कि मैं यह सवाल क्यों पूछ रहा हूं। परीक्षण सुनिश्चित करने के लिए वास्तव में एक लंबा बिल्डर सेटअप –