2016-10-11 3 views
4

チームが開発している中規模のプロジェクトにいくつかのデザインルールを定義したいと考えています。これらのルールは、 "ifステートメントは角括弧を使用する必要があります"というルールとは異なります。彼らはデザインの欲望に関連しています。Javaクラスのデザインルールを定義する方法は?

例規則:

  • クラスはJPAクラスと関連を持っている場合、それはGUIクラスとの任意の関連を持つべきではありません。
  • Messageの各サブクラスには、Serializerというサブクラスが必要です。
  • DTOとしてマークされたクラスの場合は、getterメソッドとsetterメソッドのみが必要です。

例1のようなルールを定義し、コンパイル時間をチェックする方法はありますか?

おかげ

+0

https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java。あなたがCheckStyleのようなものを望むように聞こえる。 –

+0

私はそのツールを試していません。しかし、スタイルだけでなく、カスタムルールでデザインをチェックしたい。 –

+0

爪とネジがある場合は、ハンマーとドライバーが必要です。私が言いたいのは、各ツールがあなたの要件のうちの1つに最も適しているのであれば、1つ以上のツールを使用してみませんか? –

答えて

1

は、私はあなたには、いくつかのコンパイル時に処理注釈を設計する必要があると思います。また、非常に巧妙な注釈プロセッサを設計します。

これは簡単な作業ではなく、ハードコードの代わりに書き留めたいことがあります。あなたがここにそのように行きたい場合しかし、あなたの例については、いくつかの提案されています

  • はあなたのJPA関連クラスのいずれかと共に使用する必要があります@IsJPA注釈を作成します。
    @IsGUIアノテーションを作成します。アノテーションは、任意のGUIクラスで使用する必要があります。
    注釈プロセッサでは、@IsJPA注釈付きクラスをすべて@IsGUI注釈付きクラスへの参照のためにスキャンします。

  • @IsMessage注釈を作成し、注釈プロセッサのチェックでは、これらのクラスはSerializer

  • のサブクラスであることを@IsDTO注釈を作成し、注釈プロセッサでは、これらのクラスは唯一のゲッターとセッターを持っていることを確認してください。この点

0

クラスはJPAクラスとの関連性を持っている場合、それはGUIクラスを持つ任意の関連を持つべきではありません。

パッケージ間で許可される依存関係を定義することをお勧めします。コンパイル時にclassycleなどのフリーツールやstructure101のような商用ツールを使用してチェックして確認できます。

0

Sonarでは、カスタムルールを定義できます。

これはコードを書くためのものですが、あなたが望むことができると思います。

Writing Custom Java Rules 101

その後Sonarqube分析はジェンキンスとMavenで実行することができます。 プラグインSonarLint(EclipseまたはIntelli-J用)を使用して、開発中にリアルタイムでチェックすることができます。

ソナーは無料で設定が簡単です。 (ただし、カスタムルールを実装する場合は、ルールの複雑さによって異なります)

関連する問題