واجهات بطلاقة - عدد الكائنات التي يتم إنشاؤها
-
12-09-2019 - |
سؤال
أنا بصدد إنشاء بعض الواجهات الطيلة لبعض الأشياء البسيطة التي ألعبها معها. شيء واحد لاحظته هو أن لدي الكثير من الأشياء المختلفة التي يتم إنشاؤها.
على سبيل المثال بالنظر إلى البيانات أدناه:
Check.Assertion.ForValue.That(value, "value").IsNotNull() : void
Check.Assertion.ForArgument.That(value, "value").IsNotNull() : void
Validate.Assertion.ForDate.That("Test").IsNotNull() : bool
Validate.Assertion.ForNumeric.That("Test").IsNotNull() : bool
لكل '.' (اقبل آخر واحد) أنا جديد كائن. إذا لم أكن أستخدم واجهة بطلاقة هنا، فسأي فقط استخدام الطرق الثابتة.
ما أتساءله هو ما إذا كان أي شخص يعرف أين يلاحظ المرء أي فرق حقيقي في الأداء عند استخدام هذا العدد من الكائنات المثلية (لاحظ أنهم كائنات صغيرة جدا) كما هو الحال في العمل مع الأساليب الثابتة.
هتاف أنتوني
المحلول
لاحظ أنك لا تحتاج بالضرورة إلى إنشاء كائنات جديدة في كل مكان. قد تحل فقط معظم الواجهة بطلاقة من خلال الواجهات، وتقوم فقط بتنفيذ الكثير من الواجهات على كائن واحد. في هذه الحالة يمكنك العودة فقط this
, ، فقط من خلال واجهة جديدة.
مثال:
public interface ICheckAssertionForValue
{
ICheckAssertionForValueThat That(Object value, String name);
}
public interface ICheckAssertion
{
ICheckAssertionForValue ForValue { get; }
}
public class Check : ICheckAssertion
{
public static ICheckAssertion Assertion
{
get { return new Check(); }
}
ICheckAssertionForValue ICheckAssertion.ForValue
{
get { return this; } // <-- no new object here
}
ICheckAssertionForValueThat ICheckAssertionForValue.That(Object value, String name)
{
return new SomeOtherObject(value, name);
}
}