Skip to content

Instantly share code, notes, and snippets.

@im-kashi
Last active October 16, 2020 04:09
Show Gist options
  • Save im-kashi/af6caf10a27ecd1dd16029e13d9e244a to your computer and use it in GitHub Desktop.
Save im-kashi/af6caf10a27ecd1dd16029e13d9e244a to your computer and use it in GitHub Desktop.
C# コーディング 規約

プロジェクト

  • プロジェクトは新しい csproj を使用し、その基本は下記とする。
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

</Project>
  • 他モジュールへの依存は必要最小限とする。
  • プロジェクトを Domain, UseCase, UI のいずれかに分類する。
  • Domain プロジェクトは API の変更を行ってはならない。特段の理由があればその限りではない。
  • Domain プロジェクトは全ての公開 API にその役割・責務・契約を表明したドキュメントコメントを必要とする。省略や曖昧さを許容しない。
  • Domain プロジェクトはカバレッジ 90 %以上を目安に、テストケースを網羅する。

ソースコード

  • よりシンプル、より単純でなければならない。KISS の原則。
  • warning は全て解消する。
  • ソースコードは CodeMaid によるクリーンアップを必須とする。
  • 型名は 1 ~ 2 語で対象を表せるような単語を注意深く選択する。やむを得ない場合に限り 3 語も許容する。スコープの広い変数名もこれに従う。
  • 変数名は camelCase、それ以外の名前は PascalCase とする。
  • メソッド名はドメインを含んではならず、汎用的な語で構成されなければならない。
  • 型・変数のスコープは最小限とする。
  • struct は必ず readonly と共に宣言する。ミュータブルである事に明確な理由があればその限りではない。
  • class / struct のメンバーの並びは下記に従う。
    • static, instance の順とする。
    • fields, constructors, properties, methods の順とする。
    • public, protected, internal, private の順とする。
// static public fields
// static non-public fields
// static initializers
// static public properties
// static non-public properties
// static public methods
// static non-public methods

// instance public fields
// instance non-public fields
// instance public constructors
// instance non-public constructor
// instance public properties
// instance non-public properties
// instance public methods
// instance  non-public methods
  • private fields のプレフィックスはアンダーバー _ とする。
  • 理由のない diff は生じないようにする。
  • 原則的に SOLID に従う。
  • 1 行で 2 つ以上のメソッドを呼んではならない。
  • ドメイン オブジェクトでない型をメソッド引数に渡す際は必ず名前付き引数とする。
  • 条件付き論理演算子 (&&, ||) の使用を禁じる。明確な理由があればその限りではない。
  • 三項条件演算子 (?:) の使用を禁じる。明確な理由があればその限りではない。
  • 非同期メソッドの名前は末尾に Async を付ける。
  • メソッド等の引数を各行に分けて記述する場合、引数の区切りを表すカンマ , は行頭に置く。
var value = query.FindAsync(
      id: 123
    , cancellationToken: default
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment