Frage

AGAIN: Wenn Sie Abstimmung -1, lassen Sie einen Kommentar zu erklären, warum. Dieser Beitrag geht es nicht darum, ob Sie, wenn dieser Ansatz zustimmen, aber wie wäre es zu gehen.

Wie viele Architekten, habe ich Coding-Standards durch langjährige Erfahrung entwickelt, an dem ich meine Entwickler erwarten zu halten.

Dies ist vor allem ein Problem mit der Menge, die die drei oder vier Jahre Erfahrung glaubt, machen Sie zu einem Senior-Level developer.Approaching dies als Trainings- und Code-Review-Ausgabe hat nur begrenzten Erfolg erzeugt.

Also, ich dachte, dass es groß sein würde, in der Lage seine individuellen Kompilierung-Fehler an den Build-Prozess mehr strikt durchzusetzen, unseren hauseigenen Best Practices und Coding-Standards hinzuzufügen.

Zum Beispiel verwenden wir Verfahren für alle Datenbankzugriff gespeichert, die Prozedur-Ebene Sicherheit bietet, db Kapselung (Tabellenstruktur wird aus der App versteckt) und andere Vorteile. Einige Entwickler bevorzugen Inline-SQL oder parametrisierte Abfragen und das ist in Ordnung - auf ihre eigene Zeit und eigene Projekte (Anmerkung: Ich bin nicht Interesse an einer Debatte darüber beginnen.).

Ich möchte einen Weg, um eine Kompilation Scheck hinzufügen, dass Funde, sagen, etwas, das aussieht wie

string sql = "insert into some_table (col1,col2) values (@col1, @col2);"

und erzeugt einen Fehler oder, unter bestimmten Umständen eine Warnung, mit einer Meldung wie

Inline SQL and parametrized queries are not permitted.

Oder, wenn sie verwenden das Schlüsselwort var

var x = new MyClass();

Variable definitions must be explicitly typed.

Do Visual Studio und MSBuild bieten eine Möglichkeit, diese Funktionalität hinzufügen? Ich denke, dass ich einen regulären Ausdruck nicht akzeptabel Code verwenden könnte und erzeugen die richtigen Fehler zu finden, aber ich bin nicht sicher, was aus anwendungstechnischer Sicht ist der beste Weg, dies in den Build-Prozess zu integrieren.

Wir könnten einen Pre- oder Post-Build-Schritt fügen Sie eine benutzerdefinierte EXE laufen, aber wie kann ich wieder line- und Datei-specifc Fehler? Auch ich würde diese gerne nach der Kompilierung jeder Datei laufen, anstatt Post-link.

ist ein Regex, den besten Weg, diese Art von Musteranpassung durchzuführen, oder soll ich verrückt werden und den Code durch einen C # Parser ausführen, welche Knoten-Level-Validierung über den Parsing-Baum erlauben würde?

Ich würde Vorschläge und Geschichten von früheren Erfahrungen zu schätzen wissen.

Kommentare Mehrere Befragte haben darauf hingewiesen, dass es möglich ist, die Fähigkeit eines Benutzers zu beschränken, etwas zu laufen, aber eine gespeicherte Prozedur durch db Berechtigungen. Aber wir sind im Begriff, eine 350k + line-Anwendung von ASP 3.0 zu ASP.NET MVC portiert, und die vorhandene Codebasis beruht ziemlich stark auf verketteten SQL, während die neuen Sachen alle Enterprise Library verwendet. Ich glaube, ich könnte ein separates Web-Benutzerkonto für den .NET-Code mit restriktivere Berechtigungen hinzuzufügen.

War es hilfreich?

Lösung

For coding standards I would look at writing custom rules for FxCop or StyleCop. I don't think Regex would be a suitable tool for the job.

For the specific case of requiring Stored Procedures - if you ensure the application doesn't have permission to do anything else on the production database, everyone will soon fall in line.

Andere Tipps

What about writing a plugin for Resharper? Here is a tutorial to start with: Writing plug-ins for ReSharper: Part 1 of Undefined

Implicit typing (var x = ....) is a feature that can be turned off on project level in visual studio.

The other one is trickier. Have you had a look at FxCop, which is the tool for enforcing code standards.

The requirement that only stored procedures can be used should be managed through database permissions. The rule against using var seems fairly arbitrary to me and I can't think of a way to enforce it. Do you have any more examples of your best practices?

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