मैं कार्यों के पारित होने वाले अवैध मानकों के खिलाफ सुरक्षा के लिए एक सरल गार्ड एपीआई का निर्माण कर रहा हूं।फ्लुएंट नेस्टेड गार्ड एपीआई कैसे बनाएं
public static class Guard
{
public static GuardArgument<T> Ensure<T>(T value, string argumentName)
{
return new GuardArgument<T>(value, argumentName);
}
}
public class GuardArgument<T>
{
public GuardArgument(T value, string argumentName)
{
Value = value;
Name = Name;
}
public T Value { get; private set; }
public string Name { get; private set; }
}
// Example extension for validity checks
public static GuardArgument<T> IsNotNull<T>(this GuardArgument<T> guardArgument, string errorMessage)
{
if (guardArgument.Value == null)
{
throw new ArgumentNullException(guardArgument.Name, errorMessage);
}
return guardArgument;
}
पल कोड करने के लिए एक समान तरीके से इस्तेमाल किया जा सकता (ध्यान दें कि यह सिर्फ एक गूंगा उदाहरण है) पर:
void DummyMethod(int? someObject) {
Guard.Ensure(someObject, "someObject")
.IsNotNull()
.IsGreaterThan(0)
.IsLessThan(10);
}
यह सब काम करता है
मैं निम्नलिखित कोड है ठीक।
Guard.Ensure(someObject, "someObject")
.IsNotNull()
.Property(
(x => x.ChildProp1, "childProp1")
.IsNotNull()
.IsGreaterThan(10)
)
.Property(
(x => x.ChildProp2, "childProp2")
.IsNotNull()
.IsLessThan(10)
);
जाहिर है नए .Property
विधि श्रृंखला के लिए माता-पिता GuardArgument
वापस जाने के लिए की जरूरत है: क्या मैं अब ऐसा करने में सक्षम होना चाहता हूँ एपीआई का विस्तार निम्नलिखित तरीके से जाँच में बच्चे के गुण शामिल करने के लिए है। इसके अलावा बच्चे संपत्ति मौजूदा जांच के तरीकों (IsNotNull()
आदि) का उपयोग करने के लिए कोड दोहराव से बचने के लिए सक्षम होने की जरूरत है।
मैं काम नहीं कर सकता कि लैम्ब्डा/प्रॉपर्टी फ़ंक्शन पैरामीटर कैसे बनाएं या जहां .Property
विधि स्थित होनी चाहिए - यानी यह GuardArgument
या कहीं और, यानी एपीआई के लिए बेहतर संरचना होने पर भी संपत्ति होनी चाहिए ।
लिखने में कोई त्रुटि है, लेकिन GuardArgument निर्माता सेट 'नाम = Name' –
आप कहते हैं कि," जाहिर है नए '.Property' विधि क्रम में माता-पिता' GuardArgument' वापस जाने के लिए की जरूरत है कतार के लिए।" - नहीं, यह सही नहीं है। यदि आप एक धाराप्रवाह एपीआई बनाने की कोशिश कर रहे हैं तो आप माता-पिता से पारित नहीं करना चाहिए - आप एक नया 'GuardArgument' कि माता-पिता घोंसले अन्यथा आप श्रृंखला के साथ संदर्भ को बनाए रखना और फिर नए चेन का निर्माण करने की कोशिश कर रहा द्वारा भयानक कीड़े बना सकते हैं निर्माण करना चाहिए उनसे। – Enigmativity