2016-09-07 4 views
0

Das Team diskutierte ausführlich, wie wir mit einem ziemlich großen Account Objekt umgehen möchten.Nullable Bool in Getter-Methode

Wir möchten nicht jede Eigenschaft im Konstruktor initialisieren, da dies zu viel Aufwand bedeuten würde, da diese Eigenschaft möglicherweise nie auf dieser Webseite verwendet wird. Also haben wir folgendes gefunden.

Wenn jemand das Account-Objekt verwendet und auf die Eigenschaft zugreifen muss, geschieht intern ein Setter. Wir sind kein großer Fan dieser Casting-Technik, aber es ist der einzige Weg, um sicherzustellen, dass wir den wahren/falschen Wert haben, wenn der Code ausgeführt wurde. Mit diesem Ansatz scheint etwas nicht in Ordnung zu sein, aber es scheint der effizienteste Weg zu sein, eine Eigenschaft nur dann zu füllen, wenn wir sie brauchen.

Meine Frage ist: "Gibt es eine bessere Alternative, um zu erreichen, was wir aus einer Entwicklungsstandardperspektive erreichen wollen?"

+0

haben Sie Proxy-Design-Muster in Betracht gezogen? – brykneval

+0

Liste der Optionen/Codestil Fragen sind in der Regel off-topic auf SO. Randnotiz: "initialisiere ... wäre zu viel Overhead" - bedeutet, dass es keine Eigenschaft sein sollte ... sonst ist es ganz normal faul auswertend - nicht wirklich sicher, was du dort nicht magst. –

+0

@ Bryknneval interessant. Wir haben nicht. Scheint wie viel Overhead obwohl durch Vererbung, wir tun das im Wesentlichen, aber mit einer Eigenschaft. –

Antwort

1

Es ist nichts falsch mit dem Konzept - faul Initialisierung.

Sie behalten ein Backing-Feld für Ihre Eigenschaft null und weisen diesem bei der ersten Verwendung einen Wert zu. Sie müssen Ihr Nullable-Bool nicht auf einen Bool-Wert umwandeln, stattdessen können Sie Nullable.Value verwenden.

private bool? projEcho; 
public bool ProjectEcho 
    { get 
     { 
      if (!projEcho.HasValue) 
       projEcho = isProjectEcho(); 
      return projEcho.Value; 
     } 
    } 

Scheint mir netter zu sein. Es wird auch in .NET für faule Initialisierung unterstützen:

https://msdn.microsoft.com/en-us/library/dd997286(v=vs.110).aspx

, aber ich habe es nicht viel persönlich in Anspruch genommen.

+0

Ich werde auch in Lazy 'Danke. –