Frage

Dies ist vor allem eine Anforderung für Kommentare, wenn es einen Grund gibt, ich sollte nicht Sie dieser Straße gehen.

Ich habe ein Multi-tierd, Codesmith generierte Anwendung. Auf der UI-Ebene gibt müssen einige Felder sein, die erforderlich sind, und die erforderlichen Felder in Abhängigkeit von Feldwerten in der gebundenen Einheit variieren. Was ich denke zu tun, ist eine „PropertyRequired“ CustomAttribute jede Eigenschaft in den Entitäten hinzu, dass ich richtig oder falsch einstellen, wenn ich an das Unternehmen in seinem Manager laden. Dann werde ich Reflexion verwenden, um die Eigenschaft abfragen und visuelle Rückmeldung an den Benutzer auf der UI-Ebene zu geben, und ich kann bestätigen, dass alle erforderlichen Eigenschaften einen gültigen Wert in dem Manager, bevor ich zu speichern. Ich habe diese aus als Proof of Concept in einer Einheit mit einer Eigenschaft gearbeitet, aber bevor ich versuche, es den Rest der Anwendung zu erweitern mag ich fragen, ob es jemand mit mehr Erfahrung ist entweder mir sagen, gehen für sie, oder warum werde ich, wie es nicht, wenn ich skalieren. Wenn dies eine schlechte Idee ist, oder wenn Sie einen besseren Ansatz vorschlagen können, bieten Sie bitte Ihre Meinung.

War es hilfreich?

Lösung

Es ist eine ziemlich vernünftige Art und Weise, es zu tun (ich getan habe etwas sehr ähnlich vor) - aber es gibt immer Nachteile:

  • jeder Code an das Unternehmen benötigen, wird die zusätzliche Referenz müssen (unter der Annahme, dass das Attribut und Unternehmen sind in verschiedenen Baugruppen)
  • die Werte (es sei denn, Sie es klug sind) müssen zum Zeitpunkt der Kompilierung festgelegt werden
  • Sie können es nicht auf Entitäten verwenden außerhalb Ihrer Kontrolle

In den meisten Fällen sind die oben kein Problem. Wenn sie sind ein Problem, können Sie ein externes Metadatenmodell unterstützen - aber es sei denn, Sie es brauchen, würde dies zu viel des Guten. Tun Sie es nicht, es sei denn Sie müssen (was bedeutet: gehen Sie voran und verwenden Attribute, sie sind in der Regel in Ordnung)

.

Andere Tipps

Es gibt keinen inhärenten Grund benutzerdefinierte Attribute zu vermeiden. Es ist eine CLR-Funktion unterstützt, die das Rückgrat für viele verfügbaren Produkte ist (Code-Verträge, FxCop, etc ...).

Dies ist kein unvernünftiger Ansatz und gesünder als dieses Zeug in eine UI-Ebene zu backen. Es gibt ein paar Punkte, eine Überlegung wert, bevor die volle Tauchgang:

  • Sie sind Kopplung fest Business-Logik mit der Geschäftseinheit selbst. Gibt es Situationen, in denen ein Feld oder eine gültige Werte ändern könnte erforderlich werden? Sie können sie als Einschränkung oder mit einem inkonsistenten Validierungsmechanismus konfrontiert werden
  • Dynamische Zuordnung ist möglich, aber komplizierter - das heißt, wenn Sie ein Feld gesetzt erforderlich das ist, was es sein wird, es sei denn, Sie überschreiben
  • können benutzerdefinierte Attribute seine recht unflexibel, wenn weiter unten in der Zeile, die Sie etwas mehr kompliziert machen wollen - nämlich, wenn Sie Zustand in ein Attribut angetrieben Validierungsschema übergeben müssen. Attribute wie deklarative Zuordnung. Nur eine wahr / falsch erforderliche Eigenschaft hat, soll hier kein Thema sein, obwohl

Nur ein Teufel befürworten ist wirklich in der Regel für eine ziemlich einfache Anwendung, wo man nur über die erforderlichen Felder kümmern, das ist ein ganz ordentlich Weg, es zu tun

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top