Als Geschäftsregel verbieten wir die Verwendung eines spezifischen Namensraums innerhalb dieses anderen Namensraums.Ist es in C# für einen Komponententest oder eine Codeanalyse möglich, festzustellen, ob ein Namespace in einer Klasse verwendet wird?
Beispiel:
using X.A; //Allowed
using X.B; //Not allowed
namespace X.C
{
const string abc = X.A.MyClass.ABC; //Allowed
const string def = X.B.MyClass.DEF; //Not allowed, because we are using X.B
public void MyMethod()
{
string ghi = X.A.MyClass.GHI; //Allowed
string jkl = X.B.MyClass.JKL; //Not allowed because we are using X.B
string mno = "X.B.MyClass.MNO"; //Allowed, because we are not accessing X.B
}
}
Ist es möglich, dies mit einem Unit-Test zu steuern, über Code-Analyse, oder beides, so dass wir leichter diese Geschäftsregel durchsetzen können, anstatt sich auf Code-Review unter Berufung, die kann diese Art von Sache leicht verpassen? Angenommen, es ist möglich, wie würden Sie das machen?
Was ist der Zweck einer solchen Regel? Das scheint nicht wirklich nützlich zu sein. Warum entfernen Sie nicht einfach die Assembly-Referenz? – poke
Unit-Tests dienen zur Überprüfung von _results_, nicht _implementation_. Die Codeanalyse könnte wahrscheinlich verwendet werden, um diese Verwendung zu erkennen. Wenn Sie nun fragen möchten, wie es geht, fügen Sie das bitte zu Ihrer Frage hinzu und spezifizieren Sie _wich_ Code-Analyse-Tool, das Sie verwenden möchten. –
Zwei oder mehr Assemblys können dieselbe Namespacehierarchie verwenden. Sie können 'X.A' in eine DLL und' X.B' in eine andere einfügen. Aber wirklich, die Kontrolle des Zugriffs nach Namespace ist peinlich und Sie werden das Werkzeug bekämpfen, um es am Laufen zu halten. –